[Request] Zigbee tutorial for XIAO nRF54L15

Hi,

Could you provide a Zigbee tutorial for XIAO nRF54L15.
There is Zigbee support with the last nRF Connect SDK v3.1.0 version: Technical Documentation

Zigbee R23 add-on for the nRF Connect SDK

Regards

Install NRF connect in vscode, following the seeed Wiki, but use the board path I gave you above the information in the seed Wiki is incorrect and I have submitted a correction but I don’t think it’s posted yet.

Build one of the zigbee samples from this URL

It’s the standard build a sample workflow from the NRF academy course on the nrf54l15 it’s free and a better quality than the tutorials on the seeed Wiki on the topic and is currently the gold standard for information about this MCU.

Are you referring to this part of the Wiki? If so, please tell me the correct board path. I am having trouble because the board is often not found during compilation.

To get started, clone the repository from the GitHub link git clone https://github.com/Seeed-Studio/platform-seeedboards.git into your preferred local folder. Once cloned, navigate to the platform-seeedboards/zephyr/boards directory. Remember this boards folder Path ;

Yes, that exact part shouldn’t have the boards suffix.

It should say

platform-seeedboards/zephyr

Not

platform-seeedboards/zephyr/boards

Thanks for the information.
I tried both, and as long as I use the GUI, I can build and upload without any problems.

Yes I set this value for boardRoots:
/home/user/platform-seeedboards/zephyr

I think we add to add files for this board to allow building:

  • boards/xiao_nrf54l15_nrf54l15_cpuapp.overlay

A the moment I am getting this error when building:

 *  Executing task: nRF Connect: Generate config xiao_nrf54l15/nrf54l15/cpuapp for samples/light_bulb 

Building light_bulb
west build --build-dir /home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1 /home/ludovic/workspace/ncs-zigbee/samples/light_bulb --pristine --board xiao_nrf54l15/nrf54l15/cpuapp -- -DNCS_TOOLCHAIN_VERSION="NONE" -DCONF_FILE="prj.conf" -DBOARD_ROOT="/home/ludovic/platform-seeedboards/zephyr"

-- west build: generating a build system
Loading Zephyr module(s) (Zephyr base): sysbuild_default
-- Found Python3: /home/ludovic/ncs/toolchains/c5be9c56c7/usr/local/bin/python3.12 (found suitable version "3.12.4", minimum required is "3.8") found components: Interpreter 
-- Cache files will be written to: /home/ludovic/.cache/zephyr
-- Found west (found suitable version "1.4.0", minimum required is "0.14.0")
-- Board: xiao_nrf54l15, qualifiers: nrf54l15/cpuapp
Parsing /home/ludovic/workspace/ncs-zigbee/samples/light_bulb/Kconfig.sysbuild
Loaded configuration '/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/_sysbuild/empty.conf'
Merged configuration '/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/_sysbuild/empty.conf'
Configuration saved to '/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/zephyr/.config'
Kconfig header saved to '/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/_sysbuild/autoconf.h'
-- 
   ********************************
   * Running CMake for light_bulb *
   ********************************

Loading Zephyr default modules (Zephyr base).
-- Application: /home/ludovic/workspace/ncs-zigbee/samples/light_bulb
-- CMake version: 3.21.0
-- Found Python3: /home/ludovic/ncs/toolchains/c5be9c56c7/usr/local/bin/python (found suitable version "3.12.4", minimum required is "3.8") found components: Interpreter 
-- Cache files will be written to: /home/ludovic/.cache/zephyr
-- Zephyr version: 3.7.99 (/home/ludovic/workspace/zephyr)
-- Found west (found suitable version "1.4.0", minimum required is "0.14.0")
-- Board: xiao_nrf54l15, qualifiers: nrf54l15/cpuapp
-- Found host-tools: zephyr 0.17.0 (/home/ludovic/ncs/toolchains/c5be9c56c7/opt/zephyr-sdk)
-- Found toolchain: zephyr 0.17.0 (/home/ludovic/ncs/toolchains/c5be9c56c7/opt/zephyr-sdk)
-- Found Dtc: /home/ludovic/ncs/toolchains/c5be9c56c7/usr/bin/dtc (found suitable version "1.5.0", minimum required is "1.4.6") 
-- Found BOARD.dts: /home/ludovic/platform-seeedboards/zephyr/boards/arm/xiao_nrf54l15/xiao_nrf54l15_nrf54l15_cpuapp.dts
-- Found devicetree overlay: /home/ludovic/workspace/ncs-zigbee/samples/light_bulb/boards/xiao_nrf54l15_nrf54l15_cpuapp.overlay
unit address and first address in 'reg' (0x5004c000) don't match for /soc/peripheral@50000000/vpr@4c000/mailbox@1
-- Generated zephyr.dts: /home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/light_bulb/zephyr/zephyr.dts
-- Generated devicetree_generated.h: /home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/light_bulb/zephyr/include/generated/zephyr/devicetree_generated.h
-- Including generated dts.cmake file: /home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/light_bulb/zephyr/dts.cmake

