STM32F405RGT6 CAN Bootloader – Sector Erase Gets First ACK but No Final ACK
I am using the STM32F405RGT6 built-in System Memory CAN bootloader for firmware update.
Configuration:
- MCU: STM32F405RGT6
- CAN: CAN2 (PB5 RX / PB13 TX)
- External HSE: 24 MHz
- CAN bitrate: 125 kbps
- Host: Jetson Linux / SocketCAN
- Standard 11-bit CAN ID
I am facing an issue with the CAN Erase command (0x43).
For example, to erase Sector 8:
cansend can0 043#08The STM32 responds with the first ACK:
043 [1] 79but I never receive the second/final ACK after the erase operation.
So the sequence is:
Jetson -> 043#08
STM32 -> 79 <-- received
<-- final 79 is NOT receivedImportant observations:
- Mass erase using
043#FFworks. - Individual sector erase using STM32CubeProgrammer + ST-Link/SWD works, including Sector 8.
- RDP =
AA(Level 0). - WRP0–WRP11 are unprotected.
- Sector 8 address is
0x08080000. - CAN communication with the ROM bootloader otherwise works.
Therefore, it appears that the 0x43 command is being accepted by the ROM bootloader, but the sector erase operation does not complete / final ACK is not returned.
I would like to know:
- Is this a known issue with the STM32F405 CAN ROM bootloader?
- Does the first
0x79mean the erase command has been accepted and the bootloader is now executing the Flash erase? - Could this depend on the ROM bootloader version or silicon revision?
- Are there any additional Flash/Option Byte conditions that can cause this behavior even though SWD sector erase works?
I am using the CAN erase format specified by AN3154 (043#08), without any additional checksum frame.
Any suggestions or known workarounds would be greatly appreciated.
Raw trace:
TX: 043 [1] 08
RX: 043 [1] 79
RX: <no final ACK>Thanks.
