天天看点

FDS操作时掉电导致固件变砖分析FDS操作时掉电导致固件变砖分析一、分析

FDS操作时掉电导致固件变砖分析

​ 产品使用nRF52840, nRF5 17.02 SDK。 通过FDS来存储MAC地址,每次开机会读取FDS中的MAC地址,每次开机主控MCU都会发MAC地址给蓝牙板,如果和本地存储的MAC不一致,就会写入新MAC。 开机会判断脏数据,进行GC操作。产品在产线上会更换主控板和蓝牙板,并且会随时拔插电池(断电)。

​ 出现了几个蓝牙版通过产线测试后,无法正常启动的现象。怀疑是操作Flash是导致的问题。

一、分析

1 FDS格式

FDS操作时掉电导致固件变砖分析FDS操作时掉电导致固件变砖分析一、分析

2 蓝牙板Flash分区

FDS操作时掉电导致固件变砖分析FDS操作时掉电导致固件变砖分析一、分析

3 异常板存MAC地址内容

蓝牙板1

$ nrfjprog -f nrf52 --memrd  0xf4000 --w 8 --n 64 
0x000F4000: DE C0 AD DE FE 01 1E F1 11 11 02 00 02 00 00 00   |................|
0x000F4010: 13 00 00 00 01 00 00 00 FE C5 00 00 FF FF FF FF   |................|
0x000F4020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
0x000F4030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
$ nrfjprog -f nrf52 --memrd  0xf5000 --w 8 --n 64
0x000F5000: DE C0 AD DE FE 01 1E F1 FF FF FF FF FF FF FF FF   |................|
0x000F5010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
0x000F5020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
0x000F5030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
           

蓝牙板2

$ nrfjprog -f nrf52 --memrd  0xf4000 --w 8 --n 64                 
0x000F4000: DE C0 AD DE FE 01 1E F1 FF FF FF FF FF FF FF FF   |................|
0x000F4010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
0x000F4020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
0x000F4030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
$ nrfjprog -f nrf52 --memrd  0xf5000 --w 8 --n 64
0x000F5000: DE C0 AD DE FE 01 1E F1 11 11 02 00 02 00 00 00   |................|
0x000F5010: 0D 00 00 00 01 00 00 00 FE C5 00 00 FF FF FF FF   |................|
0x000F5020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
0x000F5030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   |................|
           

理论上要么F4000和F5000上,必然有一个是0xF11E01FE一个是0xF11E01FF。现在两个都是0xF11E01FE。导致程序判断异常,在BootLoader就死机了。

擦除F4000页内容后,两个固件都可以正常工作。

4 结论

只有才GC(垃圾回收的时候)才会擦写两个分区头部。锁定是在GC操作的过程中,出现异常断电情况导致的。

BLE