warning: IEEE802154_NRF5_FCS_IN_LENGTH (defined at drivers/ieee802154/Kconfig.nrf5:65) has direct dependencies IEEE802154_NRF5 && IEEE802154 with value n, but is currently being y-selected by the following symbols:
 - NET_L2_ZIGBEE (defined at /home/ludovic/workspace/ncs-zigbee/subsys/Kconfig:48, /home/ludovic/workspace/nrf/subsys/zigbee/Kconfig:36), with value y, direct dependencies (NETWORKING && ZIGBEE_ADD_ON) || (NETWORKING && ZIGBEE) (value: y), and select condition NETWORKING && ZIGBEE_ADD_ON (value: y)
Parsing /home/ludovic/workspace/zephyr/Kconfig
Loaded configuration '/home/ludovic/platform-seeedboards/zephyr/boards/arm/xiao_nrf54l15/xiao_nrf54l15_nrf54l15_cpuapp_defconfig'
Merged configuration '/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/prj.conf'
Merged configuration '/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/light_bulb/zephyr/.config.sysbuild'

error: Aborting due to Kconfig warnings

CMake Error at /home/ludovic/workspace/zephyr/cmake/modules/kconfig.cmake:396 (message):
  command failed with return code: 1
Call Stack (most recent call first):
  /home/ludovic/workspace/nrf/cmake/modules/kconfig.cmake:29 (include)
  /home/ludovic/workspace/zephyr/cmake/modules/zephyr_default.cmake:133 (include)
  /home/ludovic/workspace/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
  /home/ludovic/workspace/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
  CMakeLists.txt:9 (find_package)


-- Configuring incomplete, errors occurred!
CMake Error at cmake/modules/sysbuild_extensions.cmake:514 (message):
  CMake configure failed for Zephyr project: light_bulb

  Location: /home/ludovic/workspace/ncs-zigbee/samples/light_bulb
Call Stack (most recent call first):
  cmake/modules/sysbuild_images.cmake:20 (ExternalZephyrProject_Cmake)
  cmake/modules/sysbuild_default.cmake:20 (include)
  /home/ludovic/workspace/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:75 (include)
  /home/ludovic/workspace/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
  /home/ludovic/workspace/zephyr/share/sysbuild-package/cmake/SysbuildConfig.cmake:8 (include)
  template/CMakeLists.txt:10 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1/CMakeFiles/CMakeOutput.log".
FATAL ERROR: command exited with status 1: /home/ludovic/ncs/toolchains/c5be9c56c7/usr/local/bin/cmake -DWEST_PYTHON=/home/ludovic/ncs/toolchains/c5be9c56c7/usr/local/bin/python3.12 -B/home/ludovic/workspace/ncs-zigbee/samples/light_bulb/build_1 -GNinja -DBOARD=xiao_nrf54l15/nrf54l15/cpuapp -DNCS_TOOLCHAIN_VERSION=NONE -DCONF_FILE=prj.conf -DBOARD_ROOT=/home/ludovic/platform-seeedboards/zephyr -S/home/ludovic/workspace/zephyr/share/sysbuild -DAPP_DIR:PATH=/home/ludovic/workspace/ncs-zigbee/samples/light_bulb

 *  The terminal process terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it.

^-- we’re missing this in our xiao board defs, which is kinda critical since it’s the zigbee radio stack.

IEEE 802.15. 4 is a standard maintained by the IEEE 802.15 group which specifies the physical layer and media access control for low-rate wireless personal area networks (LR-WPANs). It is the basis for the ZigBee

I’m going through the dev-academy courses to better understand and attempt to solve this problem. I’m pretty sure this is the same SOC as the nrf54L15DK board, so it should be relatively straight forward to pull in the missing parts of the board def… once I understand what the heck I’m doing!

1 Like

I found the board definitions in the nrf54L15dk, that I copied over into the seed board defs, I was then able to compile the hpf mspi sample which was falling due to missing IPC definitions.

I’m testing to make sure it doesn’t Brick the board, then I’ll post a repo with the modified seeed boards if it works.

