开发环境:
Winsodw:10
nRF5_SDK:17.1.0
1 工具安装
1.1 gcc-arm-none-eabi
Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer
下载“gcc-arm-none-eabi-10.3-2021.10-win32.exe”,接提示安装。注意安装完后添加环境变量。
1.2 minGW
MinGW - Minimalist GNU for Windows download | SourceForge.net
下载mingw-get-setup.exe,安装过程中要下载很多包,估计要1~2小时安装完成。
1.3 python
最好根据pc-ble-driver-py的版本来安装python的版本,否则下面安装nrfutil失败时无法解决。
pc-ble-driver-py · PyPI
在上面的网站查看pc-ble-driver-py对应的python版本。
1.4 pc-nrfutil
Release v6.1.7 · NordicSemiconductor/pc-nrfutil · GitHub
# 解压后安装
python setup.py install# 如果pc_ble_driver_py版本不对,手动安装pc_ble_driver_py
pip install pc_ble_driver_py-0.17.0-cp310-cp310-win_amd64.whl
在命令行输入“nrfutil”查看是否安装成功。
1.5 micro-ecc源码
Release 1.1 · kmackay/micro-ecc · GitHub
解压后将文件夹micro-ecc-1.1改名为micro-ecc,后放在external\micro-ecc下
双击打开C:\MinGW\msys\1.0\msys.bat,进到 external/micro-ecc/nrf52hf_armgcc/armgcc目录。编译lib文件。
2 生成key
mkdir key
cd key
nrfutil keys generate private.key
nrfutil keys display --key pk --format code private.key --out_file dfu_public_key.c
然后将生成的dfu_public_key.c替换examples\dfu\dfu_public_key.c
3 boot工程和应用工程的编译
3.1 boot工程编译
打开工程examples\dfu\secure_bootloader\pca10040_s132_ble\ses编译。
如果报错,修改examples\dfu\secure_bootloader\pca10040_s132_ble\ses\flash_placement.xml文件。删除size="0x4"。
将生成的secure_bootloader_ble_s132_pca10040.hex改名为boot.hex放到key文件夹中。
3.2 应用工程编译
打开工程examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\ses编译。
如果报错,删除nRF_Segger_RTT下的SEGGER_RTT_Syscalls_SES.c文件。如果找不到函数定义,记得把头文件路径加到工程中。
将生成的ble_app_buttonless_dfu_pca10040_s132.hex改名为app.hex放到key文件夹中。
3.3 生成zip
nrfutil pkg generate --hw-version 52 --application-version 1 --application app.hex --sd-req 0x101 --key-file
private.key test_dfu.zip
# --hw-version:硬件版本nrf52822为51,nrf52832为52
# --application-version:应用的版本号,用户自已设置
# --sd-req:协议栈版本
4 DFU
先烧写s132_nrf52_7.2.0_softdevice.hex,boot.hex,app.hex,烧写完成后,用nRF connect扫描,发现DfuTarg,此时程序不会自动运行app,需要dfu一次才能运行app。
连接后点右上角的dfu,选zip包
开始升级
升级完成后,设备重启,此时扫描到Nordic_Buttonless
连接后使用Swcure DFU Service即可以进入boot,再一次升级。
5 seting文件的使用
之前烧写的程序,必需要dfu一次才能运行app,使用seting文件即可以解决这个问题。
nrfutil settings generate --family NRF52 --application app.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 setting.hex
重新烧写s132_nrf52_7.2.0_softdevice.hex,boot.hex,app.hex和setting.hex,然后使用nRF connect扫描,这次就直接运行app了。