本文档让你能够在TI的CC26xx上使用Contiki。该平台支持多个评估板:
能够兼容CC26xx或CC13xx评估模块的SmartRF 06评估板(相关文件和驱动程序在srf06/
路径下)
sensortag/cc2650
路径下)sensortag/cc1350
路径下)launchpad/cc2650
路径下)launchpad/cc1310
路径下)launchpad/cc1350
路径下)两个平台通用的CPU代码在$(CONTIKI)/cpu/cc26xx-cc13xx
路径下。
该端口是在CC2650s上开发和测试的,但是也能在CC2630上工作。欢迎提供这两种芯片的错误报告。CC2630以及CC13XX芯片是没有BLE功能的。该端口只适用于7x7mm封装的芯片。
在使用本文档之前您需要对如何使用命令行和在UNIX系列操作系统上执行基本管理任务有基本的了解。
该平台具有以下主要功能:
在硬件支持方面,已经实现了以下驱动程序:
您需要使用的端口:
TI的CC26xxware源文件。当您复制Contiki时,正确的版本会作为子模块自动安装。
TI的CC13xxware源文件。当您复制Contiki时,正确的版本会作为子模块自动安装。
Contiki可以使用附带的cc2538-bsl脚本通过串口自动将固件下载到节点。
注意,通过串口下载不适用于Sensortag,这时您可以使用TI的SmartRF Flash编程器。
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.2.1 20151202 (release) [ARM/embedded-5-branch revision 231848]
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
srecord(http://srecord.sourceforge.net/)
该端口有三个例程:
想详细了解这三个例程你可以查看它们的readme文件。
建议你从examples/cc26xx/
下面的cc26xx-demo
开始你的学习。这是一个非常简单的例子,可以帮助您熟悉硬件和环境。该示例可在Sensortag和SmartRF06 EB上运行。
严格来说,要想编译它,你需要运行make TARGET=srf06-cc26xx BOARD=srf06/cc26xx
。但是在该示例目录下包含一个Makefile.target自动包含了该目录,并且指定了正确的TARGET=
参数,同样将BOARD=
环境变量默认为srf06/cc26xx
(SmartRF06 EB + CC26XXEM)。所以对于cc26xx目录下的示例,以及使用SmartRF06 EB时,您只需要运行make就行了。
BOARD
变量的其他编译选项有:
BOARD=srf06/cc26xx
BOARD=srf06/cc13xx
BOARD=sensortag/cc2650
BOARD=sensortag/cc1350
BOARD=launchpad/cc2650
BOARD=launchpad/cc1310
BOARD=launchpad/cc1350
如果BOARD
变量没有设置,将会编译用于Srf06 CC26XXEM的镜像文件。
如果例程正在编译,这个时候你想切换平台编译,在你切换平台编译之前必须执行make clean
,否则将导致链接器错误。
至于cc26xx-demo
例程在做什么你可以查看它的readme文件详细了解。
如果你需要生成程序编译的汇编列表,请运行make cc26xx-demo.lst
。汇编列表对你调试或优化应用程序代码很有用。要在汇编列表中插入C源代码,您需要通过添加CFLAGS += -g
到项目的Makefile中使编译器包含调试信息然后运行make clean cc26xx-demo.lst
重新编译。
在Windows上你可以使用TI的SmartRF Flash Programmer(FLASH-PROGRAMMER-2)对设备进行编程。
在Linux和OS X上,您可以通过芯片的串口ROM bootloader对设备进行编程。当然你需要满足以下条件:
contiki-conf.h
中定义宏ROM_BOOTLOADER_ENABLE
为1。您需要手动启用bootloader,并使用.upload
来编译目标文件(例如对于cc26xx-demo就make cc26xx-demo.upload
)。在SmartRF06上,您需要按住select按钮来复位EM(EM RESET按钮)进而启动bootloader。对于LaunchPad,您需要按住BTN_1
重置芯片来启动bootloader。你可以修改boar.h
中的宏SET_CCFG_BL_CONFIG_BL_LEVEL
和SET_CCFG_BL_CONFIG_BL_PIN_NUMBER
来更改引脚及其相应的电平(高/低),进而触发bootLoader模式。
串口下载器脚本会自动选择第一个可用的串行端口。但是这个端口可能不是连接我们开发板的端口,这时你可以通过定义脚本中的PORT
参数来强制脚本使用特定端口。例如make cc26xx-demo.upload PORT=/dev/tty.usbserial
。
有关串口bootLoader的更多信息,请参阅tools/cc2538-bsl
目录下的README
。
开发平台可以用作边界路由器(基于UART的SLIP)。在目录examples/ipv6/rpl-border-router
下的示例代码就是做这件事的。此示例定义了以下内容:
#ifndef UIP_CONF_BUFFER_SIZE
#define UIP_CONF_BUFFER_SIZE 140
#endif
#ifndef UIP_CONF_RECEIVE_WINDOW
#define UIP_CONF_RECEIVE_WINDOW 60
#endif
对于用作边界路由器,CC26xx端口比其他平台具有更高的功能。因此,在编译示例之前,建议删除上面的两个配置指令。这将允许平台默认值生效,从而提高性能和稳定性。
您还需要根据需要定义RF_CORE_CONF_CHANNEL
来选择正确的通道。
开发平台还可以基于UART作为串口协议广播,与6lbr一起使用。
与边界路由器配置类似,您需要删除限制uIP缓冲区大小的宏定义。即在examples/ipv6/slip-radio/project-conf.h
路径下删除下面两行。
#undef UIP_CONF_BUFFER_SIZE
#define UIP_CONF_BUFFER_SIZE 140
不要忘记根据需要定义RF_CORE_CONF_CHANNEL
来选择正确的通道。
在Contiki和CC26xxware中都有一个名为timer.c
的文件。我们现在的配置是不使用CC26xxware中的timer.c
文件。但是,如果在某些您需要使用它的时候,要按住以下方式对它进行重命名:
从cpu/cc26xx/lib/cc26xxware/driverlib/timer.c
到driverlib-timer.c
在Sensortag中有两种可以进行调试输出(printf等)的方法。
BOARD_CONF_DEBUGGER_DEVPACK
为1。保证调试器Devpack在修订后的1.2.0版本上运行。board.h
,以便正确设置RX和TX DIO映射。(TX映射到IOID_28
,RX映射到IOID_29
)。BOARD_CONF_DEBUGGER_DEVPACK
为0。
该平台支持两种操作模式,只要芯片也具有相应的功能。如果没有特殊设置平台将默认
为CC13xx设备的Sub-GHz模式而不是IEEE模式。要强制设置为IEEE模式,您需要将下面的宏添加到您的project-conf.h
。
#define CC13XX_CONF_PROP_MODE 0
该平台充分利用CC26xx的省电功能。以下简单描述了它是如何工作的:
我们不使用预定义的功率配置文件(例如,如TRM中提到的或者像我们在CC2538上使用的LPM1,LPM2等一样)。每次进入低功耗运行时,我们要么使CM3休眠或者深度睡眠。深度休眠是高度可配置的:LPM引擎允许其他代码模块注册自己来接受通知以及允许配置为低功耗操作。有了这些功能配置,模块可以完全禁止深度睡眠,或者要求电源域保持供电等等。LPM引擎将尽可能关闭CC26xx组件,同时满足通过注册模块来设置的所有限制。
要确定要使用哪种电源模式,请遵循以下逻辑:
lpm.[ch]
)中的LPM_MODE_MAX_SUPPORTED宏,可以对可用的最深低功耗模式进行硬编码。因此,可以完全禁止深度睡眠。STANDBY_MIN_DURATION
设置的还低,芯片会进入深度休眠。当芯片进入深度睡眠时:
芯片将因以下事件之一从低功耗模式下唤醒:
文章所有代码、工具、文档开源。加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5.0。