Other Parts Discussed in Post: LP-EM-CC2340R5, LP-XDS110, CC2340R5, SYSCONFIG, UNIFLASH, SYSBIOS

作者:Island Wei

摘要

    这篇博客的目的是引导第一次接触 TI 产品且第一次接触 CC2340 的用户在 CC2340 量产之前导入、调试运行一个名为 Project_Zero 的小项目。目的是帮助您快速认识 CC2340 芯片以及TI 的开发软件。如果您已经使用过 TI的产品,并且熟悉了 Code Composer StudioCCS 的使用,那么此篇博客的很多内容对于您来说可能过于基础。

    Project_Zero的内容是将作为CC2340 LaunchPad 上的 LED 灯注册给 Bluetooth 协议栈作为一种可以被 Bluetooth 客户端访问的 GATT 服务(GATT Service),并且将 Red LED Green LED 设置为 Bluetooth 服务的两个属性(Characteristic)。通过手机上安装的 TI SimpleLinkTM Starter 启动手机端的 Bluetooth 进行扫描、连接 CC2340,并在连接之后通过 Bluetooth LED Service 进行读写操作来实现 LED 灯的状态读取和开关控制功能。

    注:在产品正式发布之前,SDK,工具等支持列表会有一些限制,本文也会提及。

    此教程需要您具有 C/C++ 语言编程基础,但并不要求您具有使用 CCS 这个 IDE 进行开发的经验。本文包括如下几个部分:

  1. CC2340 开发环境的搭建
  2. 如何新建一个基于 Free-RTOS CCS Project
  3. 导入并调试 Project_Zero 项目
  4. Project_Zero 的使用

CC2340 简介

    CC2340 TI SimpleLinkTm 系列的一款超低功耗无线通信 MCU,集成了低功耗蓝牙,ZigBee 和私有 2.4GHz 协议的无线功能。 CC2340 以较高的性价比提供优质的射频和功耗性的同时,提供了丰富的外设资源,以及最高512kB Flash36kB SRAM,致力于用更低的价格(注:市场参考价(1ku)低至 0.79 美元)为用户提供在智能家居、医疗、工业控制和汽车等领域的无线通信应用平台

CC2340 具有业内出色的待机电流,低于700nA,比市场平均低约40%,与此同时输出功率高达+8 dBm同时还支持工程师扩展射频性能和连接范围。此外,CC2340系列具有集成式射频巴伦(Balun),支持使用更少的外部元件实现更简单的设计,从而节省成本。

    CC2340 的待机电流的降低有助于延长电池寿命,可将无线应用(如电子货架标签系统和轮胎压力监测系统)纽扣电池的寿命延长至最高10年。CC2340 系列还具有 - 40ºC 125ºC 的工作温度范围,无论是应用于工业传感器和医学实验室,还是电动汽车充电器或智能仪表等室外环境中,都有助于确保稳定的连接,另外,CC2340系列产品也提供车规Q100的版本更多信息,请登录 TI.com 搜索 “CC2340” 关键字搜索获得,或访问:www.ti.com.cn/cc2340 进行获取。

CC2340 的资源和申请方式

开发平台,文档和SDK申请方法

在正式发布产品之前,您需要通过如下链接申请相应的文档,如果需要协助,请联系TI的销售,代理商或者线上支持系统

硬件平台

  • LP-EM-CC2340R5 LaunchPad

  • LP-XDS110

软件开发套件及工具

  • CCS v12.0 1
  • TI CLANG Compiler
  • CC23XX SDK
  • CC2340R5 Device Support
  • CC2340Rx SysConfig
  • Free-RTOSv202104.00

    当获得下载权限后,请在 SecureSoftware 中查找获得的授权软件。我们强烈建议下载其中的 doc_simplelink_cc23xx_sdk_6_20_00_02_eng.zip

Task1 — 搭建开发环境

    注:此步骤依赖于获得 CC2340 的开发套件支持,请一定在获得授权之后进行下面步骤。如果您的电脑已经安装了低于 11.0 CCS 版本,我们建议您卸载并重新安装最新版本的 CCS

