目录

Off-Chip OAD

本节描述了分离镜像的片外OAD(Split Image Off-Chip OAD)和片外OAD库(Library off-chip OAD)之间的差异。片外OAD利用一个外部的flash储存新的镜像在下载和镜像选择/更新期间。

以下处理过程是片外OAD独有的:

支持协议栈镜像

片外OAD支持分离镜像和协议栈库编译配置。这意味着用户可以在一个OAD期间更新应用程序和协议栈。Stack和stack_library镜像类型由片外OAD支持,有关每个OAD的优点的说明,请参见以下部分。

注意:外OAD分为了 Split Image Off-Chip OAD和Library Off-Chip OAD。前者是协议栈和应用程序有固定的flash边界。后者没有固定这个边界,Stack的大小是在编译之后确定的。了解TI在存储架构的设计参考存储架构

Split Image Off-Chip OAD

Split Image Off-Chip OAD具有以下优点:

Split Image Off-Chip OAD具有以下缺点:

Library Off-Chip OAD

Library Off-Chip OAD库具有以下优点:

Library Off-Chip OAD的限制和要求

为了能正常执行片外OAD,目标系统必须包含以下几点:
需要一个额外的存储设备,至少需要128K的容量。支持多个OAD镜像文件存储,容量为n128+(nEXT_FL_PAGE_SIZE),n>=1。
空闲的GPIO口连接外部存储器(例如SPI)
足够的空间来保存BIM的第31页(4K)的全部内容(即Metadata)。

片外OAD内存布局如下

如图所示,片外OAD升级使用内部flash和外部flash共同完成。内部FLASH包含中断向量,嵌入了OAD配置文件的应用程序,BLE堆栈镜像,NV存储区域,BIM和CCFG。

外部存储使用的是512KB的flash。最多能保存3个OAD镜像和3个与OAD镜像相对应的元数据。这部分代码可以在ext_flash_layout.h中看见。每个image占位大小为128KB,每一个镜像(仅限APP或APP+Stack)必须支持OAD配置文件,也就是必须支持OAD功能,以便在复制到片内flash上后进一步启用OAD。

红色区域是永久驻留在flash上的,不会通过OAD进行升级。通过BIM进行镜像选择。防止升级失败后使用一个错误的OAD升级文件。

BIM用于片外OAD

警告BIM将链接CCFG,CCFG用户可以配置,通过写入IMAGE_VALID_CONF为0x1F000,意味着程序启动后自动执行BIM部分代码而不是应用程序代码。BIM将会启动应用程序代码,OAD应用程序部分不需要包含CCFG,这是CC2640R2F的特性,也是也CC2650的区别。

BIM要求在OAD升级中驻留在FLASH中,以便提供一个故障检测机制,用于确定时候运行现有的应用程序镜像还是从外部flash中拷贝新的镜像到内部flash中。当有新的镜像存在在外部FLASH中,BIM对镜像进行CRC校验,如果CRC校验通过,并且没有定义NO_COPY宏,BIM将新的镜像复制到内部flash中,如果定义了NO_COPY宏,BIM将不会加载任何新镜像。

开箱即用(仅适用于分离镜像的Split Image Off-Chip OAD)

本节使用IAR进行开箱即用的演示

  1. 打开bim_oad_offchip项目, 编译并下载到开发板上。
  2. 打开simple_peripheral_oad_offchip工程,编译下载协议栈,然后编译下载应用程序。
  3. 打开BTool可以发现设备正在广播。
  4. 按照 BToll OAD Procedure中详细步骤进行OAD升级。

按照上面步骤即可进行Split Image Off-Chip OAD升级,如果有疑问可以参考附录部分。

注意:在BTool选升级文件的时候确保选在*_oad.bin文件,因为此文件包含元数据。默认情况下,这些文件可以在\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral_oad_offchip\tirtos\iar\app\FlashROM_OAD_Offchip\Exe下找到。

注意:OAD成功后,可能需要重启设备才能再次广播。

将OAD添加在现有项目中(Peripheral)

本节演示如何通过修改Simple_Peripheral添加OAD功能,并且Simple_Peripheral是一个典型的Library Off-Chip程序。

  1. bim_oad_offchip依旧作为BIM程序,不需要修改, 下载进开发板。
  2. 将OAD配置文件添加到Simple_Peripheral程序中。分别是:oad.c、oad.h、oad_target.h、oad_target_external_flash.c。这些文件在原始的Simple_Peripheral工程中是从编译中排出了的,将它添加进来。右键对应要添加的文件,取消掉Exclude from build。如下图所示。

注意:可以在 \source\ti\ble5stack\profiles\oad\cc26xx中找到这些文件。

  1. 将外部Flash中间件添加到应用程序项目,分别是ExtFlash.c、ExtFlash.h。按照上图中同样的方法进行添加。
  2. 添加include路径。OAD配置文件路径在 \source\ti\ble5stack\profiles\oad\cc26xx。
  3. 使用适当的片外OAD连接器文件。按照步骤2中的方法取消掉排出编译选项。
    • IAR使用 cc26xx_app_oad.icf 仅适用于App App,App + Stack
    • CCS使用 cc26xx_app_oad.cmd 适用于App App,App + Stack,Library

  1. 在C/C++ Compiler中添加下面宏定义。

    • FEATURE_OAD
    • HAL_IMAGE_A
  2. 添加OAD_IMG_A=1到您的pre-build。

  1. 修改Post_build命令行为:
    $TOOLS_BLE_DIR$\oad\oad_image_tool.exe $PROJ_DIR$\FlashROM_StackLibrary\Exe\ble5_simple_peripheral_cc2640r2lp_app_FlashROM_StackLibrary.hex -t offchip -i app --imgVer 0 -ob $PROJ_DIR$\FlashROM_StackLibrary\Exe\hid_adv_remote_cc2640r2rc_app.bin -m 0x0000 --r 0x0000。

该命令在编译后执行,生成bin文件,也就是OAD升级中需要的文件。经过以上步骤即可完成在现有项目中添加OAD功能。编译通过后可直接下载进入开发板,然后修改步骤6和步骤7中的HAL_IMAGE_A为HAL_IMAGE_B,OAD_IMG_A=1为OAD_IMG_B=1。生成对应的镜像文件之后使用BTool工具下载最新的固件。下载步骤参考<a href="....\oad\appendix\appendix.html>附录部分。

加入我们

文章所有代码、工具、文档开源。加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5.0。

CC2640R2F&BLE5.0-乐控畅联 © Copyright 2017, 成都乐控畅联科技有限公司.