2025-04-14 2:10 AM
Respected Members,
We are using STM32Cube Package 1.16.0 and STM32CubeIDE v1.12.1. We have 10,000 devices in market with BLE stack v1.16.0 and FUS v1.2.0 (STM32WB5MMG). We encountered a BLE related disconnection bug that was resolved when we switch to BLE stack v1.21.0 so now the idea is to wirelessly OTA BLE stack of CM0+ and firmware binary of CM4+.
But the problem is that whenever I make a call to FUS using SHCI_C2_FUS_GetState(NULL), it is blocked and keeps waiting on shci_send( SHCI_OPCODE_C2_FUS_GET_STATE, 0, 0, p_rsp ); This call never returns if I check with debugger (STLINK-V3 using IDE attached).
Now, if I manually start FUS from CubeProgrammer, then re-run the firmware, FUS get state works but I cannot do this on working devices deployed in the field. If BLE stack is running, I cannot seem to get this call SHCI_C2_FUS_GetState(NULL) to work.
The startup script and linker script is attached as well along with .ioc file used to generate project (wb_1.21.0.zip). This project is using CubeWB v1.21.0. The behavior with CubeWB 1.16.0 is also same on my side. You can check my UART traces from BLE stack as well below:
The main is as follows, attached.
Any help will be much appreciated.
2025-04-14 7:09 AM
Hello,
please don't call this function in the main. In the while loop, there should be only MX_APPE_Process() function.
I recommend having a look at BLE_Ota example where you find how it's implemented.
(Please check the otas_app.c file)
Also, please have a look at these links below which can be helpful for your implementation.
How to build wireless applications with STM32WB MCUs - Application note
Best regards,
ST support