2025-11-24 3:29 PM
This is a big problem for me, as I have thousands of products out there using the older BLE_OTA bootloaders, bootloaders which themselves are not updatable by OTA. I have a custom phone app for iOS and Android that interfaces with these products and provides OTA updates.
I was about to release an update to the product firmware via my phone app that incorporates several important fixes, but in regression testing this firmware, I found that older units could not successfully perform OTA updates using my new firmware (though units programmed with the updated bootloader could). I tried many combinations to see what worked and what doesn't work, before narrowing the problem down:
| FUS | Bootloader | Stack | Stack location | Firmware Git hash | Result + notes |
| 0 | 1.23 plus | b87d60 | Worked like normal the second time. | ||
| 1.2.0.0 | 1.20.0 | 1.20.0.2 | 0x805A000 | b87d60 | No STM_OTA when commanded |
| 1.2.0.0 | 1.20.0 | 1.22.0.2 | 0x805C000 | b87d60 | No STM_OTA when commanded |
| 1.2.0.0 | 1.23 plus | 1.22.0.2 | 0x805C000 | b87d60 | Worked. OTA did not revert stack to 1.20.0 |
| 1.2.0.0 | 1.23 plus | 1.20.0 | 0x805A000 | b87d60 | Worked, but afterward it says the stack is 1.22. |
| 1.2.0.0 | 1.23 plus | 1.20.0 | 0x805A000 | b87d60 | Deleted stack then reprogrammed and started stack. OTA worked. FUS info says stack is 1.22.0 after OTA |
| 1.2.0.0 | 1.23 plus | 1.20.0 | b87d60 | Re-deleted stack, loaded 1.20, re-confirmed 1.20 still there. Did OTA successfully. OTA definitely updated stack to 1.22 | |
| 1.2 | 1.20.0 | 1.20.0 | 0x805A000 | 6b9a52a | firmware from 9/8 after 1.23 cube updates, but without OTA characteristic. No response to OTA request |
| 1.2 | 1.20.0 | 1.20.0 | 0x805A000 | abc61fb | Firmware before 1.23 cube update. OTA working. Result is an update to 1.22 stack and firmware b87d60 and the app thinking the SN is 0 until forget and re-advertise |
| 1.2.0.0 | 1.20.0 | 1.20.0.2 | 0x805A000 | b87d60 | No STM_OTA when commanded |
The last firmware that can perform OTA updates using BLE_OTA bootloaders from Cube 1.20 or older was what I made using Cube 1.22. The firmware I built after updating to Cube 1.23 had the following symptom when used with a previously installed BLE_Ota bootloader: I could initiate an OTA update from my app, and it rebooted into the bootloader, but then the bootloader would get stuck without advertising the usual STM_OTA, apparently before erasing anything. A power cycle of the device would recover operation using the current firmware and BLE stack. This is the "No STM_OTA when commanded" result in the table above.
2025-11-24 4:06 PM
What is the full part number of the chip you are using? STM32WB encompasses too much.