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.csdn.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

备注:

      如果出现了以下信息,由2种情况造成:

   1.文件目录操作权限不够

   2. 安装了nrf52系列的nrfutil工具,造成文件名冲突

Traceback (most recent call last):
  File "__main__.py", line 303, in <module>
  File "click\core.pyc", line 664, in __call__
  File "click\core.pyc", line 644, in main
  File "click\core.pyc", line 991, in invoke
  File "click\core.pyc", line 991, in invoke
  File "click\core.pyc", line 837, in invoke
  File "click\core.pyc", line 464, in invoke
  File "__main__.py", line 236, in genpkg
  File "nordicsemi\dfu\package.pyc", line 236, in generate_package
  File "nordicsemi\dfu\package.pyc", line 250, in create_zip_package
  File "zipfile.pyc", line 752, in __init__
IOError: [Errno 13] Permission denied: 'nrf51422_xxac_app.zip'

解决方案:

   1.将需要生成的文件移到C盘安装目录之外的文件夹

  2.  将C:\Program Files (x86)\Nordic Semiconductor\Master Control Panel\3.10.0.14\nrf\目录下的nrfutil.exe

    改名成nrfutil_nrf51.exe

 3.执行以下命令生成升级包

nrfutil_nrf51.exe dfu genpkg --application nrf51422_xxac_app.bin --application-version 0xFFFFFFFF --dev-revision 0xFFFF --dev-type 0xFFFF --sd-req 0xfffe nrf51422_xxac_app.zip

另外:也可以nrf51422_xxac_app.hex直接生成升级包,输入以下命令

util_nrf51.exe dfu genpkg --application nrf51422_xxac_app.hex --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.csdn.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文件升级

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值