您的位置:首页 > 其它

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

2017-08-23 16:55 363 查看

转自: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

$PROJ_DIR$/../../../../../../../Projects/ble/Profiles/OAD/CC26xx  

在“Defined symbols:”中输入:

[cpp] view
plain copy

ICALL_STACK0_ADDR=0xF000  

FEATURE_OAD_ONCHIP  

IMAGE_INVALIDATE  

HAL_IMAGE_B  

操作截图如下:



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



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

(2)点击“Build Acions”。

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

[cpp] view
plain copy

python "C:\Python27\Scripts\hex2bin.py" -r "6000:EFFF"   

"$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\HeartRateAppFlashROM.hex"  

"$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\OADbin.bin"  

这里有几点需要注意的:

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

[cpp] view
plain copy

"$PROJ_DIR$\FlashOnly_OAD_ImgB\Exe\HeartRateAppFlashROM.hex"  

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

 

上述操作截图如下:



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

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

[cpp] view
plain copy

$PROJ_DIR$\..\..\..\..\..\common\cc26xx\IAR\cc26xx_ble_app_oad.icf  

在“Configuration file symbol definitions:”下输入:

[cpp] view
plain copy

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.c”、“oad.h”、“oad_target_internalFlash.c”和“oadResetService.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

//var ROM = xdc.useModule('ti.sysbios.rom.ROM');  

//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

#if defined(FEATURE_OAD) || defined(IMAGE_INVALIDATE)  

#include "oad_target.h"  

#include "oad.h"  

#endif //FEATURE_OAD || IMAGE_INVALIDATE  

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

[cpp] view
plain copy

#ifdef IMAGE_INVALIDATE  

    Reset_addService();  

#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

#if !defined (OAD_IMAGE_VERSION)  

  #define OAD_IMAGE_VERSION    0x0000  

#endif // OAD_IMAGE_VERSION  

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

[cpp] view
plain copy

#if !defined (OAD_IMAGE_VERSION)  

  #define OAD_IMAGE_VERSION    0x0001  

#endif // OAD_IMAGE_VERSION  

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

 

 

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

点击打开OAD配置升级的博文链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: