cancel
Showing results for 
Search instead for 
Did you mean: 

Flashing M0+ Core with Zigbee RFD Firmware on STM32WB55

Azizzr02
Associate II

 

Dear ST Community,

 

I'm working on a Zigbee IoT project where I need to configure my STM32WB55RG Nucleo board as a Zigbee End Device that joins an external coordinator (Raspberry Pi + CC2531 running Zigbee2MQTT). I'm having trouble properly flashing the M0+ core with the Zigbee RFD firmware.

 

What I've Done So Far:

  1. Installed STM32CubeIDE 1.13.0 and STM32CubeProgrammer 2.13.0 on my Windows 11 laptop
  2. Located the Zigbee RFD firmware at:
    STM32Cube_FW_WB_V1.16.0/Projects/STM32_Copro_Wireless_Binaries/Zigbee/stm32wb5x_Zigbee_RFD_fw.bin
  3. Connected my Nucleo board via the ST-LINK USB port (CN4)
  4. Opened STM32CubeProgrammer and connected successfully to my board (STM32WB55RC)
 

My Specific Issue:

When I connect in STM32CubeProgrammer, I see the "MCU Core" section but I'm unsure how to correctly select the M0+ core (CPU2) for flashing. The interface shows:

 
  • Cortex-M4 (CPU1)
  • Cortex-M0+ (CPU2)
 

Questions:

  1. What is the exact procedure to select and flash the M0+ core (CPU2) in STM32CubeProgrammer?
  2. Are there specific settings I should verify before flashing (boot mode, jumpers, etc.)?
  3. How can I confirm after flashing that the M0+ core is running the Zigbee RFD firmware correctly?
  4. Is there a way to verify which firmware is currently running on each core?
 

I've reviewed ST's UM2237 documentation but couldn't find specific instructions for this Zigbee use case. I'm trying to set up my STM32WB55 as a clean end device that can join my existing Zigbee network (not act as a coordinator).

 

Thank you for your expertise and guidance!

1 ACCEPTED SOLUTION

Accepted Solutions
STTwo-32
ST Employee

Aslema @Azizzr02 marahba bik on the ST Community.

Could you please follow those steps:

  • Download the STM32CubeWB V1.23.0 and unzip it.
  • Download the STM32CubeProgrammer 2.20.0 and install it.
  • Open the STM32CubeProgrammer and connect to your Board.
  • On your left you will have this menu on the STM32CubeProgrammer GUI, select it:STTwo32_0-1756507492959.png
  • On the new menu:STTwo32_1-1756507587347.png

    go to file path selector and select the path of the stm32wb5x_FUS_fw.bin. After  that click on the firmware upgrade button and wait until the end of this operation.

  • After that select the local path of the stm32wb5x_BLE_Zigbee_RFD_dynamic_fw.bin and click on the firmware upgrade button.
  • After installation, click on the button Read. FUS infos and you will see the stack address that will help you to understand which Stack is working on the CM0+ of your MCU (comparing this value to the starting address of the .bin stack files available on the Release_Notes.html of the stack and fus .bin files. You can also check the FUS Version installed on the CM0+. 
  • Before leaving, click on the Start wireless stack button.

Now, you can upload your application using the CubeProgrammer standalone or the version integrated on the STM32CubeIDE. 
Ps: for the STM32WB, the CM0+ is dedicated to the wireless stack and the CM 4 is dedicated to run the user application. More details can be found here.

Best Reagrds.

STTwo-32

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

View solution in original post

3 REPLIES 3
STTwo-32
ST Employee

Aslema @Azizzr02 marahba bik on the ST Community.

Could you please follow those steps:

  • Download the STM32CubeWB V1.23.0 and unzip it.
  • Download the STM32CubeProgrammer 2.20.0 and install it.
  • Open the STM32CubeProgrammer and connect to your Board.
  • On your left you will have this menu on the STM32CubeProgrammer GUI, select it:STTwo32_0-1756507492959.png
  • On the new menu:STTwo32_1-1756507587347.png

    go to file path selector and select the path of the stm32wb5x_FUS_fw.bin. After  that click on the firmware upgrade button and wait until the end of this operation.

  • After that select the local path of the stm32wb5x_BLE_Zigbee_RFD_dynamic_fw.bin and click on the firmware upgrade button.
  • After installation, click on the button Read. FUS infos and you will see the stack address that will help you to understand which Stack is working on the CM0+ of your MCU (comparing this value to the starting address of the .bin stack files available on the Release_Notes.html of the stack and fus .bin files. You can also check the FUS Version installed on the CM0+. 
  • Before leaving, click on the Start wireless stack button.

Now, you can upload your application using the CubeProgrammer standalone or the version integrated on the STM32CubeIDE. 
Ps: for the STM32WB, the CM0+ is dedicated to the wireless stack and the CM 4 is dedicated to run the user application. More details can be found here.

Best Reagrds.

STTwo-32

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Azizzr02
Associate II

Dear ST Community,

 

Thank you for your Response .I'm working on a Zigbee IoT project and need your expertise to select the correct application example for my specific use case. I've successfully set up my Zigbee network but am confused about which STM32WB55 application to use.

 

My Setup:

  • Coordinator: Raspberry Pi 4 + CC2531 USB dongle running Zigbee2MQTT (via Docker)
  • Network Status: Network created and open for joining (using permit_join: true)
  • Target Device: STM32WB55RG Nucleo board that will act as a sensor node (temperature/humidity)
  • M0+ Core: Already flashed with stm32wb5x_BLE_Zigbee_RFD_dynamic_fw.bin (via STM32CubeProgrammer)
 

What I Need:

I need to configure my STM32WB55 as a Zigbee End Device (RFD) that:

  1. Joins my existing network (RPi as coordinator)
  2. Does NOT act as a coordinator/router (RPi is already the coordinator)
  3. Sends sensor data to the coordinator (RPi)
  4. Can sleep to conserve battery (if applicable)
 

My Confusion:

I've reviewed the available Zigbee examples in STM32CubeWB but am unsure which one to use because:

  • Many examples have "Coord" or "Router" in their names (e.g., Zigbee_DevTemp_Server_Coord)
  • Some examples with "Client" in the name (e.g., Zigbee_TempMeas_Client_Router) seem relevant but the naming is confusing
  • I'm not sure which examples are designed to join an external coordinator vs. create a new network
 

Specific Questions:

  1. Which exact example application should I use for my STM32WB55 to function as a sensor end device joining an external coordinator (RPi)?

    • Should I look for examples with "ED" (End Device) or "SED" (Sleepy End Device) in the name?
  2. In the application code, which file contains the network configuration parameters (PAN ID, channel, network key) that I need to set to match my RPi's network?

  3. What specific modifications do I need to make to the example code to:

    • Ensure it joins as an end device (not coordinator/router)
    • Send sensor data to the coordinator
    • Configure the correct endpoint and cluster for temperature measurement
  4. Are there any critical settings I should verify in the .ioc file before generating code?

 

Additional Context:

  • I've confirmed my RPi's network parameters:
     
  • I understand that the M0+ core (with RFD firmware) handles the Zigbee radio
  • I need to configure the M4 core application to communicate with the M0+ core
 

I've reviewed ST's documentation but the examples seem designed for creating new networks rather than joining existing ones. Any specific guidance on the correct example and required modifications would be greatly appreciated.

 

Thank you for your expertise!

 

Best regards,

I think your original issue has been answered. So, close this thread by selecting the answer to your original question as best answer and create a new one for the new question (with all available data and tests you’ve made).

Best Regards.

STTwo-32

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.