BLE fails on cold boot, but works perfectly after entering FUS mode.
Hi everyone,
I am experiencing a very specific initialization issue with a custom board based on the STM32WB55RGV6.
We recently manufactured a batch of 30 boards. 22 of them are working flawlessly, but 8 boards fail to start the BLE radio on a cold boot (Power-On Reset). They all run the exact same firmware and have the exact same layout.
Hardware details:
MCU: STM32WB55RGV6
HSE: 32 MHz crystal (CS06410-32M)
LSE: 32.768 kHz crystal
RF: MLPF-WB55-01E3 filter + Ceramic Antenna
Symptoms & Debugging Steps Taken:
No RF Output: Using an SDR and Near Field Probes, I confirmed there is zero RF energy being transmitted on the 2.4 GHz band during a cold boot on the faulty boards.
HSE is Alive: I probed the 32 MHz HSE crystal with an oscilloscope, and it is oscillating perfectly at 32.000 MHz.
The FUS Workaround (The Clue): If I send an AT#FUS command via UART to enter the Firmware Upgrade Services mode, the CPU2 wakes up and the board successfully advertises the "STM_OTA" network.
Warm Boot Success: If I reset the board immediately after entering FUS mode, our nominal firmware boots up correctly, initializes the BLE stack, and the nominal BLE network appears and works perfectly!
Cold Boot Failure: If I completely remove power and power it back on, the BLE network fails to appear again, and I have to repeat the FUS procedure.
My Analysis: Since the radio, antenna, and crystal are physically capable of transmitting (proven by the FUS mode), this rules out cold solder joints or hardware damage. It strongly points to a timing, initialization, or IPC synchronization issue between CPU1 and CPU2 during a cold boot. These 8 specific boards might have marginal passive component tolerances causing the HSE or SMPS to take slightly longer to stabilize.
Any guidance on where to look in the code or what parameters to tweak would be greatly appreciated!
Thanks in advance.
