Skip to content

Commit 3f823bd

Browse files
committed
boards: fobe: add FoBE Quill nRF52840 Mesh board
This commit introduces the FoBE Quill nRF52840 Mesh board configuration, including device tree files, Kconfig settings, and necessary documentation. It also adds GPIO header definitions and updates vendor prefixes for proper identification. Signed-off-by: Chiho Sin [email protected]
1 parent f2f496d commit 3f823bd

16 files changed

+659
-0
lines changed

boards/fobe/index.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.. _boards-fobe:
2+
3+
FoBE Studio
4+
#######################
5+
6+
.. toctree::
7+
:maxdepth: 1
8+
:glob:
9+
10+
**/*
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# QUILL NRF52840 MESH board configuration
2+
3+
# Copyright (c) 2025 Chiho Sin
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
if BOARD_QUILL_NRF52840_MESH
7+
8+
source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig"
9+
10+
endif # BOARD_QUILL_NRF52840_MESH
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# QUILL NRF52840 MESH board configuration
2+
3+
# Copyright (c) 2025 Chiho Sin
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
config BOARD_QUILL_NRF52840_MESH
7+
select SOC_NRF52840_QIAA
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
board_runner_args(nrfjprog "--nrf-family=NRF52")
4+
board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000")
5+
board_runner_args(pyocd "--target=nrf52840" "--frequency=4000000")
6+
board_runner_args(uf2 "--board-id=nRF52840-FoBEF1101-rev1a")
7+
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
8+
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
9+
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
10+
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
11+
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
12+
include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake)
13+
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
board:
2+
name: quill_nrf52840_mesh
3+
full_name: Quill nRF52840 Mesh
4+
vendor: fobe
5+
socs:
6+
- name: nrf52840
Binary file not shown.
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
.. zephyr:board:: quill_nrf52840_mesh
2+
3+
Overview
4+
********
5+
6+
The FoBE Quill nRF52840 Mesh is a development kit featuring the nRF52840 SoC and an integrated SX1262 LoRa® transceiver.
7+
8+
For more details see the `FoBE Quill nRF52840 Mesh`_ documentation page.
9+
10+
.. figure:: img/quill_nrf52840_mesh.webp
11+
:align: center
12+
:alt: Quill nRF52840 Mesh
13+
14+
Quill nRF52840 Mesh
15+
16+
Hardware
17+
********
18+
19+
The FoBE Quill nRF52840 Mesh is a compact and versatile development platform for IoT solutions. It combines Nordic's high-end multiprotocol SoC, the nRF52840, with Semtech's ultra-low-power sub-GHz radio transceiver, the SX1262 (packaged using SiP technology). Designed for IoT applications, it offers a comprehensive wireless connectivity solution, supporting protocols such as Bluetooth 5, Thread, Zigbee, IEEE 802.15.4, and LoRa®.
20+
21+
This development board is feature-rich, including a battery charger, dedicated power path management, an ultra-low quiescent current DC-DC converter, a 1.14-inch color IPS display, user-programmable LEDs and buttons, an MFP expansion connector, a reversible USB-C connector, and header sockets for easy expansion.
22+
23+
Supported Features
24+
==================
25+
26+
.. zephyr:board-supported-hw::
27+
28+
Connections and IOs
29+
===================
30+
31+
The `FoBE Quill nRF52840 Mesh`_ Documentation has detailed information about boardconnections.
32+
33+
Programming and Debugging
34+
*************************
35+
36+
.. zephyr:board-supported-runners::
37+
38+
The Quill nRF52840 Mesh ships with the `FoBE nRF52 Bootloader`_ which supports flashing using `UF2`_. Doing so allows easy flashing of new images, but does not support debugging the device. For debugging please use `External Debugger`_.
39+
40+
UF2 Flashing
41+
============
42+
43+
To enter the bootloader, connect the USB port of the Quill nRF52840 Mesh to your host, and double tap the reset button. A mass storage device named ``QUILLNRF`` should appear on the host. Using the command line, or your file manager copy the :file:`zephyr/zephyr.uf2` file from your build to the base of the ``QUILLNRF`` mass storage device. The board will automatically reset and launch the newly flashed application.
44+
45+
External Debugger
46+
=================
47+
48+
In order to support debugging the device, instead of using the bootloader, you can use an :ref:`External Debug Probe <debug-probes>`. To flash and debug Zephyr applications you need to connect an SWD debugger to the SWD pins on the board.
49+
50+
For Segger J-Link debug probes, follow the instructions in the :ref:`jlink-external-debug-probe` page to install and configure all the necessary software.
51+
52+
Building & Flashing
53+
*******************
54+
55+
Simple build and flash
56+
======================
57+
58+
Build and flash applications as usual (see :ref:`build_an_application` and :ref:`application_run` for more details).
59+
60+
.. tabs::
61+
62+
.. group-tab:: Quill nRF52840 Mesh
63+
64+
.. zephyr-app-commands::
65+
:zephyr-app: samples/hello_world
66+
:board: quill_nrf52840_mesh
67+
:goals: build
68+
69+
The usual ``flash`` target will work with the ``quill_nrf52840_mesh`` board configuration. Here is an example for the :zephyr:code-sample:`hello_world` application.
70+
71+
.. tabs::
72+
73+
.. group-tab:: Quill nRF52840 Mesh
74+
75+
.. zephyr-app-commands::
76+
:zephyr-app: samples/hello_world
77+
:board: quill_nrf52840_mesh
78+
:goals: flash
79+
80+
Flashing with External Debugger
81+
--------------------------------
82+
83+
Setup and connect a supported debug probe (JLink, instructions at :ref:`jlink-external-debug-probe` or BlackMagic Probe). Then build and flash applications as usual.
84+
85+
Here is an example for the :zephyr:code-sample:`hello_world` application.
86+
87+
First, run your favorite terminal program to listen for output.
88+
89+
.. code-block:: console
90+
91+
$ minicom -D <tty_device> -b 115200
92+
93+
Replace :code:`<tty_device>` with the port where the board can be found. For example, under Linux, :code:`/dev/ttyACM0`.
94+
95+
Then build and flash the application. Just add ``CONFIG_BOOT_DELAY=5000`` to the configuration, so that USB CDC ACM is initialized before any text is printed:
96+
97+
.. tabs::
98+
99+
.. group-tab:: Quill nRF52840 Mesh
100+
101+
.. zephyr-app-commands::
102+
:zephyr-app: samples/hello_world
103+
:board: quill_nrf52840_mesh
104+
:goals: build flash
105+
:gen-args: -DCONFIG_BOOT_DELAY=5000
106+
107+
Debugging
108+
*********
109+
110+
Refer to the :ref:`jlink-external-debug-probe` page to learn about debugging boards with a Segger IC.
111+
112+
Debugging using a BlackMagic Probe is also supported.
113+
114+
Here is an example for building and debugging the :zephyr:code-sample:`hello_world` application.
115+
116+
.. tabs::
117+
118+
.. group-tab:: Quill nRF52840 Mesh
119+
120+
.. zephyr-app-commands::
121+
:zephyr-app: samples/hello_world
122+
:board: quill_nrf52840_mesh
123+
:goals: debug
124+
125+
Testing the LEDs
126+
*****************
127+
128+
There is a sample that allows to test that LEDs on the board are working properly with Zephyr:
129+
130+
.. tabs::
131+
132+
.. group-tab:: Quill nRF52840 Mesh
133+
134+
.. zephyr-app-commands::
135+
:zephyr-app: samples/basic/blinky
136+
:board: quill_nrf52840_mesh
137+
:goals: build flash
138+
139+
You can build and flash the examples to make sure Zephyr is running correctly on your board.
140+
141+
Testing shell over USB
142+
***********************
143+
144+
There is a sample that allows to test shell interface over USB CDC ACM interface with Zephyr:
145+
146+
.. tabs::
147+
148+
.. group-tab:: Quill nRF52840 Mesh
149+
150+
.. zephyr-app-commands::
151+
:zephyr-app: samples/subsys/shell/shell_module
152+
:board: quill_nrf52840_mesh
153+
:goals: build flash
154+
155+
References
156+
**********
157+
158+
.. target-notes::
159+
160+
.. _`FoBE Quill nRF52840 Mesh`: https://docs.fobestudio.com/product/f1101
161+
.. _`FoBE nRF52 Bootloader`: https://github.com/fobe-projects/fobe-nrf52-bootloader
162+
.. _`UF2`: https://github.com/microsoft/uf2
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright (c) 2025 Chiho Sin
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
quill_header: connector {
9+
compatible = "fobe,quill-header";
10+
#gpio-cells = <2>;
11+
gpio-map-mask = <0xffffffff 0xffffffc0>;
12+
gpio-map-pass-thru = <0 0x3f>;
13+
gpio-map = <0 0 &gpio1 12 0>, /* D0 */
14+
<1 0 &gpio1 11 0>, /* D1 */
15+
<2 0 &gpio1 14 0>, /* D2 */
16+
<3 0 &gpio1 0 0>, /* D3 */
17+
<4 0 &gpio0 24 0>, /* D4 */
18+
<5 0 &gpio0 22 0>, /* D5 */
19+
<6 0 &gpio0 20 0>, /* D6 */
20+
<7 0 &gpio0 17 0>, /* D7 */
21+
<8 0 &gpio0 15 0>, /* D8 */
22+
<9 0 &gpio0 13 0>, /* D9 */
23+
<10 0 &gpio0 16 0>, /* D10 */
24+
<11 0 &gpio0 14 0>, /* D11 */
25+
<12 0 &gpio0 11 0>, /* D12 */
26+
<13 0 &gpio1 8 0>, /* D13 */
27+
<14 0 &gpio0 3 0>, /* A0 */
28+
<15 0 &gpio0 28 0>, /* A1 */
29+
<16 0 &gpio0 2 0>, /* A2 */
30+
<17 0 &gpio0 29 0>, /* A3 */
31+
<18 0 &gpio0 31 0>, /* A4 */
32+
<19 0 &gpio0 30 0>; /* A5 */
33+
};
34+
};
35+
36+
quill_spi: &spi2 {};
37+
quill_i2c: &i2c0 {};
38+
quill_serial: &uart0 {};
39+
quill_adc: &adc {};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Copyright (c) 2022 Nordic Semiconductor
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# Suppress "unique_unit_address_if_enabled" to handle the following overlaps:
5+
# - power@40000000 & clock@40000000 & bprot@40000000
6+
# - acl@4001e000 & flash-controller@4001e000
7+
list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*
2+
* Copyright (c) 2025 Chiho Sin
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
&pinctrl {
8+
uart0_default: uart0_default {
9+
group1 {
10+
psels = <NRF_PSEL(UART_TX, 1, 12)>;
11+
};
12+
13+
group2 {
14+
psels = <NRF_PSEL(UART_RX, 1, 11)>;
15+
bias-pull-up;
16+
};
17+
};
18+
19+
uart0_sleep: uart0_sleep {
20+
group1 {
21+
psels = <NRF_PSEL(UART_TX, 1, 12)>,
22+
<NRF_PSEL(UART_RX, 1, 11)>;
23+
low-power-enable;
24+
};
25+
};
26+
27+
i2c0_default: i2c0_default {
28+
group1 {
29+
psels = <NRF_PSEL(TWIM_SDA, 0, 22)>,
30+
<NRF_PSEL(TWIM_SCL, 0, 24)>;
31+
};
32+
};
33+
34+
i2c0_sleep: i2c0_sleep {
35+
group1 {
36+
psels = <NRF_PSEL(TWIM_SDA, 0, 22)>,
37+
<NRF_PSEL(TWIM_SCL, 0, 24)>;
38+
low-power-enable;
39+
};
40+
};
41+
42+
pwm0_default: pwm0_default {
43+
group1 {
44+
psels = <NRF_PSEL(PWM_OUT0, 1, 15)>;
45+
nordic,invert;
46+
};
47+
};
48+
49+
pwm0_sleep: pwm0_sleep {
50+
group1 {
51+
psels = <NRF_PSEL(PWM_OUT0, 1, 15)>;
52+
low-power-enable;
53+
};
54+
};
55+
56+
spi2_default: spi2_default {
57+
group1 {
58+
psels = <NRF_PSEL(SPIM_SCK, 0, 23)>,
59+
<NRF_PSEL(SPIM_MOSI, 0, 21)>,
60+
<NRF_PSEL(SPIM_MISO, 0, 19)>;
61+
};
62+
};
63+
64+
spi2_sleep: spi2_sleep {
65+
group1 {
66+
psels = <NRF_PSEL(SPIM_SCK, 0, 23)>,
67+
<NRF_PSEL(SPIM_MOSI, 0, 21)>,
68+
<NRF_PSEL(SPIM_MISO, 0, 19)>;
69+
low-power-enable;
70+
};
71+
};
72+
73+
spi3_default: spi3_default {
74+
group1 {
75+
psels = <NRF_PSEL(SPIM_SCK, 1, 9)>,
76+
<NRF_PSEL(SPIM_MOSI, 0, 8)>;
77+
};
78+
};
79+
80+
spi3_sleep: spi3_sleep {
81+
group1 {
82+
psels = <NRF_PSEL(SPIM_SCK, 1, 9)>,
83+
<NRF_PSEL(SPIM_MOSI, 0, 8)>;
84+
low-power-enable;
85+
};
86+
};
87+
};

0 commit comments

Comments
 (0)