下载并安装 CCS

    CCS TI 自己基于 Eclipse 开发的 IDE, 客户可以免费使用它进行 TI 产品的软件开发以及调试工作。更多详细资料请参考:CCSTUDIO CCS 下载链接: CCSTUDIO Download 。请选择 v12x的最新版本,安装时请全部按照默认进行。

在安装过程中会让您选择需要安装的组件(Component)和 Debug软件支持(Install Debug Probes)。因为CC23XX 还没有正式发布,所以在选择组件时并不能在 CCS 的组件库中找到 CC23XX 对应的组件,这里请直接选择 SimpleLinkTm CC13xx and CC26xx Wireless MCUs 组件。

至于调试工具,CC2340 默认使用 Spectrum Digital Probes and Boards,当然您也可以勾选其他几个项目。

下载并添加 CC2340的设备支持

https://www.ti.com/securesoftware/docs/securesoftware 中查看您获得授权的软件列表,下载对应开发平台和对应版本的 CC2340 device support 软件。

注:Device support 的版本和CCS 版本有关。device support 0.01.08.221 版本对应 CCS 12.0device support 0.01.10.221版本对应 CCS 12.1

下载并解压该压缩包,并将解压出的ccs_base 文件夹复制到 ${CCS_INSTALL_DIR}\ccs,对重复文件进行替换即可。

下载并安装CC23XX SDK

    下载链接: simplelink_cc23xx_sdk_6_30_00_20_eng.exe

下载并安装对应开发环境和版本的 Sysconfig

    下载链接:https://www.ti.com/securesoftware/docs/securesoftware

下载对应版本Free-RTOS

    下载链接:Free-RTOS

下载并安装 TI Clang

    下载链接:ARM-CGT-CLANG

使能改动

1. 打开 CCS 并创建或打开 CC2340 Workspace

    在C:\Users\xxx\ 目录下新建文件夹,命名为 cc2340_workspace,并在启动 CCS 的时候选择该文件夹。

2. 在工具栏选择 Window à Preference à Products, Product Discovery Path 中取消选择C:/ti/ccs1210,并点击 Apply and Close

3. 打开 ${CCS_INSTALL_DIR}\ccs\ccs_base\common\targetdb 目录下的 timestamp 文件,并对其进行任意的修改(此步骤是为了让下一步重启 CCS 的时候,CCS 重新扫描ccs_base 下的 device 资源)。

4. 重启 CCS 使修改有效。

: 如果在后续项目制作过程中仍不能使用 CC23XX SDK,那么请检查您的资源下载路径,并重复  1~3 步骤。

Task 2 — 新建CCS 项目

    首先,因为往往一个项目需要添加的依赖项目很多,而且需要手动添加到 Project Properties 中,我们并不建议从零开始新建 CCS项目。我们更建议的做法是导入 CC2340 SDK $(CCS_INSTALL_DIR)\examples\rtos\LP_EM_CC2340R5\drivers\empty 项目,或选择与您项目比较契合的其他 example project并在其基础上进行修改。但如果你坚持这么做,那么在这里我将介绍如何从新建一个 CCS 项目。

配置Linker Command文件

首先,需要给一个新建的 CCS Project 配置Linker command File。在工具栏中,选择Project à Properties à General à Project à Linker command file à Browse à Choose cc23x0r5.cmd 作为默认 cmd 文件。

    如果你需要对芯片的 Memory Map 等进行深度修改,可以修改 Free-RTOS cmd 文件来指定 stackheapflash 等参数设置。

添加 SDK 路径

    在工具栏的 Project --> Project Properties -->  Resource  --> Linked Resource  --> New 按图示添加 SDK 的路径。

添加 Free-RTOS 路径

    由于 CC2340RX 系列芯片不再支持 TI-RTOS,仅支持 Free-RTOS,且CC2340RX SDK 不再集成 RTOS,所以在新建一个使用 Free-RTOS CCS 项目时,需要给项目添加 Free-RTOS 的路径。

  1. 工具栏选择Project-->Properties --> Resource --> Linked Resource --> New...

