Skip to content

Commit 0e22d75

Browse files
committed
boards: silabs: Add support for Silabs EFR32ZG28 BRD4401C board
Add support for Silicon Labs BRD4401C (a.k.a xG28-RB4401C) Radio Board. Signed-off-by: Shontal Biton <shontal1005@gmail.com>
1 parent 3ba9ae0 commit 0e22d75

File tree

12 files changed

+588
-0
lines changed

12 files changed

+588
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright (c) 2025 Shontal Biton
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
if BOARD_XG28_RB4401C
5+
6+
config LOG_BACKEND_SWO_FREQ_HZ
7+
default 875000
8+
depends on LOG_BACKEND_SWO
9+
10+
if SOC_GECKO_USE_RAIL
11+
12+
config FPU
13+
default y
14+
15+
endif # SOC_GECKO_USE_RAIL
16+
17+
endif # BOARD_XG28_RB4401C
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright (c) 2025 Shontal Biton
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
config BOARD_XG28_RB4401C
5+
select SOC_PART_NUMBER_EFR32ZG28B322F1024IM68
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
board_runner_args(jlink "--device=EFR32ZG28BxxxF1024")
4+
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
5+
6+
board_runner_args(openocd)
7+
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
8+
9+
board_runner_args(silabs_commander "--device=EFR32ZG28B322F1024IM68")
10+
include(${ZEPHYR_BASE}/boards/common/silabs_commander.board.cmake)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
board:
2+
name: xg28_rb4401c
3+
full_name: EFR32xG28 868-915 MHz 20 dBm (xG28-RB4401C)
4+
vendor: silabs
5+
socs:
6+
- name: efr32zg28b322f1024im68
Loading
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
.. zephyr:board:: xg28_rb4401c
2+
3+
Overview
4+
********
5+
6+
The EFR32ZG28 Radio Board is the radio board delivered with
7+
`xG28-PK6024A Website`_. It contains a Wireless System-On-Chip from the
8+
EFR32ZG28 family built on an ARM Cortex®-M33 processor with excellent low
9+
power capabilities.
10+
11+
The BRD4401C a.k.a. xG28-RB4401C radio board plugs into the Wireless Pro Kit
12+
Mainboard BRD4401C and is supported as one of :ref:`silabs_radio_boards`.
13+
14+
Hardware
15+
********
16+
17+
- EFR32ZG28B322F1024IM68 SoC
18+
- CPU core: ARM Cortex®-M33 with FPU
19+
- Flash memory: 1024 kB
20+
- RAM: 256 kB
21+
- Transmit power: up to +20 dBm
22+
- Operation frequency: 868-915 MHz
23+
- Crystals for LFXO (32.768 kHz) and HFXO (39 MHz).
24+
- Silicon Labs Si7021 relative humidity and temperature sensor
25+
- Low-power 128x128 pixel Memory LCD
26+
- Macronix ultra low power 8-Mbit SPI flash (MX25R8035F)
27+
28+
For more information about the EFR32ZG28 SoC and BRD4401C board, refer to these
29+
documents:
30+
31+
- `EFR32ZG28 Website`_
32+
- `EFR32ZG28 Datasheet`_
33+
- `EFR32xG28 Reference Manual`_
34+
- `XG28-PK6024A Website`_
35+
- `BRD4401C User Guide`_
36+
37+
Supported Features
38+
==================
39+
40+
.. zephyr:board-supported-hw::
41+
42+
Connections and IOs
43+
===================
44+
45+
In the following table, the column **Name** contains Pin names. For example, PA2
46+
means Pin number 2 on PORTA, as used in the board's datasheets and manuals.
47+
48+
+-------+--------------+-------------------------------------+
49+
| Name | Function | Usage |
50+
+=======+==============+=====================================+
51+
| PB1 | GPIO | Push Button 0 |
52+
+-------+--------------+-------------------------------------+
53+
| PB2 | GPIO | LED0 |
54+
+-------+--------------+-------------------------------------+
55+
| PB3 | GPIO | Push Button 1 |
56+
+-------+--------------+-------------------------------------+
57+
| PC1 | US1_TX | Display/Flash SPI MOSI |
58+
+-------+--------------+-------------------------------------+
59+
| PC2 | US1_RX | Serial Flash MISO |
60+
+-------+--------------+-------------------------------------+
61+
| PC3 | US1_CLK | Serial Flash/Display SPI Clock |
62+
+-------+--------------+-------------------------------------+
63+
| PC4 | US1_CS | Serial Flash Chip Select |
64+
+-------+--------------+-------------------------------------+
65+
| PC5 | I2C0_SCL | Si7021 I2C Clock |
66+
+-------+--------------+-------------------------------------+
67+
| PC6 | GPIO | External COM Inversion Signal |
68+
+-------+--------------+-------------------------------------+
69+
| PC7 | I2C0_SDA | Si7021 I2C Data |
70+
+-------+--------------+-------------------------------------+
71+
| PC8 | US1_CS | Display Serial Chip Select |
72+
+-------+--------------+-------------------------------------+
73+
| PC9 | GPIO | Display Control Access |
74+
+-------+--------------+-------------------------------------+
75+
| PC11 | GPIO | Si7021 Enable |
76+
+-------+--------------+-------------------------------------+
77+
| PD3 | GPIO | LED1 |
78+
+-------+--------------+-------------------------------------+
79+
| PD11 | UART_TX | UART Console TX |
80+
+-------+--------------+-------------------------------------+
81+
| PD12 | UART_RX | UART Console RX |
82+
+-------+--------------+-------------------------------------+
83+
84+
The default configuration can be found in
85+
:zephyr_file:`boards/silabs/radio_boards/xg28_rb4401c/xg28_rb4401c_defconfig`
86+
87+
System Clock
88+
============
89+
90+
The EFR32ZG28 SoC is configured to use the 39 MHz external oscillator on the
91+
board.
92+
93+
Serial Port
94+
===========
95+
96+
The EFR32ZG28 SoC has one USART and three EUSARTs.
97+
USART0 is connected to the board controller and is used for the console.
98+
99+
Programming and Debugging
100+
*************************
101+
102+
.. zephyr:board-supported-runners::
103+
104+
Flashing
105+
========
106+
107+
Connect the BRD4401C board with a mounted BRD4401C radio module to your host
108+
computer using the USB port.
109+
110+
Here is an example for the :zephyr:code-sample:`hello_world` application.
111+
112+
.. zephyr-app-commands::
113+
:zephyr-app: samples/hello_world
114+
:board: xg28_rb4401c
115+
:goals: flash
116+
117+
Open a serial terminal (minicom, putty, etc.) with the following settings:
118+
119+
- Speed: 115200
120+
- Data: 8 bits
121+
- Parity: None
122+
- Stop bits: 1
123+
124+
Reset the board and you should see the following message in the terminal:
125+
126+
.. code-block:: console
127+
128+
Hello World! xg28_rb4401c/efr32zg28b322f1024im68
129+
130+
131+
.. _xG28-PK6024A Website:
132+
https://www.silabs.com/development-tools/wireless/efr32xg28-pro-kit-14-dbm
133+
134+
.. _BRD4401C User Guide:
135+
https://www.silabs.com/documents/public/user-guides/ug535-xg28-20dbm-user-guide.pdf
136+
137+
.. _EFR32ZG28 Website:
138+
https://www.silabs.com/wireless/z-wave/efr32zg28-z-wave-800-socs
139+
140+
.. _EFR32ZG28 Datasheet:
141+
https://www.silabs.com/documents/public/data-sheets/efr32zg28-datasheet.pdf
142+
143+
.. _EFR32xG28 Reference Manual:
144+
https://www.silabs.com/documents/public/reference-manuals/efr32xg28-rm.pdf
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright (c) 2021 Linaro Limited
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
# SPI is implemented via usart so node name isn't spi@...
5+
list(APPEND EXTRA_DTC_FLAGS "-Wno-spi_bus_bridge")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
if {[info exists env(OPENOCD_INTERFACE)]} {
2+
set INTERFACE $env(OPENOCD_INTERFACE)
3+
} else {
4+
# By default connect over Debug USB port using the J-Link interface
5+
set INTERFACE "jlink"
6+
}
7+
8+
source [find interface/$INTERFACE.cfg]
9+
10+
transport select swd
11+
12+
set CHIPNAME efr32
13+
14+
source [find target/efm32.cfg]
15+
16+
$_TARGETNAME configure -event gdb-attach {
17+
echo "Debugger attaching: halting execution"
18+
reset halt
19+
gdb_breakpoint_override hard
20+
}
21+
22+
$_TARGETNAME configure -event gdb-detach {
23+
echo "Debugger detaching: resuming execution"
24+
resume
25+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright (c) 2025 Shontal Biton
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <dt-bindings/pinctrl/silabs/xg28-pinctrl.h>
8+
9+
&pinctrl {
10+
eusart1_default: eusart1_default {
11+
group0 {
12+
pins = <EUSART1_TX_PC1>, <EUSART1_SCLK_PC3>;
13+
drive-push-pull;
14+
output-high;
15+
};
16+
17+
group1 {
18+
pins = <EUSART1_RX_PC2>;
19+
input-enable;
20+
silabs,input-filter;
21+
};
22+
};
23+
24+
i2c0_default: i2c0_default {
25+
group0 {
26+
pins = <I2C0_SCL_PC5>, <I2C0_SDA_PC7>;
27+
drive-open-drain;
28+
bias-pull-up;
29+
};
30+
};
31+
32+
timer0_default: timer0_default {
33+
group0 {
34+
pins = <TIMER0_CC0_PB2>, <TIMER0_CC1_PD3>;
35+
drive-push-pull;
36+
output-high;
37+
};
38+
};
39+
40+
usart0_default: usart0_default {
41+
group0 {
42+
pins = <USART0_TX_PA8>;
43+
drive-push-pull;
44+
output-high;
45+
};
46+
47+
group1 {
48+
pins = <USART0_RX_PA9>;
49+
input-enable;
50+
silabs,input-filter;
51+
};
52+
};
53+
};

0 commit comments

Comments
 (0)