目录

软件架构

开发模型

下图展示 CC2640R2F 支持的两种开发模型。本文讲解都集中在左图,也就是整个 ble 协议栈和应用都工作在一个 CC2640R2F 的单 SOC 解决方案。

SDK 平台

CC2640R2 BLE5.0 开发环境搭建详细讲解了 SDK 的下载、安装。整个 SDK 包含了蓝牙协议、CC2640R2外设、TI-RTO环境、编译链接组件等一系列软件工具集,如下图:

其中:

BLE 软件架构

CC2640R2F 低功耗蓝牙软件环境由以下部分组成:

TI-RTOS 是一个实时的、抢占型的多线程操作系统,利用任务同步运行程序。应用程序和低功耗蓝牙协议栈在 RTOS 中都作为单独的任务实现。低功耗蓝牙协议栈任务具有最高优先级。ICALL 的消息传递机制用于应用程序和协议栈之间的消息交互。

目录结构

默认 SDK 安装位置为: C:\ti\simplelink_cc2640r2_sdk_x_xx_xx_xx

BLE5.0SDK 路径 描述
docs 以上 SDK 平台所有 TI-RTOS、蓝牙开发、DriveLib 全部相关的文档
examples BLE5.0、BLE4.2、TI-RTOS 操作系统 Sys/bios 相关驱动、CC2640R2F 外设驱动相关例程
Kernel TI-RTOS 内核源码、组件
source BLE4.2.BLE5.0 协议栈相关代码、库文件,TI-RTOS 相关驱动,软件中间件
tools 类似 BTool 相关的工具

Examples

examples\floder 包含 BLE5-Stack、TI-RTOS 内核和 TI-RTOS 驱动程序的示例源文件。支持 SimpleLink CC2640R2 SDK 示例的所有源代码可以在 examples\rtos\CC2640R2_LAUNCHXL\ 中找到。每个产品的示例可以在其各自的文件夹中找到。

Exampls 描述
ble5stack BLE5.0 相关全部例程 例如工作外设相关的 simple_peripherl
blestack BLE4.2 相关全部例程 例如工作外设相关的 simple_peripherl
demos 工程模板,参考它实现你的产品工程
drivers CC2640R2F IO、Uart、SPI、ADC 等常用外设编程
sysbios 内核相关的时钟、信号量、内存管理等例程

IAR 示例作为 .eww 项目文件直接双击使用的,而 CCS 项目是导入的。

源码

source\ti\ folder 包含着 BLE5-Stack、TI-RTOS 驱动程序和各种共享模块的库和源文件。它们如 CC2640R2F SDK’s source\ti\ directory 所示,可以在各自的文件夹中找到。

工程管理和编译选项

熟悉TI早期的 BLE4.0/4.1 CC254x 系列蓝牙协议栈的开发者,对 OSAL 一定不陌生。一个简单任务管理的操作系统抽象层完成 8051 内核对整个蓝牙协议栈的裸机实现。对于升级 Cortex-M3 的 CC2640R2F 和基于 TI-RTOS 的实时操作系统环境,TI 保留了原来的 OSAL 对协议栈分层任务管理,保持了 CC254x/CC2640 蓝牙协议栈的统一维护。基于这种兼容设计, TI 从工程管理区分了 OSAL 管理的 Stack 以及基于 TI-RTOS 的 App。

如上图所示打开 simple_peripheral 工作空间,cc264042lp_app 和 cc2640lp_stack 分别对应基于 TI-RTOS 的应用工程和基于 OSAL 的协议栈工程。

App 和 Stack 下面又对应着不同的编译置选项,这些编译选项对应着不同的编译、链接命令等。

接下来详细理解对应 FlashROMFlashROM_StackLibrary。FlashROM 很好理解,前面的软件架构->存储系统已经详细了解过了。128KB Flash 和 128KB ROM 都服务于应用和协议栈。FLASH_ROM 表示一部分代码在 Flash,另一部分链接 ROM 里面。可以不链接 ROM 代码直接将整个代码发 FLash 方便调试,但是这里的 _StackLibrary 要晦涩难懂的多, 该选项是 TI 优化 Flash 空间的结果。

区别于 CC2640 和 CC2640R2F 的 SDK,CC2640 通过将 App 和 Stack 分别编译成两个可执行文件( FLash 镜像文件)分别放在 FLash 首尾区域。

注意:注意以上 FLash 映射图,App 和 Stack 的代码空间并不连续,分别在 128KB Flash 的首尾。

CC2640R2F 增加配置选项尝试把 Stack 编译生成驱动库文件供 App 链接,也就是 Stack 编译后不再单独生成一个 Flash 镜像,而是一个 *.a 的库文件供 App 工程链接,最后生成一个可执行文件。

接下来详细对比这两种方式编译选项。

分离镜像配置 ( FlashROM )

与之前 CC2640 的 BLE-Stack 版本一样,应用程序和协议栈以两个单独的项目分别生成两个单独的镜像。这两个镜像文件占据单独的、不重叠的 Flash 页面。分离镜像的配置在某些场景中是有意义的,例如在 OAD 中独立管理应用程序或协议栈镜像下载。

分离镜像项目具有以下特性:

协议栈编译成库文件配置( FlashROM_StackLibrary )

