1.工具环境搭建
- gcc-arm-none-eabi编译环境:GCC编译环境
Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer
- mingw 平台(win版的Linux命令行)
Download MinGW - Minimalist GNU for Windows
- micro-ecc-master源码
GitHub - kmackay/micro-ecc: ECDH and ECDSA for 8-bit, 32-bit, and 64-bit processors.
(我用的原来工程中的micro_ecc_lib_nrf52.lib)
- python 安装文件
Download Python | Python.org
我用的是python-3.10.10-amd64版本。
- pc-nrfutil
GitHub - NordicSemiconductor/pc-nrfutil: nrfutil python library and command line client
我用的是pc-nrfutil-6.1.7版本
- nrfgo-studio
- nrf connect app
2、升级文件制作
2.1 密钥生成文件
(1)新建文件夹key,在CMD命令中输入:
nrfutil.exe keys generate D:\TEST\key\private.key
生成私钥文件。
(2)在命令中输入:
nrfutil keys display --key pk --format code D:\TEST\key\private.key --out_file D:\TEST\key\public_key.c
生成公钥文件public_key.c,将文件名修改为:dfu_public_key.c,复制dfu_public_key.c文件到dfu工程,dfu\dfu_req_handling\ 。
2.2 升级包制作
(1)boot工程的hex生成
打开dfu下的boot工程,重新编译,生成hex文件,将文件名改为:boot.hex,拷贝到key 文件夹下。
注意:起始地址为:0x78000,大小:0x8000
(2)应用工程的hex生成
打开ble_peripheral文件夹下的应用工程,重新编译,生成hex文件,将文件名改为:app.hex,拷贝到key文件夹下。
注意:起始地址为:0x1f000,大小:0x59000
2.3 升级文件zip的生成
在key文件夹下,输入命令:
nrfutil pkg generate --hw-version 52 --application-version 2 --application app.hex --sd-req 0x99 --key-file private.key test_Dfu15.zip
生成用于升级的文件:test_Dfu15.zip,放进手机中利用nrf connect app传送至设备。
注意:
蓝牙协议栈版本如下:
|s112_nrf52_6.0.0|0xA7|
|s112_nrf52_6.1.0|0xB0|
|s112_nrf52_6.1.1|0xB8|
|s130_nrf51_1.0.0|0x67|
|s130_nrf51_2.0.0|0x80|
|s132_nrf52_2.0.0|0x81|
|s130_nrf51_2.0.1|0x87|
|s132_nrf52_2.0.1|0x88|
|s132_nrf52_3.0.0|0x8C|
|s132_nrf52_3.1.0|0x91|
|s132_nrf52_4.0.0|0x95|
|s132_nrf52_4.0.2|0x98|
|s132_nrf52_4.0.3|0x99|
|s132_nrf52_4.0.4|0x9E|
|s132_nrf52_4.0.5|0x9F|
|s132_nrf52_5.0.0|0x9D|
|s132_nrf52_5.1.0|0xA5|
|s132_nrf52_6.0.0|0xA8|
|s132_nrf52_6.1.0|0xAF|
|s132_nrf52_6.1.1|0xB7|
|s140_nrf52_6.0.0|0xA9|
|s140_nrf52_6.1.0|0xAE|
|s140_nrf52_6.1.1|0xB6|
3、生产烧录文件制作
3.1 setting 文件的生成
在key文件夹中,输入命令:
nrfutil settings generate --family NRF52 --application app.hex --application-version 1 --bootloader-version 1 --bl-settings-version 2 app_setting.hex
生成 app_setting.hex文件,用于下步合并文件的制作。
3.2 合并协议栈hex,boot的hex,应用的hex
在key文件夹中,输入命令:
mergehex --merge s132.hex boot.hex app.hex --output output3to1.hex
生成3个文件的合并文件output3to1.hex,用于下步合并文件的制作。
3.3 合并output3to1.hex 和app_setting.hex
在key文件夹中,输入命令:
mergehex --merge output3to1.hex app_setting.hex --output output4to1.hex
生成最终合并的output4to1.hex,可以直接用nrfgo软件直接烧录。
4、升级过程
连接设备蓝牙
1.使能Buttonless DFU的CCCD项;
2.点击按键2
点击SEND,设备进入boot模式,关闭当前连接,进入扫描项SCAN,连接DfuTrag
点击右上角的DFU小图标,选择ZIP文件(SDK12之后仅支持ZIP格式升级),点击OK,进入文件浏览器选择升级文件后自动开始升级,到100%时升级完成。