CC2640之OAD固件升级(内置Flash)手动配置ImageB

转自:http://blog.csdn.net/zzfenglin/article/details/52336511


测试环境


协议栈版本:BLE-STACK V2.1

IAR开发环境版本:IAR for Arm 7.40

硬件设备:Amo-SmartRF v2.0 开发板(对应TI官方的SmartRF06EB 开发板)

示例测试Demo工程:HeartRate工程

测试工具:BLE Device Monitor(PC)




配置ImageB

 

我们选择HeartRate工程来做演示,因为协议栈中的一些工程本身就已经配置ImageB,而HeartRate工程本身默认是没有配置ImageB的

 

1.CC2640App中基于现有工程配置FlashROM创建一个新的工程配置,点击IAR菜单栏上Project,下拉菜单中选择Edit Configurations...,操作截图如下:



点击之后,弹出如下对话框:




输入新的工程配置名FlashOnly_OAD_ImgB,然后点OK之后显示如下:



继续点OK,当前的工程配置就会切换到FlashOnly_OAD_ImgB。如下所示:



2.在工程名CC2640App-FlashOnly_OAD_ImgB上点击鼠标右键,下拉菜单中选择Options...,弹出工程配置对话框,截图如下:



在上图的配置框中,我们对其中的选项做如下配置:

(1)点击C/C++ Compiler---->Preprocessor

在下面的Additional include directories:(one per line)中输入:

[cpp]  view plain  copy
  1. $PROJ_DIR$/../../../../../../../Projects/ble/Profiles/OAD/CC26xx  

Defined symbols:中输入:

[cpp]  view plain  copy
  1. ICALL_STACK0_ADDR=0xF000  
  2. FEATURE_OAD_ONCHIP  
  3. IMAGE_INVALIDATE  
  4. HAL_IMAGE_B  

操作截图如下:



另外,注意HeartRate的工程默认是不广播的,我们为了方便测试,修改为开机启动就广播,所以我们需要将ADVERTISE_WHEN_NOT_CONNECTED定义为TRUE,截图如下:



注意:这个地方要根据你自己的工程情况来定,不是ImageB配置过程中必须严格参照修改的。


(2)点击Build Acions

Post-build command line:下的输入框中输入:

[cpp]  view plain  copy
  1. python "C:\Python27\Scripts\hex2bin.py" -r "6000:EFFF"   
  2. "$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\HeartRateAppFlashROM.hex"  
  3. "$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\OADbin.bin"  

这里有几点需要注意的:

首先,上面三行输入进去的时候,每两行之间是一个空格,如果最后没有编译成功,就把全部命令复制出来确认一下。其次,注意路径和文件名,比如:

[cpp]  view plain  copy
  1. "$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\HeartRateAppFlashROM.hex"  

这一条中的路径是我工程中的路径,确定下你的是不是,不是就改一下,而HeartRateAppFlashROM.hex文件是编译生成的hex文件,确定下你的工程生成的文件名,然后对应修改一下。

 

上述操作截图如下:


(3)点击Linker---->Config

Linker configuration file”下选择或者直接输入:

[cpp]  view plain  copy
  1. $PROJ_DIR$\..\..\..\..\..\common\cc26xx\IAR\cc26xx_ble_app_oad.icf  

Configuration file symbol definitions:下输入:

[cpp]  view plain  copy
  1. FLASH_ONLY_BUILD=1  

操作截图如下:



(4)点击Linker---->Checksum

默认的配置截图如下:



首先,将Fill unused memory前的小框打上勾,然后将Start的值改为0x6004,将End address的值改为0xEFFF。其次,将Generate checksum前的小框打上勾,确定Algorith选择的是CRC16,并且其值为0x1021,默认的值并不是这个,而在CRC16模式下不能改这个值,所以我们先将Algorith选择为CRC polynomial,然后将后面的值修改为0x1021,然后再将Algorith选择为CRC16

 

修改之后的截图如下:



这样,工程配置文件中的修改就结束了。

 

3.在IAR左侧工作区,右键点击PROFILES文件夹,下拉菜单选择Add,然后选择Add Files...,操作截图如下:



点击之后,弹出如下文件选择框,然后到

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\Profiles\OAD\CC26xx路径下选择oad.coad.hoad_target_internalFlash.coadResetService.c四个文件,操作截图如下:



选中之后,点打开即可。

 

4.当ImageB升级的时候,如果Flash中的page 0不能被升级,那ImageB就不应该使用ROM中的TI-RTOS,所以需要将

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\IAR\Config目录下的appBLE.cfg文件开头的如下两行代码屏蔽掉:

[cpp]  view plain  copy
  1. //var ROM = xdc.useModule('ti.sysbios.rom.ROM');  
  2. //ROM.romName = ROM.CC2650;  

操作截图如下:



5.配置添加使ImageB无效化的服务和特征值

打开

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\HeartRate\CC26xx\Source\Application目录下的heartRate.c文件。

 

(1)头文件引用部分添加如下代码:

[cpp]  view plain  copy
  1. #if defined(FEATURE_OAD) || defined(IMAGE_INVALIDATE)  
  2. #include "oad_target.h"  
  3. #include "oad.h"  
  4. #endif //FEATURE_OAD || IMAGE_INVALIDATE  

(2)在HeartRate_init初始化函数中添加如下代码:

[cpp]  view plain  copy
  1. #ifdef IMAGE_INVALIDATE  
  2.     Reset_addService();  
  3. #endif //IMAGE_INVALIDATE    

操作截图如下:



6.重新编译CC2640App,会在如下路径下:

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\HeartRate\CC26xx\IAR\Application\

CC2640\FlashOnly_OAD_ImgB\Exe

下生成OADbin.bin文件,这就说明配置编译完成了。




修改ImageB的版本号

 

打开C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\Profiles\OAD\CC26xx目录下的oad_target_internalFlash.c文件,在文件的开头有个定义版本的宏:

[cpp]  view plain  copy
  1. #if !defined (OAD_IMAGE_VERSION)  
  2.   #define OAD_IMAGE_VERSION    0x0000  
  3. #endif // OAD_IMAGE_VERSION  

如果我们想把ImageB的版本修改为1,那我们就如下修改即可:

[cpp]  view plain  copy
  1. #if !defined (OAD_IMAGE_VERSION)  
  2.   #define OAD_IMAGE_VERSION    0x0001  
  3. #endif // OAD_IMAGE_VERSION  

修改之后,重新编译ImageB即可。

 

 

这样,我们的ImageB手动配置的过程就了解完了,如果你的工程本身没有配置ImageB,那你就可以参照上面的方法进行配置。至于烧录过程以及整个OAD的过程可以参看另一篇博文,链接地址如下:


点击打开OAD配置升级的博文链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值