协议栈可以编译成静态库方式链接到应用程序,编译成库的协议栈可在编译选项上加 StackLibrary 来标识。编译成静态链接库的协议栈和应用程序可以共享连续的 Flash 页面,因此使用此编译选项可以为链接器提供更多的 Flash 空间优化。尽管这种编译配置节省了 Flash 空间,但是应用程序和协议栈的镜像文件不会分离。

协议栈库选项具有以下属性:

注意:可能还是很多童鞋不能理解为什么这里节约了 FLash 空间?这个和 Flash 的 Page 擦出写入有关系,如果编译成两个可执行文件方式,协议栈烧写到 FLash 后占据了某个 Page (4KB)的 1KB,应用程序的镜像文件再次烧写的时候剩下的 3KB 是不能再利用的。

项目的编译配置

SimpleLink CC2640R2 SDK 的 BLE5-Stack 中的示例应用程序支持多个编译配置,方便支持使用上述协议栈的编译类型。其他编译配置的创建是来支持开箱即用的 RCOSC 或 OAD 等功能。下表给出了 BLE5-Stack 中发现的编译配置及其彼此兼容性的摘要。

工程类型 工程编译配置 描述
App FlashROM 将应用独立编译成一个可执行文件,该配置选型下对应的Stack工程也只能选择 FlashRom 方式,并且需要先下载 Stack 再下载 App
App FlashROM_StackLibrary 配合使用 Stack 的 FlashROM_Library 方式,同样需要先将 Stack 编译成一个静态库,然后再编译 App 连接协议栈库文件
App FlashROM_StackLibrary_RCOSC 基于 FlashROM_Library 方式,使用内部 RC 代替外部低速晶振
App FlashROM_OAD_Offchip 基于 FlashROM 配置选型方式的外部 Flash 无线固件升级
Stack FlashROM 配合 App 的 FalshROM 编译选项,将 Stack 独立编译成一个可执行文件下载到 Flash,需要先下载 Stack 再下载 App
Stack FlashROM_Library 配合 App 的 FlashROM_Library 编译选项,将协议栈编译生成一个库文件。

BLE5.0 的项目工程还并不完整,默认都支持了库文件编译方式,如果你需要更改工作空间到独立镜像编译方式,可以按照以下方式分别将协议栈和应用程序更改到独立镜像编译方式。

更改协议栈工程从库文件选项编译到独立镜像选项(IAR)

  1. 选择需要编译的 Stack Project
    • 建议创建一个新的工程编译配置:Project –> Edit Configurations –>选择 New 并为编译配置提供一个新的名称。
  2. 打开项目属性
    • 右键单击 Project –> Options
  3. 选择 Options –> Output 选项

    • Output File 选项选择 Executable

    注意:这将启用调试器设置,并且成为模拟器的默认设置。

  4. 转到 C/C++ Compiler Options –> Preprocessor 选项
    • 从 Defined symbols 列表中删除 STACK_LIBRARY 符号。
  5. 转到 Build Actions

    • 在 Post Build 步骤中添加 Frontier 作为边界工具:
      $TOOLS_BLE_DIR$/frontier/frontier.exe iar "$PROJ_DIR$/$CONFIG_NAME$/List/$TARGET_BNAME$.map" "$PROJ_DIR$/../config/iar_boundary.bdef" "$PROJ_DIR$/../config/iar_boundary.xcl

    注意:该工具会将协议栈入口地址的信息交给应用程序。

  6. 转到 Linker Options –> Extra Options 选项

    • 选择 Use command line options
    • 将以下内容添加到 Command line options :(每行一个)窗口:
      -f $PROJ_DIR$/../config/lib_linker.cmd
  7. 转到 Debugger 选项
    根据您使用的调试器重新配置调试器设置,TI 的开发板通常使用 TI XDS110 仿真器调试器。

更改应用程序工程从库链接方式到独立镜像选项

  1. 选择需要编译的 Application Project

    • 建议创建一个新的工程编译配置:
      Project –> Edit Configurations –>选择 New 并为编译配置起一个新的名称。
  2. 编译时去掉 StackLibrary IDE 文件夹。

    • 右键单击 StackLibrary -> Options...
    • 勾选 Exclude from build 然后选择 OK
  3. 打开工程属性

    • 右键单击 Project –> Options
  4. 转到 C/C++ Compiler Options –> Preprocessor 选项

    • Defined symbols 列表中删除定义的 STACK_LIBRARY 符号。
  5. 转到 Linker Options –> Config 选项卡

    • 使用 Linker configuration file 这个 .icf 链接器文件:
      $SRC_BLE_DIR$/common/cc26xx/iar/cc26xx_app.icf
    • Configuration file symbol definitions 中删除 FLASH_ROM_BUILD = 2 :(每行一个)
  6. 转到 Linker Options –> Library 选项卡

    • Additional libraries 中删除以下内容:(每行一个)窗口:
      $PROJ_DIR$\..\config\ble_r2.symbols
    • 将以下内容添加到 Additional libraries 中:(每行一个)窗口:
      $ROM_DIR$\ble_rom_releases\cc26xx_r2\Final_Release\common_r2.symbols
  7. 转到 Linker Options –> Extra Options 选项卡
    • Command line options 中删除以下选项:(每行一个)窗口:
      -f $PROJ_DIR$/../config/lib_linker.cmd

加入我们

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

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