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

测试环境


协议栈版本: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...,操作截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第1张图片


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


CC2640之OAD固件升级(内置Flash)手动配置ImageB_第2张图片


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

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第3张图片


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

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第4张图片


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

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第5张图片


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

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

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

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

Defined symbols:中输入:

ICALL_STACK0_ADDR=0xF000
FEATURE_OAD_ONCHIP
IMAGE_INVALIDATE
HAL_IMAGE_B

操作截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第6张图片

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

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第7张图片


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


(2)点击Build Acions

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

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"

这里有几点需要注意的:

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

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

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

 

上述操作截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第8张图片


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

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

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

Configuration file symbol definitions:下输入:

FLASH_ONLY_BUILD=1

操作截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第9张图片

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

默认的配置截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第10张图片


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

 

修改之后的截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第11张图片


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

 

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

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第12张图片


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

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

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第13张图片


选中之后,点打开即可。

 

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文件开头的如下两行代码屏蔽掉:

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

操作截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第14张图片


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

打开

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

 

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

#if defined(FEATURE_OAD) || defined(IMAGE_INVALIDATE)
#include "oad_target.h"
#include "oad.h"
#endif //FEATURE_OAD || IMAGE_INVALIDATE

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

#ifdef IMAGE_INVALIDATE
	Reset_addService();
#endif //IMAGE_INVALIDATE  

操作截图如下:

CC2640之OAD固件升级(内置Flash)手动配置ImageB_第15张图片


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文件,在文件的开头有个定义版本的宏:

#if !defined (OAD_IMAGE_VERSION)
  #define OAD_IMAGE_VERSION    0x0000
#endif // OAD_IMAGE_VERSION

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

#if !defined (OAD_IMAGE_VERSION)
  #define OAD_IMAGE_VERSION    0x0001
#endif // OAD_IMAGE_VERSION

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

 

 

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


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








你可能感兴趣的:(CC26xx-OAD)