I also enabled the radio and temperature sensor which are what were causing the light bulb samples to fail.

1 Like

Is it a good idea to use the High-Performance Framework (HPF) support in the nRF Connect SDK, which is still experimental?

I can use JTAG in the worst case with the Seeeduino XIAO Expansion Board.

Thanks for your help.

Well, for me using the hpf zephyr subsystem is desirable, which is why I’m putting effort in to write a soft device driver for it.

I’m stuck right now though, I’m not sure if the correct order of operations to get my test board back to a working state, I can see I wiped core 0, but core 1 is running, so the chip won’t accept a flash erase.

Hi there,

It is a BAD example of what is really required. The point is You can create a folder, then open the terminal in there and Git clone it directly to it inside the folder there,
Then in the settings You’ll know the name of it so The environment can find it. Poor technical writing there, doesn’t convey the requirement correctly IMO.

I had to read it twice, initially. but it is working in the GUI AOK.

GL :slight_smile: PJ :v:

Generating files from D:/Nordic/myapps/workspace/blinky/build_1/blinky/zephyr/zephyr.elf for board: xiao_nrf54l15

everything is short paths too, don’t get Long or you will get some goofy error messages unrelated to it.

You mean for the temperature sensor?

Yes you can build Blinky…

But have you tried building any of the more complex samples, eg, the ones that use any of thes soc features I listed below that are not enabled in our board defs.

But if you try to build any of the samples that require the temperature sensor, (inside the SOC!)
IPC, (required to talk between core 0 and core one)
The IEEE radios, (required for all zigbee and matter samples)
The lfxo and hfxo crystals. ( Present in Xiao PCB schematic, but not in board def)

They won’t be able to built due to device tree errors.

There’s also a fix for the seeed boards in the zephyr is repo that fixes the enable pin for the IMU being defined with reverse polarity.

PJ, You tend to know this stuff super well, so I’m hoping I’m wrong and you can tell me when I’m doing wrong.

Regards

Toastee

Hi there,

Well you are doing some brush clearing for sure, love the progress and effort, Yea I suspect Seeedineers are still working out the DEV tree and some overlays that will be required to have a full plethora of options for builds etc. You’re not nuts :grin:
The more we look the more we will find so more work to be done and more exercise of patients to really get the BANG out of the New hardware. I commend them for making such a bold move to the latest generation, and as predicted there will be some learning curve for everyone. (m:e included) :smile:

I’ll be looking to Squeeze ALL the juice from this one. :+1:
IMO the MCUBoot will be a major plus , when worked out … and crash proof DFU is a nice thought :crossed_fingers:
The BLE , extended features look very , cool too.
Stay tuned and intrigued. School starting up as well there should be a bus load of activity coming.

HTH
GL :slight_smile: PJ :v:

So after the first 20 or so posts LN, I zonked out, back later and push that rock up the hill more :+1:

I’m going to post and update my experimental board defs repo with a huge disclaimer.

"There is a non 0 chance that these may put the Xiao nrf54L15 into an unusable state. I’ve got a stuck app on core 1, and think I accidentally enabled some sort of onboard protection.

But… That’s cause I tried to flash my custom ws2812 libs, and there’s a bug in it…

Chances are I got the board definition update right…

So to anyone who tries my version, use at your own risk.
"

On the topic of MCUBoot, I’ve asked my seeed contact specifically for any information they have internally about using it with the nrf54l15, hopefully they have some good answers when they return!

I have fixed the repo mentioned in this and tested it in platformIO.

this is my platformio.ini file for building with my updated version of the board defs. this also fixes the but in platformIO where it can’t find the board name xiao_nrf54l15!!!
Woot

[env:seeed-xiao-nrf54l15]
platform = https://github.com/Toastee0/platform-seeedboards.git
framework = zephyr
board = seeed-xiao-nrf54l15
monitor_speed = 115200




; If you can't upload the firmware to xiao-nrf54l15, please try to uncomment the following configuration.
;upload_protocol = custom
;upload_command = python "${platformio.platforms_dir}/Seeed Studio/scripts/xiao_nrf54l15_recover_flash.py" --hex $SOURCE --mass-erase
1 Like

Bump, because I updated the git repo with a working version.

1 Like

Can this also help us with the Zigbee examples section?

It enables the missing radio and temperature sensor the matter light bulb needs…

So likely yes.

Note ,My version of the samples pull in the board definition differently, the original samples try to pull from the seed package, myne expect you to copy the nrf54L15 board folder to a specific location in zephyr’s board structure.

1 Like