CC2530, 各类智能家居通讯技术比较

http://antkillerfarm.github.io/css

CC2530配置红外载波

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

1.配置时钟

配置时钟须要配置CLKCONCMD寄存器。可是须要注意的是OSC、TICKSPD和CLKSPD存在就低不就高的特色,因此若是稍有不慎,最终Timer输出的频率就不正确了。github

2.配置pin复用

pin复用分为3个级别:web

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只是计量单位变为载波周期而已。ide

这个值是没法直接用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没有用,DMA一、2用于AES,只有DMA三、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月才推出,具体规格不详。