为项目添加 Free-RTOS Dependence

    如果您的 workspace 中已经有了 freertos_builds_cc23x0_release_ticlang 项目,请在工具栏选择Project --> Properties -->Build -->Add...  --> freertos_builds_cc23x0_release_ticlang

如果您的 workspace 中还没有 freertos_builds_cc23x0_release_ticlang 项目,那么请在 SDK 中找到该项目并手动导入到 workspace 中(导入 CCS Project 的操作请参考 Task 3)。

freertos_builds_cc23x0_release_ticlang 的路径在$(CCS_INSTALL_DIR)\source\ti\ble5stack_flash

\common\cc26xx\freertos\release\ticlang当您选择了正确的 freertos_builds_cc23x0_release_ticlang,那么在 Project --> Properties --> General --> Products 中会正确的显示 SDK,且在 Project --> Project Properties --> Resource --> Linked Resource 中会自动添加 SDK 的路径。

此外,需要手动添加 SysConfig。点击右侧 Add... 并且按下图进行选择,添加即可

添加库 (.lib .a) 路径

    如果你需要使用某些库(.lib .a)请在 Project  --> Properties  --> Build  --> Arm Linker  --> File Search Path 中以同样的方式添加这些库。

添加项目路径

    在工具栏 Project --> Project Properties --> Resource --> Linked Resource 中添加PROJECT_LOC ,使得在应用程序中的头文件可以被正确的搜索到。

添加头文件和 Free-RTOS 路径

    在工具栏按照 Project -->Properties --> Build --> Arm Compiler --> Include Options点击菜单页面右上角的 ${FREERTOS_INSTALL_DIR} 添加到Include Options

添加目标配置文件

我们在编写应用程序的时候,不可避免会出现需要调试的问题。TI 提供了非常丰富的调试方式和硬件软件接口,需要我们在新建项目的时候加载这样的目标配置文件,来让 CCS 选择正确可用的 Target Configuration。在工具栏 View --> Target Configuration --> 点击 New Target Configuration File。在 Connection 栏选择 Texas Instrument XDS110 USB Debug Probe,然后在Board or Device 栏选择 CC2340。随后点击右边的 save 按钮即可。

Task 3 — 导入并开始调试 Project_Zero 项目

Project_Zero 使用 TI Bluetooth Low Energy 协议栈,通过 GATT实现蓝牙远程控制LaunchPad 上的 LED 灯,查询 LED 灯的状态。在此示例中,我们使用智能手机上的 TI SimpleLinkTm Starter 去扫描设备、连接设备、发现 CC2340 上部署的 GATT服务。

    注:如果您使用的是 iOS 设备,请再 AppStore 内搜索 TI SimpleLinkTM Starter。如果您使用的是按安卓设备,可以直接前往 Starter安装包 进行下载。

此博客已经为您准备好了可用的 Project_Zero ,请您下载压缩包。到这里您已经拥有了开发 CC2340 的全部材料,接下来我们开始介绍如何使用 CCS 导入,烧录代码 和 调试工程。

导入 CCS 项目

    首先,打开 CCS 并且选择之前建立好的 cc2340_workspace,然后在工具栏选择 File --> Import 来导入项目,选择导入的项目类型为 CCS Project。找到解压缩后的Project_Zero 项目,然后

点击 Next,在弹出的画面中点击 Browse 来找到解压后的 Project_Zero 项目,选择该文件夹,CCS 将自动扫描所有该目录以下的所有 CCS 项目,此处只有一个 Project_Zero 项目,选择 Project_Zero 点击 Finish 导入即可。

    需要注意的是,在导入窗口下方,有两个选项。一个是 Automatically import referenced project found in same search directory,他的作用是把 Project_Zero 的依赖也一起导入到 workspace 当中,我们建议将其勾选;另一个是 Copy projects into workspace,这个按钮将会复制项目到当前的 workspace 当中,有利于您项目的数据安全,起到备份的作用,我们建议将其勾选。

当成功导入 Project_Zero 后,同时导入了 freertos_builds_cc23x0_release_ticlang 这个 dependency 项目。

编译项目

    Project Explore 中单击 Project_Zero,然后点击 进行编译。注意,编译拥有两种目的,一个是编译出 debug 版本,一个是编译出 release 版本。release 版本编译的项目体积会比 debug 版本小。

