CC2541 OAD升级实现
BLE_OAD升级
1、软件版本:IAR for 8051 10.10.1
2、协议栈:BLE 1.4.0
一、获得BIM。
3、\BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\BIM.eww,编译出BLE-CC254x-1.4.0\Projects\ble\util\BIM\cc254x\CC254xF256\Exe\BIM_CC254xF256.hex文件
当 A 不存在时,在等待 IAR 或者 Flash Programmer 将 A 通过物理方法写入芯片内部。 OAD 的实现必须要有 BIM, BIM 负责管理 IMAGE-A 和IMAGE-B,当有合适的 IMAGE-B 存在, BIM 会启动 B,否则启动 A。
二、自己新建OAD的ImgeA配置
注意:BLE-CC254x-1.4.0\Projects\ble\SimpleBLEPeripheral\CC2541DB\SimpleBLEPeripheral.eww工程默认具有OAD。
1、IAR 中,选择 Project→Edit Configurations,选择 New…,如图 2 所示,添加一个新的配置,起名就叫 Image_A,点击 OK,这时 IAR 界面的左边导航部分,就变成 Image_A 了,如图 3。
2、IAR 中左侧导航中,找到 App 文件夹下的 simpleBLEPeripheral.c 文件,双击打开,找到宏定义DEFAULT_ENABLE_UPDATE_REQUEST,将其改为 FALSE(原来是 TRUE),见图 4。 否则会影响BLE Device Monitor 对其进行空中升级, 到时可以再改回来。 (有时候不该也可以,不知道原因)
3、 IAR 左侧导航中找到 Profile 文件夹,点击右键添加 oad_target.c 和 oad_target.h 两个文件,见图 5, 二文件位于 C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\Profiles\OAD 中。
4、在 刚 才 的 simpleBLEPeripheral.c 文 件 中 , 找 到 SimpleBLEPeripheral_Init() 函 数 , 在 里 面 添 加OADTarget_AddService()函数,见图 7.
#if defined FEATURE_OAD VOID OADTarget_AddService(); // OAD Profile #endif |
#if defined FEATURE_OAD #include "oad.h" #include "oad_target.h" #endif |
5、在 keyfobdemo.c 的前面,添加引用 OAD 的头文件, OAD.h 和 OAD_target.h,见图 8.
6、点击 Project→Option…,或直接按 Alt+F7,选择 C/C++ Compiler,选择 Preprocessor,在Additional include directories 中添加路径$PROJ_DIR$\..\..\Profiles\OAD,在 Defined symbols 中添加宏:FEATURE_OAD OAD_KEEP_NV_PAGES FEATURE_OAD_BIM HAL_IMAGE_A
$PROJ_DIR$\..\..\Profiles\OAD |
FEATURE_OAD_BIM HAL_IMAGE_A FEATURE_OAD OAD_KEEP_NV_PAGES |
7、点击 Project→Option…,或直接按 Alt+F7,选择 Build Actions,在 Post-build command line中添加如下路径字符串。
注意,各双引号之间只有一个空格。 见图 10. 注意图中红框标的部分, Image_A 是和之前第1 步对应的。
"$PROJ_DIR$\..\..\common\cc2540\cc254x_ubl_pp.bat" "$PROJ_DIR$" "ProdUBL" "$PROJ_DIR$\CC2541-OAD-ImgA\Exe\SimpleBLEPeripheral" |
8、点击 Project→Option…,或直接按 Alt+F7,选择 Linker,选择 Config, Linker Configurationfile中 勾 选 Override default , 添 加 $PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgA.xcl,如图 11
$PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgA.xcl |
9、点击 Project→Option…,或直接按 Alt+F7,选择 Linker,选择 Output,按图 12 进行设置。
10、点击 Project→Option…,或直接按 Alt+F7,选择 Linker,选择 Extra Output,如图 13 所示。
11、点击 Project→Option…,或直接按 Alt+F7,选择 Texas Instruments,选择 Download,如图 14 所示。
12、编译,下载板子中,编译时可能会出现如图 15 所示的脚本错误,忽略即可。
13、文件夹下获得文件如图16.则成功。
二、自己新建OAD的ImgeB配置
步骤如上。区别如下:
l IAR 中,选择 Project→Edit Configurations,选择 New…,如图 2 所示,添加一个新的配置,起名就叫 Image_B,点击 OK,这时 IAR 界面的左边导航部分,就变成 Image_B 了,如图 3。
l 点击 Project→Option…,或直接按 Alt+F7,选择 C/C++ Compiler,选择 Preprocessor,在Additional include directories 中添加路径$PROJ_DIR$\..\..\Profiles\OAD,在 Defined symbols 中添加宏:FEATURE_OAD OAD_KEEP_NV_PAGES FEATURE_OAD_BIM HAL_IMAGE_B
l 点击 Project→Option…,或直接按 Alt+F7,选择 Build Actions,在 Post-build command line中添加如下路径字符串。
"$PROJ_DIR$\..\..\common\cc2540\cc254x_ubl_pp.bat" "$PROJ_DIR$" "ProdUBL" "$PROJ_DIR$\CC2541-OAD-ImgB\Exe\SimpleBLEPeripheral" |
l 点击 Project→Option…,或直接按 Alt+F7,选择 Linker,选择 Config, Linker Configurationfile中 勾 选 Override default , 添 加 $PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgB.xcl,如图 11
$PROJ_DIR$\..\..\common\cc2540\cc254x_f256_imgB.xcl |
三、使用SmartRF Flash Programmer 工具烧写
1、烧写启动镜像管理文件BIM_CC254xF256.hex。 Erase, program and verify OK成功。
2、烧写ImgA镜像。注意这里烧录的是 hex 文件, 而 OAD 烧录用的是 bin 文件;且为append and verify选项。
四、使用BLE Device Monito+USB Dongler空中升级。(也可使用 iso 手机应用商店的TI BLE Multitool 工具)
1、连接BLE Device Monitor与USB Dongle
2、使用设备管理器找到USB Dongler 被分配的COM口
3、Options->Serial port 中设定COM
4、点击“scan”扫描设备。
5、选中设备,点击“connect”连续设备。会发现可OAD升级的设备服务。
6、OAD升级。点击File-Program(OAD),选择要下载的ImageB的bin后,点Start。
五、软件版本和用户ID管理。
方法1:直接更改buildConfig.cfg
// OAD Image Version (0x0000-0x7FFF) -DOAD_IMAGE_VERSION=0x0000 |
方法2:屏蔽掉buildConfig.cfg中的-DOAD_IMAGE_VERSION=0x0000后;点击 Project→Option…,或直接按 Alt+F7,选择 C/C++ Compiler,选择 Defined symbols 中添加宏:OAD_IMAGE_VERSION=1
方法3:屏蔽掉buildConfig.cfg中的-DOAD_IMAGE_VERSION=0x0000后;oad_target.c 文件中直接设置:
版本 |
#if !defined (OAD_IMAGE_VERSION) #define OAD_IMAGE_VERSION 0x0000 #endif |
用户ID |
#if !defined (OAD_IMAGE_A_USER_ID) #define OAD_IMAGE_A_USER_ID {'A', 'A', 'A', 'A'} #endif #if !defined (OAD_IMAGE_B_USER_ID) #define OAD_IMAGE_B_USER_ID {'B', 'B', 'B', 'B'} #endif |
问题记录
问题1: |
2018-01-01 |
现象 |
Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xd more bytes needed. The problem occurred while processing the segment placement command "-Z(IDATA)ISTACK+_IDATA_STACK_SIZE#_IDATA_BEG-_IDATA_END", where at the moment of placement the available memory ranges were "IDATA:4d-ff" |
解决1 |
Options..->General Options中的Stark/Heap 选项卡,将IDATA 0xC0 改为 0xB0 |
解决2 |
C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\ti_51ew_cc2540b.xcl 將下面-Z(DATA)VREG+_NR_OF_VIRTUAL_REGISTERS=08-7F 改成-Z(DATA)VREG=08-7F |
原因 |
IAR版本问题:8.30后会出现本问题。 |
CC2541 OAD升级实现相关推荐
- 蓝牙BLE之CC2541 OAD升级[带看门狗OAD]
说明和代码设置 本文有两篇文章参考,其中博主"甜甜的大香瓜"的文章是原始文章,详细介绍了ImageA的hexh和B的bin以及A的bin是怎么生成的和具体的操作方法:https:/ ...
- Android:TI 型号2640 R2F低功耗蓝牙芯片 OAD升级
问题:蓝牙芯片从2541更新为2640 R2F后进行OAD升级? OAD简介及流程: 1.包含固件升级功能的固件中都会有OAD服务 (1)蓝牙芯片2541的OAD服务及特征如下: UUID:0xF00 ...
- 关于CC2640R2F的OAD升级
一.概念 1.什么是OAD升级 通过蓝牙对MCU进行空中升级. 2.什么是片外OAD升级 利用蓝牙将升级包下载到外部的flash中,然后再重启MCU,MCU启动后,再去外部的flash中读取升级包,最 ...
- TI CC2541 OAD流程
TI CC2541 提供空中升级更新运行demo,该功能其实实用性比较差,由于低功耗蓝牙传输数据的限制,无法实现快速空中升级, 在bin文件为126K的情况下本人最快的记录是2mine,如果需要楼主编 ...
- CC2652 OAD升级
1.介绍 执行一个OAD需要两个无线设备: OAD目标设备(OAD Target) OAD分发设备(OAD Distributor) OAD目标设备接收通过无线传输的镜像.负责实现用于发送和接收OAD ...
- 【BLE】CC2541之Large OAD
本篇博文最后修改时间:2017年05月19日,03:33. 一.简介 本篇以SimpleBLEPeripheral工程为例,介绍如何进行Large OAD升级. 二.实验平台 协议栈版本:BLE-CC ...
- 【BLE】CC2541之OAD
本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文以SimpleBLEPeripheral工程为例,介绍如何进行OAD升级. 二.实验平台 协议栈版本:BLE-CC254x-1 ...
- CC2541之OAD
一.简介 本篇以SimpleBLEPeripheral工程为例,介绍如何进行OAD升级. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件: IAR 8.20.2 硬件平台: Sm ...
- CC2652 on-chip OAD程序升级记录全过程
1 前期准备 参考:设置 BLE OAD 环境 硬件环境 LAUNCHXL-CC26X2R1一块 LAUNCHXL-CC2652RSIP一块 硬件类型 硬件名称 角色 功能 开发板 LAUNCHXL- ...
最新文章
- 调剂女人身材的十种食物
- nginx win 启动关闭_windows下Nginx启动、关闭、重启bat工具
- 什么是闭包,我的理解
- android Run模式也会出现Waiting for debugger的解决方法
- oracle:ORA-01940无法删除当前已连接用户的解决方案
- Python Elasticsearch 插入数据
- 什么是Intent? 转
- printstream_Java PrintStream clearError()方法与示例
- arduino esp8266_你还用Arduino?上PlatformIO开发Esp、AVR、STM32,十分钟亲测ESP8266
- 洛谷P5724、P5727、P5728、P5729题题解(Java语言描述)
- Linux基础-编译安装Python
- 我用Python爬了点你们需要的电影,这些电影真的很不错~
- 基于日志处理的ElasticSearch的学(gen)习(feng)
- 用户生命周期,从运营到数据的最全攻略在这里
- Java poi 表格居中
- Python3简单的爬虫项目 爬取虎牙主播名字 人气
- 与华为SIP硬终端(TE40)对接注意事项
- 京东登陆界面正则匹配
- 在opensuse上安装TL-WDN5200免驱版无线网卡
- 冒泡排序图解-Java实现
热门文章
- Mac SecureFX 打开时乱码
- QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(四)
- 相机精度与像素的关系
- html电子书软件电脑版,4Easysoft PDF to HTML Converter
- delphi百度语音(支持语音识别和语音合成),D7~XE10可用
- iOS开发宝典:String用法大全
- 微信自定义网页分享链接(可自定义链接 图片 内容介绍)
- JD6606S用于USB的PD充电协议IC资料
- 编号为1,2,3,4.......n的一群人沿顺时针方向围绕一圈的问题
- 联想关闭计算机,如何关闭Lenovo计算机随附的防病毒软件?联想计算机随附的McAfee Antivirus...