BLE-CC2640R2F-(01)off-oad片外空中升级
1 简介
以OAD-offchip为例,介绍如何将OAD升级移植到自己的产品中。
基础例程:simplelink_cc2640r2_sdk_1_30_00_25官方例程OAD-OFFCHIP
路径C:\TI\simplelink_cc2640r2_sdk_1_30_00_25\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral_oad_offchip
2 实验平台
2.1 协议栈版本:simplelink_cc2640r2_sdk_1_30_00_25.exe
2.2 编译软件:CCS7.1.0.16
2.3 硬件平台:TI官方cc2640 LaunchPad
2.4 仿真器:XDS110
2.5 手机:iphone6
2.6 APP:lightBlue、TI SimpleLinkStarter
3 实验前提
无
4 基础知识
4.1 什么是OAD?
答、即空中升级,通过蓝牙给MCU升级软件
4.2 什么是片外OAD?
答、片外flash空中升级,通过蓝牙将升级包下载到片外flash,重启mcu将下载到片外flash的升级包拷贝的片内flash中。
4.3 片外OAD的原理
4.3.1 工程介绍
片外OAD的例程中有三个工程,分别是:
bim_oad_offchip_cc2640r2lp_app 简称为BIM工程
simple_peripheral_cc2640r2lp_app_oad_offchip 简称为APP工程
simple_peripheral_cc2640r2lp_stack_oad_offchip 简称为STACK工程
BIM工程,是上电执行的第一个工程,在此工程中检查外部flash是否有等待加载入内部flash的image。如果有,则从外部flash加载image;如果没有,则直接跳到APP工程。
APP工程,我们的主要工作是在APP工程完成,我们在APP工程中创建任务,实现所有与功能相关的内容。APP工程在需要使用到STACK实现的相关功能时,就会调用STACK工程的相关内容。所以要想APP工程正常运行mcu必须先加载STACK工程。
STACK工程,实现蓝牙协议栈和ICALL底层相关内容,例如snv_flash(内部flash)就是在这个工程中实现,单独加载STACK工程run不会有什么作用,stack工程的作用是被APP工程调用。
调试的顺序应为,先下载BIM工程,在下载STACK工程,最后APP工程。
注意:有时调试APP工程会造成STACK工程损坏,可以使用flashprogrammer2工具readback回来比对一下,这时候需要重新烧录STACK工程mcu才可以正常工作。
4.3.2 升级过程
过程1:下载升级包
CC2640R2F运行在APP模式,手机APP通过蓝牙将升级包发送给CC2640R2F,CC2640R2F将升级包存储在外部flash中。
过程2:拷贝升级包
CC2640R2F在APP模式下载完升级包完成后,手机APP发送重启命令给CC2640R2F,CC2640R2F重启进入BIM模式,在BIM模式下检查外部flash的升级包是否完整,若完整,则将升级包拷贝到CC2640R2F的APP部分并将旧版本APP覆盖。
过程3:跳转进入APP,升级完成
CC2640R2F将升级包拷贝APP覆盖掉旧版本APP后,跳转进入APP模式,升级完成,可以连接CC2640R2F验证升级是否成功。
5 试验步骤
5.1 修改BIM工程
5.1.1 屏蔽掉startup_ccs.c中的SetupTrimDevice()。
在调试模式这一步无法正常运行,会卡在其中的一个芯片检测步骤,官方的原版例程应该有bug,只要将这一句屏蔽即可。
5.1.2 修改外部flash引脚定义,bsp.h文件中
将:
#defineBSP_IOID_FLASH_CS IOID_20
#defineBSP_SPI_MOSI IOID_9
#defineBSP_SPI_MISO IOID_8
#defineBSP_SPI_CLK_FLASH IOID_10
修改为:
#defineBSP_IOID_FLASH_CS IOID_7 //IOID_20
#defineBSP_SPI_MOSI IOID_4//IOID_9
#defineBSP_SPI_MISO IOID_6//IOID_8
#defineBSP_SPI_CLK_FLASH IOID_5//IOID_10
注意:修改后的引脚不要与其他引脚重复定义。
5.1.3 增加flash芯片型号定义
在ext_flash.c中的
{
.manfId = 0x0,
.devId = 0x0,
.deviceSize = 0x0
}
前面增加
{
.manfId = 0x01, // add our flash
.devId = 0x14,
.deviceSize = 0x200000 // 2 MByte (16Mbit)
},
其中manfId、devId、deviceSize的值要根据你产品中使用的外部flash型号而修改。具体的值参照外部flash芯片手册。
5.2 修改APP工程
5.2.1 修改外部flash引脚定义
5.2.2 增加flash芯片型号定义
1.1 进行升级试验
1、将BIM、APP、STACK工程烧录到cc2640r2f中,使用lightBlue可以看到名称为SimplePerihperal的蓝牙。
2、修改APP中的蓝牙名称,如下图:
将名称修改为HamplePerihperal,编译。在工作目录下找到simple_peripheral_cc2640r2lp_app_oad_offchip.bin,这是用于空中升级的文件。将bin文件传到iPhone手机中,并用TI simplelink starter打开bin文件,连接后进行升级,升级完成需要重启手机蓝牙,使用lightBlue查看可以查看到HamplePerihperal名称的蓝牙(需要连接该蓝牙,并在ADVERTISEMENT DATA中点Show查看蓝牙名字)。
参考文档:
file:///C:/ti/simplelink_cc2640r2_sdk_1_30_00_25/docs/blestack/ble_sw_dev_guide/html/oad/oad.html#off-chip-oad