编译结果将在 Console 中展示:

如果出现一个编译错误,显示无法找到 vApplicationStackOverflowHook。可以使用 Ctrl+H 进行查找,如果发现是由于 configCHECK_FOR_STACK_OVERFLOW 2,是因为Project_Zero 中并没有实现 vApplicationStackOverflowHook 这个函数。

当然,您可以将 configCHECK_FOR_STACK_OVERFLOW 改为 0 来使得编译通过,当设置为 0 则不适用  Stack Overflow Check功能。但是我们建议您打开 Stack Overflow Check 功能,请在 .sysconfig 文件的 Free-RTOS中将 configCHECK_FOR_STACK_OVERFLOW 设为 1 2(关于 configCHECK_FOR_STACK_OVERFLOW 的设置偏好,详细请参考Stack Overflow Check),并在 main_freertos.c 中添加 vApplicationStackOverflowHook 函数的实现。此处简单实现为:

再次编译,则会通过。编译完成后,您可以在项目的根目录发现生成了 Release 文件夹,里面包含了编译的所有产生结果,包括 .out 可执行文件,可以使用 Uniflash 直接烧录的 .hex 文件,可以查看存储情况的 .map文件,makefile等等。

烧录、调试

在一个新的 CC2340 LaunchPad 上,我们无法直接通过 Uniflash 软件向 LanuchPad 烧写 hex 文件,需要先烧录一个准备好的 Target Configuration 文件。使用 CCS 也可以进行烧录,这里我们展示的是使用 CCS 对项目及逆行调试的步骤。

首先,让我们点击工具栏最右边按钮,进入 CCS Debug 页面。

找到 Project_Zero 中的 CC2340R5.ccxml 文件,右键并选择 Launch Selected Configuration。如果在 Launch Configuration 时遇到以下 Error-260 的报错,那么请先连接 CC2340 LaunchPad 到您的电脑。

在 Target Configuration 配置好后,应该在 Console 下显示如下,并且在 Debug 框图中显示:

    单击 Texas Instruments XDS110 USB Debug Probe/Cortex_M0P (Disconnected: Unknown) ,随后在工具栏的 Scripts --> CC23xx --> Program Default Ccfg XDS110 模拟器进行 Debug 配置。配置成功后,将在 Console 框中显示:

此时调试的工具 已经配置完成,就可以进行设备连接和烧录程序了。点击工具栏中的连接目标设备,完成后将在 Console 中显示如下:

再次点击 Texas Instruments XDS110 USB Debug Probe ,并点击工具栏中的 Load 按钮,选择 Project_Zero 的 .out 文件,则可以进行烧录。

烧录完成后,程序将自动开始运行(或运行到您添加的断点处),使用 TI SimpleLinkTM 进行扫描可以看到有名为 Project_Zero的设备正在发起 BLE 广播:

添加断点

    在程序开始运行之后,可以在 CCS Debug 界面中添加断点。添加方式时鼠标双击行号左边的蓝色区域。由于 Cortex M0P 内核的限制,CC2340 只能使用1个断点。同样,双击断点可以取消此断点。

Task4 — 完成 LED 灯的状态检查和控制

    在这里为了展示 BLEService 的搭建,我们并没有使用 SIG Assigned Numbers 里规定 LED Service UUIDUniversally Unique Identifier),而是为 LaunchPad 上的 LED 自定义了 UUID,所以在除了 TI SimpleLinkTM Starter 作为客户端发起服务发现(GATT Service Discovery)时,使用其他软件(如 LightBluenrf Connect)并不能显示 LED Service 而是显示 Unknown Service

    这里我不会涉及过多的代码细节和BLE 协议栈的基础知识,您需要知道的是在 Project_Zero 启动之后,将会进行广播(Advertising)表明自己是可扫描可连接的(Scannable and Connectable)。如果您想要知道如何添加自己定义的 Service Characteristics 可以参考 Project_Zero 项目中的 led_service.c led_service.h。同时,如果您希望更改 BLE 设备名称,请打开 Project_Zero SysConfig BLE à General Configuration 中进行修改再次编译、烧录程序即可。

