开发环境:
Winsodw:10
nRF5_SDK:17.1.0
Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer
下载“gcc-arm-none-eabi-10.3-2021.10-win32.exe”,接提示安装。注意安装完后添加环境变量。
MinGW - Minimalist GNU for Windows download | SourceForge.net
下载mingw-get-setup.exe,安装过程中要下载很多包,估计要1~2小时安装完成。
最好根据pc-ble-driver-py的版本来安装python的版本,否则下面安装nrfutil失败时无法解决。
在上面的网站查看pc-ble-driver-py对应的python版本。
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”查看是否安装成功。
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文件。
- 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
打开工程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文件夹中。
打开工程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文件夹中。
- 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:协议栈版本
先烧写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,再一次升级。
之前烧写的程序,必需要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了。