NRF51系列dfu升级(适用于SDK12以前的版本)
-
升级工具准备(windows 64位)
-
用于将协议栈,用户程序,bootloader三个hex文档合并成一个hex文档,以及快速烧录,工具软件名称为nRF5x-Command-Line-Tools_9_6_0_Installer.exe
-
用于将用户程序从hex档转成bin文件,方便快速制作dfu升级包提供的bin文件使用,工具软件名称为hex2bin.exe
-
用于打包bin文件成ZIP升级包,工具软件名称为mastercontrolpanel.3.10.0.14.x64.msi
工具包下载链接地址:https://download.****.net/download/mygod2008ok/11150544
安装好工具需要设置一下环境变量,在系统path下添加C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\;添加完后重
启一下电脑。
-
协议栈,用户程序,bootloader三个文档合并(以nrf51422为例)
1) 使用nRFgo Studio工具擦除整个芯片(nRFgo Studio工具可以官网下载),然后烧录
s310_softdevice_v3.0.0.hex文件到芯片
红圈内的地址:0x1d000就是用户程序的起始地址,稍后用户程序工程中设置会用到
2) bootloader文件准备(bootloader以SDK9.0 single_bank_s310工程为例)
bootloader工程中有2个宏定义,如下:
#define BOOTLOADER_REGION_START 0x0003C000 // REGION起始地址
#define BOOTLOADER_SETTINGS_ADDRESS 0x0003FC00 //bootloader设置信息起始地址
NRF51422_XXAC(256KB-FLASH,32KB-RAM )
NRF51822_XXAA(256KB-FLASH,16KB-RAM )
注意32KB和16KB的ram大小区别
DFU蓝牙广播名称由以下宏定义的
#define DEVICE_NAME “DFU_DEMO"
3) 用户程序ROM及RAM配置
协议栈占了0x1d000的大小,所以用户程序起始址从0x1D000开始,bootloader从0x3C000开始,所以用户程序可用的
ROM空间大小为0x3C000-0x1D000=0x1F000
4) 将3个文件放在同一个目录,并在此目录打开命令行
假如三个文件名为:
协议栈:s310_softdevice_v3.0.0.hex
用户程序:nrf51422_xxac_app.hex
bootloader: nrf51422_xxac_bootloader.hex
step 1:
合并bootloader与协议栈,在当前目录下的命令行中输入以下指令后回车,生成临时文件temp.hex
mergehex.exe --merge nrf51422_xxac_bootloader.hex s310_softdevice_v3.0.0.hex --output temp.hex
step 2:
合并临时文件与用户程序文件,在当前目录下的命令行中输入以下指令后回车,生成最终文件production_final.hex
mergehex.exe --merge temp.hex nrf51422_xxac_app.hex --output production_final.hex
5) 烧录文件
step 1:
在production_final.hex 目录下的命令行中输入以下指令后回车,擦除IC
nrfjprog -f NRF52 --eraseall
step 2:
在production_final.hex 目录下的命令行中输入以下指令后回车,烧录production_final.hex 文件到IC
nrfjprog.exe -f NRF52 --program "production_final.hex " --verify
step 3:
在production_final.hex 目录下的命令行中输入以下指令后回车,复位IC并运行
nrfjprog -f NRF52 --reset
-
整合成批处理文件
为了方便操作,将以上的步骤整合在批处理文件成,新建一个dfu.bat文件,并用记事本打开,编辑以下内容后保存
@echo off
:菜单
echo =======================
echo 批处理菜单
echo =======================
echo ====================================================
echo 1.合并所有
echo 2.烧录所有
echo =======================
set /p 选择=请进入命令:
if %选择%==1 (goto :1合并所有)
if %选择%==2 (goto :2烧录所有)
::else (goto : 菜单)
:1合并所有
mergehex.exe --merge nrf51422_xxac_bootloader.hex s310_softdevice_v3.0.0.hex --output temp.hex
mergehex.exe --merge temp.hex nrf51422_xxac_app.hex --output production_final.hex
del temp.hex
:pause>nul
goto 菜单
:2烧录所有
nrfjprog -f NRF52 --eraseall
nrfjprog.exe -f NRF52 --program "production_final.hex " --verify
nrfjprog -f NRF52 --reset
-
生成DFU蓝牙升级包
step 1:
将用户程序nrf51422_xxac_app.hex 复制到hex2bin.exe的目录下
step 2:
用鼠标左键单击nrf51422_xxac_app.hex文件并按不放,然后移动鼠标到hex2bin.exe文件上,最后松开鼠标,屏幕会闪烁一下
生成一个nrf51422_xxac_app.bin文件
step 3:
将nrf51422_xxac_app.bin复制到nRF5x-Command-Line-Tools_9_6_0_Installer.exe工具的以下目录下
C:\Program Files (x86)\Nordic Semiconductor\Master Control Panel\3.10.0.14\nrf\
step 4:
在C:\Program Files (x86)\Nordic Semiconductor\Master Control Panel\3.10.0.14\nrf\目录下打开命令行,输入以下指令并回车,生成最终DFU蓝牙升级包文件nrf51422_xxac_app.zip
nrfutil.exe dfu genpkg --application nrf51422_xxac_app.bin --application-version 0xFFFFFFFF --dev-revision 0xFFFF --dev-type 0xFFFF --sd-req 0xfffe nrf51422_xxac_app.zip
-
用户程序进入bootloader
用户通过蓝牙服务的某个特征字写属性,写入用户程序自己定制好的值,用户程序收到后会写标记值到
flash,eeprom,GPREGRET之一来实现标记保存,然后调用 NVIC_SystemReset(); 系统自动复位后,
bootloader程序代码段中会通过上述的方式得到标记值是否进入dfu程序段还是用户程序段.
bootloader_app_start(DFU_BANK_0_REGION_START); //跳到用户程序区
bootloader_dfu_sd_in_progress() //dfu处理程序代码段
-
dfu升级操作
简单式升级工具下载地址:https://download.****.net/download/mygod2008ok/10538088
step 1:
将上面升级包文件nrf51422_xxac_app.zip复制到手机内存中
step 2:
打开升级app,连接到设备蓝牙
step 3:
点击开始DFU升级,加载手机内存中nrf51422_xxac_app.zip文件后会自动进行dfu升级,稍后会有升级百分比进度提示
备注: 以上工具是安卓源码,需要编译APK后安装,工具安卓8.0后可能会出现问题,仅适用于安卓7或以前的设备,另外,如果用户程序中没有添加DFU服务的方式进入bootloader,则需要用蓝牙工具nRF Connect连接后发送特定的值进入后再使用此工具升级即可
-
nRF Connect工具进行升级(工具可去网上自行下载)
step 1:
连接蓝牙设备,找到写升级服务uuid,打开notify通知特征属性
step 2:
找到写升级服务的写属性特征字,写入特定的数据到设备,设备收到指令后进入bootloader并广播dfu广播
step 3:
nRF Connect工具连接到dfu广播服务,点右上角的DFU按键,弹出加载升级文件对话框,加载手机内存
中nrf51422_xxac_app.zip文件升级