状态检查

    当智能手机打开了蓝牙和 TI SimpleLinkTM Starter 之后,将自动开始扫描(Scan),来接受周边设备发送的广播数据包,并且通过 Starter 显示如下(可能扫描到的设备名称和类别因环境而变化)。正常情况,您会在列表中找设备名为 Project_Zero的设备,此设备就是 CC2340 LaunchPad。如果不能找到 Prioject_Zero 设备,请检查您的项目有没有被正确烧录且运行。

    点击Project_Zero --> Service Explore 便可以使用手机去发现 CC2340 LaunchPad 上的 BLE 设备的功能。在 BLE 的知识背景中,这些所谓 BLE 功能被称为服务(Generic Attribute Service, GATT Service),每个服务都有自己的不同子功能,这些子功能被称为属性(Characteristic)。

LED 控制

    点击 0 TI Project Zero LED 0 State 这个属性,再点击 Read characteristic 便可以查询 LaunchPad Red LED 灯的状态,0x00 表示 关闭,0x01 表示打开。

点击 Write w/resoponse characteristic 并填入 0x01,则可以打开 CC2340 LaunchPad 上的 Red LED 灯。同理,填写 0x00 可以关闭 Red LED 灯。对 1 – TI Project Zero LED 1 State 做同样的操作即可打开和关闭 Green LED 灯。

附录

关于 TI-RTOS Free-RTOS 的转换

1. 在为应用程序创建 Task CC2340 平台使用 Free-RTOS 接口,不再使用 TI-RTOS 的接口。

2. 启动RTOS 的核心调度方式更改

    不再使用 BIOS_start() 使能系统调度,而是使用 vTaskStartScheduler()

3. 使用Free-RTOS mqueue 模块代替 TI-RTOS Event模块

    使用 mq_receive()代替Event_pend()头文件从 <Queue.h> 变为 <mqueue.h>.

4. 因不再使用 TI-RTOS,所以在项目中应删除所有 #include <ti/sysbios/knl/xxx> 头文件,并 #include <FreeRTOS.h>

关于TI-BLE 协议栈

: 正式版本 SDKfeature 支持,请参考发布版本 SDK Release 注。

ICALLIndirect Call)模块

    TI BLE SDK 使用 ICALL 模块实现用户应用(APP) SDK 的分离、 APP SDK 之间的消息分发等功能。在您的 APP 中,需要在其他所有 APP API 调用之前使用 ICall_init() 初始化模块,并且调用 ICall_createRemoteTasks()  来使能外部 image 的程序。

    请在您为应用创建的Task起始调用 ICall_registerApp(); 将此 Task 注册给 ICALL 模块,使 ICALL 模块获得此应用Task Handle,从而正确的将协议栈的事件和消息发送给此应用。随后,请调用 Util_constructQueue() 为应用 Task 创建消息队列用于接收其他 Task 发送的消息。

不支持的功能列表

  • 不支持 OAD Over the air Update
  • 周期性广播(Periodic Advertising
  • 不支持 2M Codec PHY

不支持的 API 列表

    ${SDK_INSTALL_DIR}/source/ti/ 目录下,有ble5stack/ble5stack_flash/ble5Stack 是协议栈在 RAM 中的设计,ble5Stack_flash 是代码放在 Flash 中的设计,目前 CC2340 使用的协议栈是 ble5Stack_flash

上图中的这些 API 6.30.00.20 版本的 SDK目前还不支持,所以在初始化 GATT Server Project_Zero项目中调用 GATT_InitClient() 来初始化 GATT 模块。

总结

感谢您能看到这里,以上就是在 CC2340 正式发布之前您如何使用 TI 的软件开发套件进行 CC2340 的开发以及,我们完成了开发环境的搭建,尝试了新建带有 Free-RTOS CCS Project,并且完成了 Project_Zero 项目的导入、编译、调试任务。

相信此文档可以对您基于 CC2340 的开发上有一定的帮助和引导作用。如有任何问题,也可以参见e2eChina 论坛。

Anonymous