转自: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)”中输入:
在“Defined symbols:”中输入:
操作截图如下:
另外,注意“HeartRate”的工程默认是不广播的,我们为了方便测试,修改为开机启动就广播,所以我们需要将“ADVERTISE_WHEN_NOT_CONNECTED”定义为“TRUE”,截图如下:
注意:这个地方要根据你自己的工程情况来定,不是ImageB配置过程中必须严格参照修改的。
(2)点击“Build Acions”。
在“Post-build command line:”下的输入框中输入:
这里有几点需要注意的:
首先,上面三行输入进去的时候,每两行之间是一个空格,如果最后没有编译成功,就把全部命令复制出来确认一下。其次,注意路径和文件名,比如:
这一条中的路径是我工程中的路径,确定下你的是不是,不是就改一下,而“HeartRateAppFlashROM.hex”文件是编译生成的hex文件,确定下你的工程生成的文件名,然后对应修改一下。
上述操作截图如下:
(3)点击“Linker”---->“Config”
在“Linker configuration file”下选择或者直接输入:
在“Configuration file symbol definitions:”下输入:
操作截图如下:
(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”文件开头的如下两行代码屏蔽掉:
操作截图如下:
5.配置添加使ImageB无效化的服务和特征值
打开
“C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\HeartRate\CC26xx\Source\Application”目录下的“heartRate.c”文件。
(1)头文件引用部分添加如下代码:
(2)在“HeartRate_init”初始化函数中添加如下代码:
操作截图如下:
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”文件,在文件的开头有个定义版本的宏:
如果我们想把ImageB的版本修改为1,那我们就如下修改即可:
修改之后,重新编译ImageB即可。
这样,我们的ImageB手动配置的过程就了解完了,如果你的工程本身没有配置ImageB,那你就可以参照上面的方法进行配置。至于烧录过程以及整个OAD的过程可以参看另一篇博文,链接地址如下: