This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

关于nrf52840中DFU升级bootloader的问题

所使用的SDK是:nRF5_SDK_14.2.0

协议栈为:Flash_s140_nrf52840_5.0.0-a.alpha_softdevice

采用的例程序为:bootloader_secure_ble

APP DFU升级工具采用:nrf connect

步骤1:烧录协议栈,再烧录bootloader;

步骤2:修改bootloader程序的广播名称,生成HEX文件,使用命令生成相应的zip文件(命令为:nrfutil pkg generate --hw-version 52 --sd-req 0x96 --bootloader-version 0x01 --bootloader nrf52840_xxaa_s140.hex --key-file private.pem nrf52840_xxaa_boot.zip)

步骤3:使用nrf connect无线更新,先连接DfuTarg,选择需要传输的zip文件(nrf52840_xxaa_boot.zip);

步骤4:传输成功后,并未见设备启动,调试发现设备不断重启,调试查看,发现进入nrf_dfu_mbr_copy_bl()函数内的sd_mbr_command()函数后设备重新启动;

步骤5:使用与本地设备相同的bootloader升级时未进入nrf_dfu_mbr_copy_bl(),进入bootloader和free区域比较“数据相同”则进入数据相同的命令执行(nrf_dfu_invalidate_bank(p_bank);ret_val = nrf_dfu_settings_write(reset_device_callback););

步骤6:尝试升级softdevice,成功开机(不排除与本地协议栈相同不升级的原因);

步骤7:使用特定内容数据端全为1,发现执行完nrf_dfu_mbr_copy_bl()函数内的sd_mbr_command()函数并未将数据复制到bootloader区域块;

步骤8:使用nrf52832尝试以上方法,能够升级成功,程序先进入bootloader和free区域比较数据,两个区域数据不相同则进入拷贝,拷贝后重启设备;重启后再次进入bootloader和free区域比较数据,数据相同则进入nrf_dfu_invalidate_bank(p_bank);ret_val = nrf_dfu_settings_write(reset_device_callback);并完成后正常运行。

想知道为什么nrf52840无法进行bootloader的升级,是操作有问题还是这个版本的问题,望相关技术人员能给予帮助,谢谢!

Parents Reply Children
No Data
Related