命令行上位机操作流程
使用方法
打开本地命令窗口,路径切到工具可执行文件所在目录,windows 环境下输入:工具名 + 命令;linux 环境下输入:./工具名 + 命令。如打包固件:
也可以不用切换到可执行文件所在目录,直接指定工具名的完整路径。
加载配置文件进行加密打包指令
打包配置文件各参数说明如下,其中除了 firmware_bin 的镜像文件支持路径外,frtdec_cfg 的 key,secure_info 的 iv、key、public_key、private_key 以及 rk 也支持文本路径。并且其路径为相对配置文件的相对路径。

命令
NSPackageTool package -f filepath -o outFileName
-f:后面指定配置文件的路径。
filepath:配置文件的路径,可以是绝对路径也可以是相对路径,文件类型不做限制,内容格式如上图。
-o:后面指定打包后的文件名称,存放路径与配置文件一致,不需要指定文件类型,默认是bin格式。
NSPackageTool package -f filepath -o outFileName -i binFilePath
-i:可重新指定被打包的固件文件
注意:命令的顺序不能随意调换顺序
使用举例
NSPackageTool package -f D:/NSTools_console/cfg.yaml -o package_printf
NSPackageTool package -f ../cfg.json -o package_printf
NSPackageTool package -f ./test/cfg.yaml -o package_printf
NSPackageTool package -f ../test/cfg.yaml -o package_printf -i ./printf.bin
打包不仅生成打包好的可执行二进制文件,还会生成用于烧写秘钥的 eFuse program 配置文件(文件类型为 yaml)。
注意:打包配置文件已在当前目录下时,不能直接用 -f XXX.yaml,而需用 -f ./XXX.yaml。
不对称密钥对生成
命令
NSPackageTool genkey -a signName -o filename.type
-a:algorithm后面指定签名算法,signName 可选 ed25519、sm2、rsa2048 和 rsa4096。
-o:后面指定生成的文件名、类型及路径,类型支持 txt(hexstring)、pem 和 der。
注意:命令的顺序不能随意调换顺序。
使用举例
NSPackageTool genkey -a ed25519 -o ed25519.txt
生成的公钥为./ed25519_public_key_gen.txt,私钥为./ed25519_private_key_gen.txt
NSPackageTool genkey -a sm2 -o ../keypairs/sm2.pem
生成的公钥为../keypairs/sm2_public_key_gen.pem,私钥为../keypairs/sm2_private_key_gen.pem
当前版本
NSPackageTool -v 或 version
DFU 下载
获取UART可连接的COM端口
NSPackageTool dfu -i uart -l
-i:指定 DFU 通信接口,目前只支持串口。
-l:list,列出所有端口。
注意:命令的顺序不能随意调换顺序。
Flash擦写
NSPackageTool dfu -i uart -c/-hc COMx -cmd erase -addr 0x70000000 -sector 4096*n
-i:指定 DFU 通信接口,目前只支持串口。
-c:connect,串口连接之后发送擦写指令(前提是上一个指令已经发送 handshake 指令),后面接端口名。
-hc:connect & send handshake 指令,之后再发送擦写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。
-cmd:后面接 DFU 指令。
-addr:指定起始地址。
-sector:指定擦除多少扇区,格式必须为 4096*n。
注意:命令的顺序不能随意调换顺序。
Flash烧写
NSPackageTool dfu -i uart -c/-hc COMx -f ./printf.bin -cmd program -addr 0x70000000 -sector 2048
-i:指定 DFU 通信接口,目前只支持串口。
-c:connect,串口连接之后发送烧写指令,后面接端口名。
-hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。
-f:后面接可执行二进制文件路径。
-cmd:后面接 DFU 指令。
-addr:指定起始地址。
-sector:指定每次烧写块大小,支持1024、2048和4096。
注意:命令的顺序不能随意调换顺序。
Sram模式烧写
NSPackageTool dfu -i uart -c/-hc COMx -f ./sram.bin -cmd sram -addr 0x08000000 -sector 4096
-i:指定 DFU 通信接口,目前只支持串口。
-c:connect,串口连接之后发送烧写指令,后面接端口名。
-hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。
-f:后面接可执行二进制文件路径。
-cmd:后面接 DFU 指令。
-addr:指定起始地址。
-sector:指定每次烧写块大小,支持 1024、2048 和 4096。
注意:命令的顺序不能随意调换顺序。
Boot启动
一般sram模式烧写完可执行文件后,进行跳转执行。
NSPackageTool dfu -i uart -c/-hc COMx -cmd boot -addr 0x08000000
-i:指定 DFU 通信接口,目前只支持串口。
-c:connect,串口连接之后发送烧写指令,后面接端口名。
-hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。
-cmd:后面接 DFU 指令。
-addr:指定跳转地址。
注意:命令的顺序不能随意调换顺序。
eFuse Program Write
加载 efuse Program 配置文件批量烧写。
NSPackageTool dfu -i uart -c/-hc COMx -f ./efuse.yaml -cmd efuse
-i:指定 DFU 通信接口,目前只支持串口。
-c:connect,串口连接之后发送烧写指令,后面接端口名。
-hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。
-f:后面指令配置文件,格式为 yaml。
-cmd:后面接 DFU 指令。
注意:命令的顺序不能随意调换顺序。
efuse program配置文件内容格式如下:
eFuse write Single Word
eFuse 单word写入。
NSPackageTool dfu -i uart -c/-hc COMx -cmd efuse -index 128 -val 0x1
-i:指定 DFU 通信接口,目前只支持串口。
-c:connect,串口连接之后发送烧写指令,后面接端口名。
-hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。
-cmd:后面接 DFU 指令。
-index:指定eFuse map中的eFuse word index。
-val:要写入的值。
注意:命令的顺序不能随意调换顺序。
多镜像打包及下载
打包命令
NSPackageTool package -i file1path -addr address1 -i file2path -addr address2 … -o outFileName
-i:后面指定镜像文件的路径。
file1path:配置文件的路径,可以是绝对路径也可以是相对路径,文件类型格式不做要求。
-addr:后面指定镜像文件的下载地址。
-o:后面指定打包后的文件名称,存放路径与配置文件一致,文件类型默认是 bin 格式。
注意:命令的顺序不能随意调换顺序。
使用举例
NSPackageTool package -i ./fm1.bin -addr 0xa0000000 -i fm2.bin -addr 0xa0004000 -o pck2fm
下载
命令与4.3节一样,不同的是命令指定的下载地址不起作用。
附录:错误代码查找表
错误代码 |
说明 |
|---|---|
0x10300000 |
ED25519密钥问题:长度不对、不合法等。检查下对称密钥是否与所选算法一致,以及是否被篡改过等 |
0x10300001 |
|
0x10300002 |
|
0x10300003 |
|
0x10300030 |
SM2密钥问题:长度不对、不合法等。检查下对称密钥是否与所选算法一致,以及是否被篡改过等 |
0x10300031 |
|
0x10300032 |
|
0x10300033 |
|
0x10300034 |
|
0x10300035 |
|
0x10300036 |
|
0x10300037 |
|
0x10300038 |
|
0x10300039 |
|
0x1030003a |
|
0x1030003b |
|
0x1030003c |
|
0x10300050 |
RSA密钥问题:长度不对、不合法等。检查下对称密钥是否与所选算法一致,以及是否被篡改过等 |
0x10300051 |
|
0x10300052 |
|
0x10300053 |
|
0x10300054 |
|
0x10300055 |
|
0x10300056 |
|
0x10300057 |
|
0x10300070 |
加密问题,先排除密钥,IV等值的配置是否有异常。 |
0x10300071 |
|
0x10300072 |
|
0x10300073 |
|
0x10300074 |
|
0x10300075 |
|
0x10300076 |
|
0x10300077 |
|
0x10300078 |
|
0x10300079 |
|
0x1030007a |
|
0x1030007b |
|
0x1030007c |
hash digest计算问题,先检查排除参数配置问题。 |
0x1030007d |
|
0x1030007e |