CC2530, 各种智能家居通信技术比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/antkillerfarm/article/details/51433747

http://antkillerfarm.github.io/

CC2530配置红外载波

CC2530是德州仪器公司推出的用于物联网领域的基于8051架构的芯片,支持Zigbee、红外等多种无线通讯方式。本文仅对红外相关的寄存器配置做一个简单说明。

1.配置时钟

配置时钟需要配置CLKCONCMD寄存器。但是需要注意的是OSC、TICKSPD和CLKSPD存在就低不就高的特点,所以如果稍有不慎,最终Timer输出的频率就不正确了。

2.配置pin复用

pin复用分为3个级别:

1)是GPIO,还是外设?(使用PnSEL选择。)

2)外设布局。(为了方便使用,每个外设都有两套布局,可用PERCFG选择。)

3)外设复用选择。(如果有两个外设,在第2步之后,仍然共用1个pin,则用P2DIR选择究竟用谁。注意只有P0的外设可以选,P1是不行的。)

3.配置IR载波

这一步主要是根据载波频率计算相关寄存器的值,主要是TxCCn(其中x表示Timer x,n表示Channel n)的值。

1) 计算Timer 3的值,以38KHz载波为为例:

32000000 / 38000 = 842.1053只是计量单位变为载波周期而已。

这个值是无法直接用8位的寄存器表示的,因此需要首先4分频,也就是

842.1053 = 4 * 210.5263

所以T3CC0=211,如果需要占空比50%的载波的话,T3CC1=105。

这样实际生成的载波频率为:

32000000 / 4 / 211 = 37914.7

2)计算Timer 1的值。

这里需要注意的是,这里T1CCn中配置的值,不再以Timer tick为单位,而是以载波周期为单位。以NEC编码的逻辑1为例,载波周期为560us,整个周期为2.25ms。因此:

37914.7 / (1 / 0.00056) = 21.23

37914.7 / (1 / 0.00225) = 85.31

所以T1CC0=85,T1CC1=21

3)配置其他寄存器

IRCTL=1,打开载波模式。需要注意的是,只要载波模式打开,Timer 1的计量单位就变为载波周期,但只有Channel 1,会调制上载波信号。其他的channel只是计量单位变为载波周期而已。

还有要仔细配置相关的Timer中断,如果没有必要的话,最好把中断都关上。毕竟即使没有中断处理程序,中断还是要消耗CPU的运算资源的。

4) timer调制模式

T1CCTLn.CMP一般选择4 - Clear Output on Compare-Up,Set on 0。

但是信号发送的最后几帧,需要特殊处理。主要的原因是:对TxCCn的修改不是立即生效,而需等待下一次中断,但对于T1CCTLn.CMP的修改却是立即生效的。这两者的差异有时会造成意想不到的结果。

CC2530双串口工作

CC2530虽然有两个UART,但是所有的示例中都只用到了UART0。而网上使用UART1的例子多数是实验性的代码,没有用到ZStack框架。因此对于真正的Zigbee应用来说,如何使用UART1仍是一个难题。

通过阅读ZStack的代码,可以发现UART1的使用之所以困难,主要有以下几方面的问题:

1.Pin复用。由于Pin默认是用于GPIO的,因此要想使用UART1首先要配好相关的Pin。这个可以参考那些从零做起的实验性代码,这些代码主要聚焦于如何配置寄存器,而不是ZStack。

2.ZStack中使用HAL_UART_DMA和HAL_UART_ISR用于指定串口的端口和驱动类型。但由于宏的值是唯一的,因此并不能两个UART都采用DMA或者ISR。但是一个UART用DMA,另一个用ISR实际上是可以的。这也是最简单的同时使用双串口的方法。

3.如果简单的配置HAL_UART_DMA和HAL_UART_ISR,可能会链接失败。从提示可知是驱动所占的RAM超过了系统的RAM所致。这时需要缩小两个串口的缓冲区的大小,即修改HAL_UART_DMA_RX_MAX和HAL_UART_ISR_RX_MAX的大小。

