BLE--CC2541的入门之OAD

Posted:   2020-04-08

Status:   Completed

Tags :   BLE CC2541 ble OAD

Categories :   CC2541 BLE

Previous:   BLE--CC2541的入门

Next:   BLE--CC2541的入门之加密OAD


OAD

  • OAD配置一定要在工程完毕后进行,工程没有结束前不要配置,如果已经配置了,建议工程完成后重新配置
  • 参考连接

OAD的好处

避免产品升级需要拆开重新下载程序,只需用手机或电脑连接上即可升级

OAD原理

芯片上电后首先运行 BIM。然后 BIM 判断芯片 Flash 中是否存在有效的 Image-B,如果有,跳转到 Image -B 开始运行。如果没有 Image-B,则再判断芯片 Flash 中是否存在Image-A,如果有跳转到 Image- A 处运行,如果没有,则进入 PM3 睡眠状态。

环境要求

硬件

  • CCDebuger
  • CC2541开发板
  • USB Dongle

软件

配置OAD

下载BIM

工程路径

  • 协议栈Projects\ble\util\BIM
  • 编译工程生成BIM_CC254XF256.hex

下载方法

  • 用软件SmartRF Flash Programmer通过CC Debugger把BIM_CC254XF256.hex下载到芯片
  • 选择Erase,program and verify

programer-bim

配置ImageA

新建配置

Project->Edit Configurations->New

  • Based on connfiguration选择CC2541

project-config project-config-new config-OAD-A

选择并编译新配置

  • 确定编译无误

set-OAD-A build

修改配置

opintions

修改compiler

修改C/C++ Compiler配置的Preprocessor选项

  • include directories中添加$PROJ_DIR$\..\..\Profiles\OAD
  • Defind symbols中添加
    1
    2
    3
    4
    
    FEATURE_OAD_BIM
    HAL_IMAGE_A
    FEATURE_OAD
    OAD_KEEP_NV_PAGES
    

compiler-A

修改Build Actions

  • post-build command line中添加
    1
    
    "$PROJ_DIR$\..\..\common\cc2540\cc254x_ubl_pp.bat" "$PROJ_DIR$" "ProdUBL" "$TARGET_DIR$\$TARGET_BNAME$"
    

builde-actions

修改Linker

  • 修改config选项卡,在Linker configuration file的填入
    1
    
    $PROJ_DIR$\..\..\common\CC2540\cc254x_f256_imgA.xcl
    

linker_config-A

  • 修改Output选项卡,取消Override defaul

linker-output

  • 修改Etra Output选项卡,取消Override defaul项,修改Output format项改为simple-code

linker-extra-output

  • 修改Etra Options选项卡,增加Use command line ptions,用来生成.hex文件
    1
    
    -Ointel-extended,2=.hex
    

    linker-extra-options

修改Debugger

  • 修改Texas InstrumentsDownload选项卡,取消Erase flash

Debugger_TI

代码包含

  • 在工程目录profiles找到oad.h,oad_target.c,oad_targe.h三个文件
  • 右键,选择options
  • 取消Exclude from build选项

profiles OAD-opitions exclude

代码整合

  • simpleBlePerpheral.c中包含头文件
    1
    2
    3
    4
    
    #if defined FEATURE_OAD
    #include "oad.h"
    #include "oad_target.h"
    #endif
    
  • SimpleBLEPeripheral_Init函数中添加OAD服务
    1
    2
    3
    
    #if defined FEATURE_OAD
    VOID OADTarget_AddService();                    // OAD Profile
    #endif
    
  • 协议栈源文件中,这些代码是包含的,如果前期开发没有变动这些代码的话,不用更改

OAD-H OAD-service

编译并下载image

  • 编译

build-image

  • 下载

用软件SmartRF Flash Programmer通过CC Debugger把生成的imgae-A的.hex下载到芯片 选择Append and verify 如果下载出现错误先重新下载BIM然后下载image-A,BIM选择 Erase,program and verify,image-A选择Append and verify

program-A

读出芯片内程序

  • 为了生产方便快捷,一次完成程序的出厂下载
  • 选择Read flash into hex-file
  • flah image自定义读出的文件名,以防混淆
  • Perform actions读出芯片内程序
  • 读出的文件可直接选择 Erase,program and verify下载到芯片内,运行结果和先下BIM再下image-A一样

read

配置ImageB

新建配置

Project->Edit Configurations->New

  • Based on connfiguration选择my-OAD-A

config-OAD-B

修改配置

修改compiler

修改C/C++ Compiler配置的Preprocessor选项

  • Defind symbols中把HAL_IMAGE_A修改为HAL_IMAGE_B
    1
    2
    3
    4
    
    FEATURE_OAD_BIM
    HAL_IMAGE_B
    FEATURE_OAD
    OAD_KEEP_NV_PAGES
    

compiler-B

修改Linker

  • 修改config选项卡,修改Linker configuration file内容把$PROJ_DIR$\..\..\common\CC2540\cc254x_f256_imgA.xcl改为
    1
    
    $PROJ_DIR$\..\..\common\CC2540\cc254x_f256_imgB.xcl
    

    linker-config-B

编译

  • 编译

build-image

OAD升级

USB dongle

  • 把USB dongle变成BLE Device Monitor用的CDC Serial Port模式

BLE Device Monitor进行OAD下载升级

  • 给开发板上电
  • 打开BLE Device Monitor软件会自动识别USB dongle
  • 点击Scan scan
  • 扫描到开发板后点击Connect或直接双击设备 connect
  • File->Program(OAD)->On-chip OAD program-oad onchipOAD
  • 可以看到目前Image是运行的A image-A
  • 选择编译出来的ImageB的bin文件,在Projects\ble\SimpleBLEPeripheral\CC2541DB\my-OAD-B\Exe文件内 B-bin
  • 点击start,下载完成后开发板会自己复位 start
  • 重新连接开发板,打开File->Program(OAD)->On-chip OAD
  • 可以看到当前运行是Image是B
  • 这是就可以下载ImageA的bin文件,在Projects\ble\SimpleBLEPeripheral\CC2541DB\my-OAD-A\Exe文件内 image-B
  • 用OAD下载的一定而必须是.bin文件,不可以是.hex文件

OAD版本管理

  • 工程目录TOOLS的bulidConfig.cfg文件 version
  • DOAD_IMAGE_VERSION修改为0x0001
    1
    
    -DOAD_IMAGE_VERSION=0x0001
    
  • 编译
  • 打开OAD下载,可以看到新的版本是1了 version-1