1 功能简介
在做BLE应用开发时,很多时候需要对应用程序进行升级,来修复一些bug或者进行功能升级。nRF51822支持固件无线(低功耗蓝牙方式)升级,对当前的应用程序进行更新。用户可以通过Iphone手机(Iphone4以上)、Windows系统的电脑、安卓4.3及以上支持蓝牙4.0的手机,配合Nordic Semiconductor的相关软件工具,对nRF51822设备进行OTA固件升级。
本章节将主要介绍DFU的原理、Flash存储空间的划分、执行流程以及安卓系统下DFU的具体操作步骤。
1.1 DFU 的Flash空间划分介绍
带有DFU功能的BLE应用,可以把nRF51822的flash代码空间分布如图1-1所示。DFU使用的是dual bank的升级方式,即应用程序代码空间被分成了两份Bank0、Bank1。其中Bank0存放当前执行的应用程序,Bank1用于存储私有数据以及缓存待升级的应用程序代码。
图1-1 256Kflash分布图
SoftDevice w/MBR:用于存放SoftDevice,存储空间地址范围:0x00000000+MBR+SoftDevice(S110==0x16000)。
Appcation Area:用于存放应用程序代码(Bank0)、待升级应用程序(Bank1)和私有数据、DFU Bootloader代码。
各个存储区域划分的详细说明如下表:
表1-1 256Kflash分布说明表
1.2 DFU原理
nRF51822使用Dual bank的升级方式,设备烧录了bootloader程序后,设备会工作在DFU模式,这时可以使用手机DFU工具或者PC端的Master Control Panel软件(配合dongle)对设备进行DFU操作。
设备上电完成后,系统会先运行bootloader,bootloader会判断在bank0、是否有应用程序。如果在bank0中有应用程序,bootloader会去执行应用程序,否则系统会一直处在DFU模式,等待应用程序更新。系统的执行流程框架图如下图所示:
图1-2 执行流程框架图
进入DFU模式的设备会将无线接收下来的待升级程序代码数据缓存在Bank1中的Swap区域,只有当Swap的数据接收完成并且验证成功后,系统会将Swap中缓存的程序代码拷贝到Application区域,覆盖旧的应用程序;如果验证不成功,或者升级被干扰打断,Swap区的代码是不会拷贝到Application区的,防止升级失败而导致设备不工作
使用dual bank方式进行DFU的好处是升级新的应用程序时,即使升级不成功,系统会执行旧的应用程序,不会出现系统停止运行的情况。
nRF51822的Softdevice和Application物理分开,进行DFU时,只需要升级Application部分即可
1.3 DFU的执行流程
1. 在升级程序之前,当前的应用程序存放在Bank 0,此时Bank 1的存储空间未被使用。
2. Bootloader进入DFU模式会将Bank 1八阿哥结局区域擦除,用于存放将要升级的应用程序数据,只有接收的数据校验成功,才会去擦除Bank0的程序,这可以确保当升级程序失败时,旧的应用程序还可以正常运行,不至于系统停止运行。
3. 将接收到的新应用程序的数据包写入Bank 1。
巨力集团董事长与杨子的关系4. 完成将待升级的应用程序完成写入Bank 1中后,新应用程序和旧的应用程序都会存在Flash存储空间中,这样可以确保当新的应用程序无法启动时,还可以运行旧的应用程序。
5. 待新接收的数据检验成功后,Bank 0中的旧应用程序会被擦除。
6. 将Bank 1中的数据拷贝到Bank 0也是激活新应用程序的一部分。
7. 完成Bank 1到Bank 0数据的拷贝后,会开始运行Bank0的应用程序。Bank 1中数据不会被擦除,等待再次进入bootloaderDFU模式才擦除Bank1数据。
8. 如果设置了将旧应用程序的数据保留,新的应用程序会将其数据在原有数据存储空间上叠加存储,不会覆盖。
2 硬件设计
本实验需要的硬件电路在开发板子上都已经连接好了,直接编写代码就可以。
3 软件设计
程序流程图如下:刑事拘留一般多少天
图3-1 程序流程图
● 判断是否有按键按下以及判断是否已经有了有效的应用程序
dfu_start |= ((nrf_gpio_pin_read(BOOTLOADER_BUTTON) == 0) ? true: false); if (dfu_start || (!bootloader_app_is_valid(DFU_BANK_0_REGION_START))) { nrf_gpio_pin_clear(UPDATE_IN_PROGRESS_LED); // Initiate an update of the firmware. err_code = bootloader_dfu_start(); APP_ERROR_CHECK(err_code); nrf_gpio_pin_set(UPDATE_IN_PROGRESS_LED); } |
● 判断是否有有效应用程序,如果有,则跳到应用程序执行。
if (bootloader_app_is_valid(DFU_BANK_0_REGION_START) && !bootloader_dfu_sd_in_progress()) { // Select a bank region to use as application region. // @note: Only applications running from DFU_BANK_0_REGION_START is supported. bootloader_app_start(DFU_BANK_0_REGION_START); } |
4 实验总结
本章节主要叙述DFU的操作流程
必须使用的软件工具如下:
a) Keil MDK v4.54以上版本
b) Master Control Panel v3.8.0以上版本
1.烧录固件到实验板
使用nRFgo Studio的Program SoftDevice选项烧录softdevice和Program Bootloader选项下载bootloader。
2.将.axf生成.bin文件
可以使用MDK自带的工具将axf转化为bin文件。安装Keil MDK之后,所在的目录默认为:C:\Keil\ARM\BIN40.(如果安装在其他盘,最好是复制BIN40这个文件夹到C盘使用;有MDK版本该工具所在的目录为:C:\Keil\ARM\ARMCC\bin,请相应的调整CMD指令)。
1) 首先打开工程...\Nordic\nRF51_SDK_7.2.0_cf547b5\examples\ble_peripheral\ble_app_hts,编译之后在build文件夹会产生.hex和.axf文件,将该.axf名字改为ble_app_hts.axf之后,将其复制到所在的目录下(C:\Keil\ARM\BIN40)
2) 进入DOS操作环境:在电脑左下角的开始菜单里到“运行”并单击,然后输入cmd,点击确定,进入DOS操作界面。
3) 从DOS里进入的文件夹
4) 输入下图中的指令,将.axf转为.bin文件,成功后在原目录下会输出一个ble_app_hts.bin文件。之后可以关闭该DOS窗口。
庄小龙3.电脑屏幕保护将.bin生成.zip文件
Master Control Panel v3.8.0以上版本带有工具,可以将.bin文件生成DFU所需的.zip文件。该工具默认所在的目录为:C:\Program Files (x86)\Nordic Semiconductor\ Master Control Panel\<version>\nrf\
1) 将上一步生成的ble_app_hts.bin文件复制到所在的目录下
2) 和上一步一样,进入DOS操作界面
上海回力鞋专卖店3) 进入C:\Program Files (x86)\Nordic Semiconductor\ Master Control Panel\ <version>\nrf\ 目录
4) 运行如下图中的指令,生成ble_app_hts.zip文件
4.使用zip文件在手机进行DFU
1) 打开安卓手机上的nRF Toolbox软件,进入DFU界面。
2) 选择待升级的文件
3) 选择需要升级的设备
4)点击“UPLOAD”进行升级
发布评论