4.如果继续深入代码的话,可以发现HAL_UART_DMA和HAL_UART_ISR的唯一性,并不是两个串口不能同时DMA的关键。问题的关键在于,HAL UART的代码中,DMA和ISR都只有一套数据结构。因此如果采用两套数据结构的话,理论上是可以双串口DMA或ISR的。

5.那么问题就来了,既然可以这样做,为什么TI不去做呢?一句话还是资源的问题。双串口会导致每个串口的缓冲区尺寸减小。同时DMA虽然有5个通道,但一个串口就要用掉两个(收发各一个)。按照ZStack默认的配置,DMA 0没有用,DMA1、2用于AES,只有DMA3、4用于串口。因此实际上TI是不推荐双串口同时工作的。

CC2530按键事件流程

CC2530的按键事件是由GPIO的中断触发的。所有的GPIO都可以作为按键事件的中断源。但CPU的中断向量有限,只有3个中断向量P0INT、P1INT和P2INT可用于GPIO中断。在中断处理程序中,读取PxIFG寄存器可获得究竟是哪个GPIO产生的中断。

1.寄存器

P0IEN—-中断控制器的中断开关。

IEN1.P0IE—-CPU中断的开关。

IRCON—中断是否pending。

P0IFG—中断发生时,获取究竟是哪个GPIO产生的中断。

PICTL—上升沿还是下降沿触发中断。

2.软件流程

P0INT_VECTOR

halKeyPort0Isr

halProcessKeyInterrupt

HAL_KEY_EVENT

HalKeyPoll

HalKeyRead

HalKeyConfig/OnBoard_KeyCallback

OnBoard_SendKeys

KEY_CHANGE

以上的流程是针对中断式按键消息,轮询式的按键消息,从HAL_KEY_EVENT开始。系统在开机时自动执行一次HAL_KEY_EVENT的处理函数,然后发起下一次的定时查询请求。如此一直循环下去。

3.向框架添加一个新的按钮触发源

HAL代码中已经有HAL_KEY_SW_6_PORT等一系列的宏,并定义了KEY_SW_6的行为。照着KEY_SW_6的样子添加新的按键即可。

CC2530 Target类型

CC2530EB—Evaluation Board

CC2530USB

CC2530ZNP—Zigbee Pro Network Processor

从各方面的信息综合来看,这应该是指三种不同类型的板子。

CC2530的竞争对手

目前已知的有Ember公司的EM250、atmel公司的产品、microchip公司的产品。国内的广州致远,也就是周立功,也有同类产品(采用NXP JN5168模块)。

CC2530 Option的几点解释

这里以IAR 8.10为例,说明一下菜单Project->Options里有哪些可选的内容以及它们的含义。由于可供选择的内容非常多且杂,这里仅列举个人实际使用到的几点常用功能。

如何确定设备类型?

General Options->Target->Device information->Device

这个常用于根据已有软件代码,反查设备型号。在代码移植的时候很有用。

printf & scanf

General Options->Library options

嵌入式设备由于硬件功能有限,常需对软件代码进行裁剪,以恰好满足需要为最终目标。具体到printf和scanf函数,亦可根据需要选择不同的功能集合。

VLA

C/C++ Compiler->Language->C dialect

可变长数组(variable length array,简称VLA)在我看来,是C99标准的最大福利。这一点VC至今都不支持,鄙视之。。。

输出的二进制文件的格式

Linker->Output->Format

大的来说可分为两类:

1.Debug版本。也就是选择“Debug information for C-APY”选项。如果需要在IAR中,打断点调试的话,必须选择这个选项。

2.Release版本。选择“Other”选项。

这里说一下使用TI公司的SmartRF Flash Programmer烧写这两种类型文件的方法。

Release版本比较简单,直接选择“Erase and program”即可。

Debug版本需要首先选择“Read flash into hex-file”,然后再选择“Erase and program”。如下图所示:

这里写图片描述

网上有些人由于不晓得这一步,而得出Debug版本无法烧写的结论,这是不正确的。

