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升级实现相关推荐

  1. 蓝牙BLE之CC2541 OAD升级[带看门狗OAD]

    说明和代码设置 本文有两篇文章参考,其中博主"甜甜的大香瓜"的文章是原始文章,详细介绍了ImageA的hexh和B的bin以及A的bin是怎么生成的和具体的操作方法:https:/ ...

  2. Android:TI 型号2640 R2F低功耗蓝牙芯片 OAD升级

    问题:蓝牙芯片从2541更新为2640 R2F后进行OAD升级? OAD简介及流程: 1.包含固件升级功能的固件中都会有OAD服务 (1)蓝牙芯片2541的OAD服务及特征如下: UUID:0xF00 ...

  3. 关于CC2640R2F的OAD升级

    一.概念 1.什么是OAD升级 通过蓝牙对MCU进行空中升级. 2.什么是片外OAD升级 利用蓝牙将升级包下载到外部的flash中,然后再重启MCU,MCU启动后,再去外部的flash中读取升级包,最 ...

  4. TI CC2541 OAD流程

    TI CC2541 提供空中升级更新运行demo,该功能其实实用性比较差,由于低功耗蓝牙传输数据的限制,无法实现快速空中升级, 在bin文件为126K的情况下本人最快的记录是2mine,如果需要楼主编 ...

  5. CC2652 OAD升级

    1.介绍 执行一个OAD需要两个无线设备: OAD目标设备(OAD Target) OAD分发设备(OAD Distributor) OAD目标设备接收通过无线传输的镜像.负责实现用于发送和接收OAD ...

  6. 【BLE】CC2541之Large OAD

    本篇博文最后修改时间:2017年05月19日,03:33. 一.简介 本篇以SimpleBLEPeripheral工程为例,介绍如何进行Large OAD升级. 二.实验平台 协议栈版本:BLE-CC ...

  7. 【BLE】CC2541之OAD

    本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文以SimpleBLEPeripheral工程为例,介绍如何进行OAD升级. 二.实验平台 协议栈版本:BLE-CC254x-1 ...

  8. CC2541之OAD

    一.简介 本篇以SimpleBLEPeripheral工程为例,介绍如何进行OAD升级. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件: IAR 8.20.2 硬件平台: Sm ...

  9. CC2652 on-chip OAD程序升级记录全过程

    1 前期准备 参考:设置 BLE OAD 环境 硬件环境 LAUNCHXL-CC26X2R1一块 LAUNCHXL-CC2652RSIP一块 硬件类型 硬件名称 角色 功能 开发板 LAUNCHXL- ...

最新文章

  1. 调剂女人身材的十种食物
  2. nginx win 启动关闭_windows下Nginx启动、关闭、重启bat工具
  3. 什么是闭包,我的理解
  4. android Run模式也会出现Waiting for debugger的解决方法
  5. oracle:ORA-01940无法删除当前已连接用户的解决方案
  6. Python Elasticsearch 插入数据
  7. 什么是Intent? 转
  8. printstream_Java PrintStream clearError()方法与示例
  9. arduino esp8266_你还用Arduino?上PlatformIO开发Esp、AVR、STM32,十分钟亲测ESP8266
  10. 洛谷P5724、P5727、P5728、P5729题题解(Java语言描述)
  11. Linux基础-编译安装Python
  12. 我用Python爬了点你们需要的电影,这些电影真的很不错~
  13. 基于日志处理的ElasticSearch的学(gen)习(feng)
  14. 用户生命周期,从运营到数据的最全攻略在这里
  15. Java poi 表格居中
  16. Python3简单的爬虫项目 爬取虎牙主播名字 人气
  17. 与华为SIP硬终端(TE40)对接注意事项
  18. 京东登陆界面正则匹配
  19. 在opensuse上安装TL-WDN5200免驱版无线网卡
  20. 冒泡排序图解-Java实现

热门文章

  1. Mac SecureFX 打开时乱码
  2. QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(四)
  3. 相机精度与像素的关系
  4. html电子书软件电脑版,4Easysoft PDF to HTML Converter
  5. delphi百度语音(支持语音识别和语音合成),D7~XE10可用
  6. iOS开发宝典:String用法大全
  7. 微信自定义网页分享链接(可自定义链接 图片 内容介绍)
  8. JD6606S用于USB的PD充电协议IC资料
  9. 编号为1,2,3,4.......n的一群人沿顺时针方向围绕一圈的问题
  10. 联想关闭计算机,如何关闭Lenovo计算机随附的防病毒软件?联想计算机随附的McAfee Antivirus...