CC2640R2F BLE5.0 蓝牙协议栈Off-Chip OAD功能
Off-Chip OAD
本节描述了分离镜像的片外OAD(Split Image Off-Chip OAD)和片外OAD库(Library off-chip OAD)之间的差异。片外OAD利用一个外部的flash储存新的镜像在下载和镜像选择/更新期间。
以下处理过程是片外OAD独有的:
- 片外OAD的限制和要求
- 片外OAD内存布局
- BIM用于片外OAD
- 开箱即用(仅适用于分离镜像的片外OAD)
- 将片外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具有以下优点:
OAD镜像的传输时间和灵活性。
开发人员可以选择使用哪种类型的OAD镜像来执行OAD。如果希望减少OAD传输时间,开发人员可以选择生成仅应用程序的OAD镜像。如果开发人员希望以额外的传输时间为代价升级应用程序以及协议栈,则可以选择生成App + Stack OAD镜像。SimpleLink CC2640R2 SDK参考示例
在SimpleLink CC2640R2 SDK中提供了simple_peripheral_oad_offchip项目用于片外OAD的实现,以供参考。
Split Image Off-Chip OAD具有以下缺点:
- 增加Flash使用量
镜像边界的引入可能会删除多达几页的flash,因为它是按页对齐。Split Image Off-Chip OAD也会禁用应用程序和堆栈的全局链接,进一步降低闪存可用性。
Library Off-Chip OAD
Library Off-Chip OAD库具有以下优点:
- 减少flash使用量
Library Off-Chip OAD库具有以下缺点:
- 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进行开箱即用的演示
- 打开bim_oad_offchip项目, 编译并下载到开发板上。
- 打开simple_peripheral_oad_offchip工程,编译下载协议栈,然后编译下载应用程序。
- 打开BTool可以发现设备正在广播。
- 按照 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程序。
- bim_oad_offchip依旧作为BIM程序,不需要修改, 下载进开发板。
- 将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中找到这些文件。
- 将外部Flash中间件添加到应用程序项目,分别是ExtFlash.c、ExtFlash.h。按照上图中同样的方法进行添加。
- 添加include路径。OAD配置文件路径在 \source\ti\ble5stack\profiles\oad\cc26xx。
- 使用适当的片外OAD连接器文件。按照步骤2中的方法取消掉排出编译选项。
- IAR使用 cc26xx_app_oad.icf 仅适用于App App,App + Stack
- CCS使用 cc26xx_app_oad.cmd 适用于App App,App + Stack,Library
在C/C++ Compiler中添加下面宏定义。
- FEATURE_OAD
- HAL_IMAGE_A
添加OAD_IMG_A=1到您的pre-build。
- 修改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。
© Copyright 2017, 成都乐控畅联科技有限公司.
CC2640R2F BLE5.0 蓝牙协议栈Off-Chip OAD功能相关推荐
- CC2640R2F BLE5.0 蓝牙协议栈OAD功能概述
OAD 概述 本章节旨在从更高层次解释OAD主要概念,这些概念将在下一章节进一步扩展.一些概念,例如Boot镜像管理(BIM)在具体实现细节上可能有所不同.但是本章尽可能的覆盖这些概念,下一章节解释它 ...
- CC2640R2F BLE5.0 蓝牙协议栈GAP Bond管理和LE安全连接
GAP Bond管理和LE安全连接 GAP Bond Manager是一个可配置的模块,使用Bond manager后应用程序可以减少大部分安全机制.下表列出了术语. 术语 描述 配对(Pairing ...
- CC2640R2F BLE5.0 蓝牙协议栈GAP GATT 服务(GGS)
GAP GATT 服务(GGS) 在前面GATT服务和简介中说过,GGS服务包含设备和访问信息,例如设备名称,Appearance,外围首选连接参数.GGS的目的是在设备发现和连接启动过程中进行辅助. ...
- CC2640R2F BLE5.0 蓝牙协议栈信道选择算法#2(CSA#2)
概要 信道选择算法#2(CSA#2)是更复杂和更难跟踪用于获得下一个连接事件的信道索引的算法.特别是在高通量使用情况下,避免干扰和多路径衰落效应比通道选择算法#1更有效. 有关算法的详细说明,请参见蓝 ...
- CC2640R2F BLE5.0 蓝牙协议栈GATTServApp模块
GATTServApp模块 GATT服务器应用程序(GATTServApp)存储和管理应用程序范围的属性表.各种配置文件使用此模块将其特性添加到属性表.蓝牙低功耗协议栈使用此模块来响应GATT客户端的 ...
- CC2640R2F BLE5.0 CC2640R2F软件架构
软件架构 开发模型 下图展示CC2640R2F支持的两种开发模型,本文讲解都集中在图一,也就是整个ble协议栈和应用都工作在一个CC2640R2F的单SOC解决方案. 单一设备:Controller. ...
- CC2640R2F BLE5.0 CC2640R2BLE5.0开发文档
CC2640R2&BLE5.0开发 关于我们 关于我们 开发板介绍 文章所有代码.工具.文档开源.加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5. ...
- CC2640R2F BLE5.0 开发向导
入门 磨刀不误砍柴工,这个章节我们先详细讲解TI SimpleLink低功耗蓝牙无线MCU CC2640R2F的学习路线图.无论你是经验丰富还是才入门的的开发人员,TI都提供了各种资源,以简化CC26 ...
- CC2640R2F BLE5.0 开发工具集
CC2640R2BLE5.0开发工具集 对于CC2640开发的全部工具集,我们建议直接从官方下载,因为整个TI Simplelink工具集更新频率特别快,一定程度上的更新会导致向上不兼容或者功能性的差 ...
最新文章
- Mysql入门实战中
- Python应用实战-Python五个实用的图像处理场景
- 汉王人脸1000万用户后的第一人诞生
- JZOJ 5399. 【NOIP2017提高A组模拟10.7】Confess
- Android MVP模式的初识
- mysql 循环创建列_mysql – 查询列中的循环值
- Linux技术研究-基础篇(启动和自动挂载)
- ios 自动打包命令_通过命令行xcodebuild编译打包iOS应用
- fft python 举例_Python FFT合成波形的实例
- Python 代码使用pdb调试技巧
- 用C语言描述数据结构
- c语言中存储器的绝对地址,51单片机C语言编程中对单片机绝对地址访问的两种方法...
- SpringBoot体验Mybatis、MybatisPlus、TKMybatis
- 2021年3月31最新论文(计算机视觉,图像分割,图像识别,图像分类)
- gentoo linux 安装记录
- java web架构配置_javaweb(1) tomcat配置和web程序结构
- ATF:Gicv源码文件系列-gicdv2_helpers.c
- 新闻字幕条制作,一款不错的ae字幕模板
- 回望,勉强及格的大学四年答卷
- 横河的DCS系统是服务器结构吗,横河DCS
热门文章
- 外贸人如何把握客户跟进频率?
- 下载Docker Compose超时的问题(Fail connect to github-production-release-asset-2e65be.s3.amazonaws.com:443)
- XML详解----Schema
- 应对百度“清风算法”的策略和方法
- 对言语上的自律和真正的自律的一些想法
- 我国AI医学影像新成果:人工智能可为肝癌患者无创分级
- 为什么说大数据一定会从ABC里最先掉队
- matlab 打包封装,matlab中如何封装打包成exe文件
- 类似QQ空间,微信朋友圈,微博主页等,展示图片的九宫格控件
- 2020开篇:做一个优质的斜杠青年