1. 安装nrfjprog
在nordic官网搜索下载Command Line Tools,安装后即获得最新版的nrfjprog工具,同时还会自动安装jLink驱动软件。
默认的安装目录为:C:Program Files (x86)Nordic Semiconductornrf5xbin,请将该目录添加到系统环境变量中。
在命令行窗口中测试:
》 nrfjprog -v 期望输出为:
》 nrfjprog version: 9.7.2》 JLinkARM.dll version: 6.20i
2. 配置硬件
如果使用开发板(PCA10028/PCA10040/PCA10068),无需做任何配置。
如果使用自己的电路板,需要将SWD接口连接到JLink调试器,PC通过JLink调试器执行nrfjprog命令。
开发板上的JLink可以对外使用,即将开发板视为一个JLink Lite Debugger。
连线图为:
当按照图中连接一个外部电路板,PC上执行烧录hex命令,那该hex到底烧录到开发板上的芯片还是外部电路呢?
在上图的接线图中,找到橙色标注的管脚VTG,有如下规则:
VTG == HIGH,烧录外部电路
VTG == LOW,烧录开发板
3. nrfjprog用法
3.1 烧录
》 nrfjprog--program 《hex_path》 [-f UNKNOWN] UNKNOWN参数可以自动适配nRF51、nRF52和nRF52840各种芯片,而无需手动指定。
nrfjprog v9.5以后的版本,在nrfjprog.ini中指定默认的芯片类型为UNKNOWN,所以命令行中可以省略–family UNKNOWN参数。
如果目标机器上的nrfjprog版本较低,或者没有该ini文件,则仍然要加上该参数。
3.2 擦除
》 nrfjprog -e [-f UNKNOWN] 3.3 读写指定地址的内存数据
》 nrfjprog --memrd 0x08C78790 [-f UNKNOWN] [--n 4]》 nrfjprog --memwr 0x08C78790 [-f UNKNOWN] --val 0x11 3.4 重启芯片
》 nrfjprog --reset [-f UNKNOWN] 3.5 恢复错误状态
》 nrfjprog --recover -f NRF52/NRF51/NRF52840 有时候芯片在特殊情况下会锁住(read back protection),导致无法下载程序,需要使用–recover擦除读保护。
3.6 命令列表
》 nrfjprog 如果没有任何参数,将列出全部的参数,里面有许多有用的参数。
3.7 连续执行
》 nrfjprog --e && nrfjprog --program 《hex path》 && nrfjprog --reset 使用&&或&可以依次执行多个命令。
4. 命令行窗口
4.1 基本用法
》 cd 《hex path》》 nrfjprog --program 《hex path》 4.2 在当前目录打开cmd
在资源管理器地址栏输入cmd,即可在当前目录打开cmd,省略cd的过程。快捷键:Ctrl + L。
4.3 在当前目录打开PowerShell
Windows 10 推荐用户使用PowerShell替代传统的CMD窗口。
在文件夹空白处,Shift+右键,将显示如下菜单项:
4.4 为命令加注释
》 nrfjprog -e &:: Erase the chip》 nrfjprog --program 《hex path》 &:: Program the hex》 nrfjprog --reset &:: Reset the chip &::符号及后面的部分视为注释,不执行,这样在输入许多命令后,通过上下方向键寻找历史记录时,比较方便。
5. 批处理
5.1 基础
新建文件,后缀名为.bat,用编辑器打开,添加代码:
@echo off:: This is a line commentecho This line will be printed:: Below is a blank lineecho.set name=ISYQecho The author is %name%pause 保存后,双击运行,将打开CMD窗口并输出:
》 This line will be printed》》 The author is ISYQ》 Press any key to continue 。 . 。 5.2 传入参数
添加代码:
:: Drag a hex file on the bat file, and get the valid path stringset hex_path_with_quotation=%1set hex_path=%hex_path_with_quotation:~1,-1%echo The hex path is %hex_path% 保存后,将一个文件拖放到该bat文件上,将打印出该文件的路径。
5.3 用户输入
添加代码:
set /p user_input=Input your name:echo Your input is: %user_input% 保存运行,将提示用户输入。用户 输入以回车键为结束,如果直接回车,则输入为空。
注意set语句中有/p参数。
5.4 判断和选择
添加代码:
set part_family=0echo [1] nRF51 seriesecho [2, Enter] nRF52 seriesecho.set /p user_input=Select 1/2/Enter:if “%user_input%” == “1” (set part_family=NRF51goto GET_PART_FAMILY)if “%user_input%” == “2” (set part_family=NRF52goto GET_PART_FAMILY)if “%user_input%” == “” (set part_family=NRF52goto GET_PART_FAMILY):GET_PART_FAMILYecho The part family is %part_family% 保存运行,用户输入1,将选择NRF51,输入2或者直接回车,将选择NRF52。
注意,批处理的if语句要尽可能轻度使用,它与C语言的if差异很大。如果运行结果异常,请注释掉开头的@echo off语句,定位出错位置。
%user_input%两边的引号不可省略,因为如果直接输入Enter,会导致代码被解析成if == 3 (,这个语法错误会让程序直接崩溃退出。
批处理的goto关键字使用非常频繁,它要配合标号语法一起使用。
5.5 示例:擦除芯片
@echo offnrfjprog -e -f UNKNOWN 当开发板连接到电脑,直接运行这个批处理即可擦除芯片。
5.6 示例:下载hex
@echo offif {%1} == {} (echo [ERR] No input hex fileecho.goto END)set hex_path_with_quotation=%1set hex_path=%hex_path_with_quotation:~1,-1%echo [INFO] Erase the chipecho.nrfjprog -e -f UNKNOWNecho.echo [INFO] Program the hex: %hex_path%echo.nrfjprog --program “%hex_path%” -f UNKNOWNecho.echo [INFO] Reset the chipecho.nrfjprog --reset -f UNKNOWNecho.echo [INFO] Successecho.:ENDpause 运行效果如图(gif):
5.7 示例:DFU生成公钥和私钥
@echo offtitle Generate DFU Keysset PRIVATE_KEY=private_key.pemset PUBLIC_KEY=dfu_public_key.cecho [INFO] Gen private key: %PRIVATE_KEY%echo.nrfutil keys generate %PRIVATE_KEY%echo.echo [INFO] Gen private key: %PUBLIC_KEY%nrfutil keys display --key pk --format code %PRIVATE_KEY% --out_file %PUBLIC_KEY%echo [INFO] Successecho.pause 运行后将在当前文件夹生成private_key.pem和dfu_public_key.c两个文件。
5.8 更多示例
许多与命令行工具相关的工作都可以写成批处理,包括:
下载softdevice
将不同版本的softdevice.hex路径整理出来,然后放到批处理,通过选择SDK版本和nRF型号,自动下载对应的协议栈。
生成DFU的zip
通过手动输入一些列参数,自动生成DFU需要的zip文件。
生成DFU的Bootloader-Settings.hex
6. pynrfjprog
nrfjprog提供了C/C++和Python的库,可以在代码中执行nrfjprog全部的功能。
这里介绍Python库(pynrfjprog)的使用。
6.1 阅读文档
源码仓库:地址
使用文档:地址
6.2 下载库
该库支持Python 2和Python 3。这里用Python 3进行测试。
在Windows上安装Python 3,在命令行窗口运行:
》 pip install pynrfjprog 将自动下载pynrfjprog需要的库文件。库文件与源码仓库中的内容一致。
默认保存地址为:《python dir》Libsite-packagespynrfjprog
6.3 测试
进入示例目录:《python dir》Libsite-packagespynrfjprogexamplesprogram_hex.py
在cmd中执行:
》python program_hex.py 会自动下载blinky.hex到开发板中。
也可以直接运行program_hex.pyc。
6.4 IDE
使用PyCharm会自动识别pip下载的模块,因此可以脱离python 3安装目录建立自己的工程。
6.5 API介绍
api.connect_to_emu_without_snr() 解释:连接外部芯片,不指定序列号SNR。
hex_content = Hex.Hex(hex_path)print(“Write hex: %s” % hex_path)for segment in hex_content:api.write(segment.address, segment.data, True) 解释:将Hex文件内容解析成段,分段写入Flash。
api.sys_reset()api.go() 解释:重启并运行芯片。
7. 辅助工具
7.1 clink
clink可以增强Windows命令提示符的功能,包括:
Tab键自动完成
永久记录历史输入
Ctrl+C/Ctrl+V粘贴复制
Bash编辑快捷键,比如Ctrl+A回到行首,Ctrl+K删除剩余字符等
额外的Bash命令,包括ls,rm等。
7.2 XYPlorer
XYPlorer是增强型资源管理器,快捷键Ctrl+Alt+P可以快速打开cmd窗口,并定位到当前目录:
XYPlorer支持自定义工具,将本文5.6小节中写好的bat文件,加入Catalog面板,如下所示,只要选中hex文件,单击该条目即可自动下载hex。
7.3 BandiZip
BandiZip是一个免费的压缩软件,它可以在右键菜单增加一项:在当前目录打开CMD窗口。
7.4 Quick Clip
Quick Cliq可以保存用户程序命令,通过托盘图标快速启动程序。
我们可以将上面写好的批处理文件都添加到Quick Clip中统一管理。效果如下:
1. 安装nrfjprog
在nordic官网搜索下载Command Line Tools,安装后即获得最新版的nrfjprog工具,同时还会自动安装jLink驱动软件。
默认的安装目录为:C:Program Files (x86)Nordic Semiconductornrf5xbin,请将该目录添加到系统环境变量中。
在命令行窗口中测试:
》 nrfjprog -v 期望输出为:
》 nrfjprog version: 9.7.2》 JLinkARM.dll version: 6.20i
2. 配置硬件
如果使用开发板(PCA10028/PCA10040/PCA10068),无需做任何配置。
如果使用自己的电路板,需要将SWD接口连接到JLink调试器,PC通过JLink调试器执行nrfjprog命令。
开发板上的JLink可以对外使用,即将开发板视为一个JLink Lite Debugger。
连线图为:
当按照图中连接一个外部电路板,PC上执行烧录hex命令,那该hex到底烧录到开发板上的芯片还是外部电路呢?
在上图的接线图中,找到橙色标注的管脚VTG,有如下规则:
VTG == HIGH,烧录外部电路
VTG == LOW,烧录开发板
3. nrfjprog用法
3.1 烧录
》 nrfjprog--program 《hex_path》 [-f UNKNOWN] UNKNOWN参数可以自动适配nRF51、nRF52和nRF52840各种芯片,而无需手动指定。
nrfjprog v9.5以后的版本,在nrfjprog.ini中指定默认的芯片类型为UNKNOWN,所以命令行中可以省略–family UNKNOWN参数。
如果目标机器上的nrfjprog版本较低,或者没有该ini文件,则仍然要加上该参数。
3.2 擦除
》 nrfjprog -e [-f UNKNOWN] 3.3 读写指定地址的内存数据
》 nrfjprog --memrd 0x08C78790 [-f UNKNOWN] [--n 4]》 nrfjprog --memwr 0x08C78790 [-f UNKNOWN] --val 0x11 3.4 重启芯片
》 nrfjprog --reset [-f UNKNOWN] 3.5 恢复错误状态
》 nrfjprog --recover -f NRF52/NRF51/NRF52840 有时候芯片在特殊情况下会锁住(read back protection),导致无法下载程序,需要使用–recover擦除读保护。
3.6 命令列表
》 nrfjprog 如果没有任何参数,将列出全部的参数,里面有许多有用的参数。
3.7 连续执行
》 nrfjprog --e && nrfjprog --program 《hex path》 && nrfjprog --reset 使用&&或&可以依次执行多个命令。
4. 命令行窗口
4.1 基本用法
》 cd 《hex path》》 nrfjprog --program 《hex path》 4.2 在当前目录打开cmd
在资源管理器地址栏输入cmd,即可在当前目录打开cmd,省略cd的过程。快捷键:Ctrl + L。
4.3 在当前目录打开PowerShell
Windows 10 推荐用户使用PowerShell替代传统的CMD窗口。
在文件夹空白处,Shift+右键,将显示如下菜单项:
4.4 为命令加注释
》 nrfjprog -e &:: Erase the chip》 nrfjprog --program 《hex path》 &:: Program the hex》 nrfjprog --reset &:: Reset the chip &::符号及后面的部分视为注释,不执行,这样在输入许多命令后,通过上下方向键寻找历史记录时,比较方便。
5. 批处理
5.1 基础
新建文件,后缀名为.bat,用编辑器打开,添加代码:
@echo off:: This is a line commentecho This line will be printed:: Below is a blank lineecho.set name=ISYQecho The author is %name%pause 保存后,双击运行,将打开CMD窗口并输出:
》 This line will be printed》》 The author is ISYQ》 Press any key to continue 。 . 。 5.2 传入参数
添加代码:
:: Drag a hex file on the bat file, and get the valid path stringset hex_path_with_quotation=%1set hex_path=%hex_path_with_quotation:~1,-1%echo The hex path is %hex_path% 保存后,将一个文件拖放到该bat文件上,将打印出该文件的路径。
5.3 用户输入
添加代码:
set /p user_input=Input your name:echo Your input is: %user_input% 保存运行,将提示用户输入。用户 输入以回车键为结束,如果直接回车,则输入为空。
注意set语句中有/p参数。
5.4 判断和选择
添加代码:
set part_family=0echo [1] nRF51 seriesecho [2, Enter] nRF52 seriesecho.set /p user_input=Select 1/2/Enter:if “%user_input%” == “1” (set part_family=NRF51goto GET_PART_FAMILY)if “%user_input%” == “2” (set part_family=NRF52goto GET_PART_FAMILY)if “%user_input%” == “” (set part_family=NRF52goto GET_PART_FAMILY):GET_PART_FAMILYecho The part family is %part_family% 保存运行,用户输入1,将选择NRF51,输入2或者直接回车,将选择NRF52。
注意,批处理的if语句要尽可能轻度使用,它与C语言的if差异很大。如果运行结果异常,请注释掉开头的@echo off语句,定位出错位置。
%user_input%两边的引号不可省略,因为如果直接输入Enter,会导致代码被解析成if == 3 (,这个语法错误会让程序直接崩溃退出。
批处理的goto关键字使用非常频繁,它要配合标号语法一起使用。
5.5 示例:擦除芯片
@echo offnrfjprog -e -f UNKNOWN 当开发板连接到电脑,直接运行这个批处理即可擦除芯片。
5.6 示例:下载hex
@echo offif {%1} == {} (echo [ERR] No input hex fileecho.goto END)set hex_path_with_quotation=%1set hex_path=%hex_path_with_quotation:~1,-1%echo [INFO] Erase the chipecho.nrfjprog -e -f UNKNOWNecho.echo [INFO] Program the hex: %hex_path%echo.nrfjprog --program “%hex_path%” -f UNKNOWNecho.echo [INFO] Reset the chipecho.nrfjprog --reset -f UNKNOWNecho.echo [INFO] Successecho.:ENDpause 运行效果如图(gif):
5.7 示例:DFU生成公钥和私钥
@echo offtitle Generate DFU Keysset PRIVATE_KEY=private_key.pemset PUBLIC_KEY=dfu_public_key.cecho [INFO] Gen private key: %PRIVATE_KEY%echo.nrfutil keys generate %PRIVATE_KEY%echo.echo [INFO] Gen private key: %PUBLIC_KEY%nrfutil keys display --key pk --format code %PRIVATE_KEY% --out_file %PUBLIC_KEY%echo [INFO] Successecho.pause 运行后将在当前文件夹生成private_key.pem和dfu_public_key.c两个文件。
5.8 更多示例
许多与命令行工具相关的工作都可以写成批处理,包括:
下载softdevice
将不同版本的softdevice.hex路径整理出来,然后放到批处理,通过选择SDK版本和nRF型号,自动下载对应的协议栈。
生成DFU的zip
通过手动输入一些列参数,自动生成DFU需要的zip文件。
生成DFU的Bootloader-Settings.hex
6. pynrfjprog
nrfjprog提供了C/C++和Python的库,可以在代码中执行nrfjprog全部的功能。
这里介绍Python库(pynrfjprog)的使用。
6.1 阅读文档
源码仓库:地址
使用文档:地址
6.2 下载库
该库支持Python 2和Python 3。这里用Python 3进行测试。
在Windows上安装Python 3,在命令行窗口运行:
》 pip install pynrfjprog 将自动下载pynrfjprog需要的库文件。库文件与源码仓库中的内容一致。
默认保存地址为:《python dir》Libsite-packagespynrfjprog
6.3 测试
进入示例目录:《python dir》Libsite-packagespynrfjprogexamplesprogram_hex.py
在cmd中执行:
》python program_hex.py 会自动下载blinky.hex到开发板中。
也可以直接运行program_hex.pyc。
6.4 IDE
使用PyCharm会自动识别pip下载的模块,因此可以脱离python 3安装目录建立自己的工程。
6.5 API介绍
api.connect_to_emu_without_snr() 解释:连接外部芯片,不指定序列号SNR。
hex_content = Hex.Hex(hex_path)print(“Write hex: %s” % hex_path)for segment in hex_content:api.write(segment.address, segment.data, True) 解释:将Hex文件内容解析成段,分段写入Flash。
api.sys_reset()api.go() 解释:重启并运行芯片。
7. 辅助工具
7.1 clink
clink可以增强Windows命令提示符的功能,包括:
Tab键自动完成
永久记录历史输入
Ctrl+C/Ctrl+V粘贴复制
Bash编辑快捷键,比如Ctrl+A回到行首,Ctrl+K删除剩余字符等
额外的Bash命令,包括ls,rm等。
7.2 XYPlorer
XYPlorer是增强型资源管理器,快捷键Ctrl+Alt+P可以快速打开cmd窗口,并定位到当前目录:
XYPlorer支持自定义工具,将本文5.6小节中写好的bat文件,加入Catalog面板,如下所示,只要选中hex文件,单击该条目即可自动下载hex。
7.3 BandiZip
BandiZip是一个免费的压缩软件,它可以在右键菜单增加一项:在当前目录打开CMD窗口。
7.4 Quick Clip
Quick Cliq可以保存用户程序命令,通过托盘图标快速启动程序。
我们可以将上面写好的批处理文件都添加到Quick Clip中统一管理。效果如下:
举报