一般芯片启动都是先启动协议栈,然后在协议栈中判断相应的地址是否存在bootloader,一旦bootloader存在就会先运行bootloader,
在bootloader运行的过程中,判断相应存储位置是有固件升级的标志,如果有的话则运行固件升级流程,否者跳转到应用程序地址。
应用程序中要想实现DFU,需要添加相应的DFU sernver,该servers主要用于给APP发现,并且执行更改固件升级存储标志位的操作,以便
bootloader识别。
一般升级只升级应用程序,而且一般都采用保险的dual_bank方式(而非single bank方式),以便如果升级不成功的时候,还可以运行回原
来的程序。
固件升级包的制作,需要安装Master Control Panel,然后在路径C:\Program Files (x86)\Nordic Semiconductor\Master Control Panel\相应版本\nrf
下面会有nrfutil.exe这个打包工具。需要把工程生成的应用程序的bin文件放到该路径下面,bin文件的生成可以使用hex2bin.exe,在工程配置
的时候,在user的Run User Programs After Build/Rebuild框处,添加Run#1 hex2bin buil\工程目标.hex
最好就是运行CMD windows 命令,跳转到nrfutil.exe处(cd C:\Program Files (x86)\Nordic Semiconductor\Master Control Panel\3.10.0.14\nrf)
然后执行操作(nrfutil.exe dfu genpkg --application 工程目标.bin --application-version 0xFFFFFFFF --dev-revision 0xFFFF --dev-type 0xFFFF --sd-req 0xFFFE 工程目标.zip)
这样既可以生成只升级应用程序的Distribution packet的ZIP压缩包了。