输出二进制文件的flash布局

在项目的生成路径下,不仅有存放二进制文件的Exe文件夹,还有个List文件夹。在List文件夹下有个.map文件,包含了很多的链接信息。

空中升级

CC2530的空中升级可以使用以下两种方法:

1.OTA(Over The Air)。这是zigbee联盟制定的标准。具体到CC2530,就是需要添加ZCL的支持。

2.OAD(Over Air Download)。TI专有的空中升级文件的技术,比OAT更早面市。这也是TI官方的技术人员推荐的方法。

其实两者的原理都差不多。

并非所有的CC2530设备都能空中升级,TI官方的说法是要想升级需要满足以下条件之一:

1)有外接FLASH存储空间。

2)没有外接FLASH的设备,其image的大小 < (片上FLASH空间 - bootloader空间) / 2。

从第2个条件不难看出,空中升级的原理是将新的image下载到flash空闲区域,然后用新的image替换老的image。

但由于即使最优化的Zstack协议栈也至少有140KB,而CC2530最多只有256KB,因此第2个条件实际上是不可能满足的。

各种智能家居通信技术比较

名称 概况 优点 缺点
Zigbee 基于IEEE 802.15.4的一种近程(10米~100米)、低速率(250Kbps标称速率)、低功耗的无线网络技术。 具有低复杂度、低功耗、低速率、低成本、自组网、高可靠、超视距的特点。 协议Profile比较复杂,导致厂家的各自为政,产品兼容性较差。
Z-Wave 由丹麦公司Zensys所一手主导的无线组网规格。 Z-wave联盟的成员均是已经在智能家居领域有现行产品的厂商,产品兼容性好。 技术把持在Zensys手中,产业链较封闭,芯片可选余地不大,渐趋式微。
KNX Konnex协会提出的家庭、楼宇自动化的有线解决方案。 历史悠久,功能丰富,标准完善,厂商支持度比较高。在西欧和北欧比较流行。 虽然新的标准中可以使用868 MHz的RF进行无线传输,但总的来说,还是个有线方案。适合楼宇建筑时的预装,而不适合后期的智能改造。
BlueTooth Low Energy(BLE) 基于IEEE 802.15.1的的低功耗无线通讯技术。 只是协议升级,无需硬件升级,可充分利用现有手机的蓝牙功能,快速部署智能终端。 不支持网状网络,不支持多跳。因此要求传输双方都必须在无线信号可直接到达的范围之内。这一点直接限制了传输的距离。BLE 4.1之后,虽然可以自组Mesh网,但硬件须升级。
SUB 1G 1GHz以下的ISM无线通讯技术。 传输距离可达2~100km。 协议栈依赖芯片厂商提供。更像一种通讯方式,而非通讯解决方案。
Low Power Wifi 低功耗的wifi技术,有两个变种:普通型和802.11ah。 传输速度高。普通型兼容现有wifi设备。802.11ah穿透性好。 功耗仍然比Zigbee和BLE大一个数量级。
Thread Google在IEEE 802.15.4的基础上构建的6LowPan方案。 由于MAC层和Zigbee相同,因此具备Zigbee的大多数优点,且协议更友好(设计思想接近IPV6)。 不兼容现有设备,市场前景有待观察。
UWB(Ultra Wideband) 一种无载波通信技术,利用纳秒至微微秒级的非正弦波窄脉冲传输数据。 UWB能在10米左右的范围内实现数百Mbit/s至数Gbit/s的数据传输速率。 尚处于试验阶段,没有成功的产品。
电力载波 基于电力线传输的有线通讯协议。 无须布线,传输速度高(500Mbps),距离远(500m)。 不适合无电力线的场景。
NB-LTE & NB-CIoT 都是蜂窝无线通信网向物联网进军的产物。前者由Nokia、Ericsson和Intel提出,而后者由华为提出。 号称与现有LTE网络兼容,但2015年9月才推出,具体规格不详。
展开阅读全文

没有更多推荐了,返回首页