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文件到芯片

NRF51系列dfu升级(适用于SDK12以前的版本)

红圈内的地址: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 )

NRF51系列dfu升级(适用于SDK12以前的版本)

                               NRF51822_XXAA(256KB-FLASH,16KB-RAM )

NRF51系列dfu升级(适用于SDK12以前的版本)

                                         注意32KB和16KB的ram大小区别

                 DFU蓝牙广播名称由以下宏定义的

                 #define DEVICE_NAME                          “DFU_DEMO"

3)   用户程序ROM及RAM配置

NRF51系列dfu升级(适用于SDK12以前的版本)

协议栈占了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文件升级

NRF51系列dfu升级(适用于SDK12以前的版本)