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月才推出,具体规格不详。

CC2530, 各种智能家居通信技术比较相关推荐

  1. 专题|从智能家居的“精智生活”谈谈边缘计算的落地生根

    文章版权所有,未经授权请勿转载或使用 全文6500字,预计阅读16分钟 文 | 禾加页 01 智能家居发展趋势 智能家居是通过各种感知技术,接收探测信号并予以判断后,给出指令让家庭中各种与信息相关的通 ...

  2. 智能家居市场中zigbee通信技术与RF315/433通信技术的区别

    zigbee通信技术和RF315/433是我们目前市场中常见的智能家居的通信协议,那么两者有什么区别,我们又该如何去进行选择?接下来就让我们一起来看一下这两者的区别. 郑州智能家居http://ww ...

  3. 智能家居无线方案ZIGBEE、Z-Wave、WIFI、蓝牙、红外、GPRS以及NB-IOT对比

    无线取代有线已经成为一个不可逆转的趋势,在智能家居行业最流行的是四种无线技术,即WiFi.Z-Wave.ZigBee.SmartRoom.其中WiFi技术和ZigBee这两种技术最值得竞争.那么WiF ...

  4. 无线龙物联网STM32+ZigBee实验箱智能家居多种传感器开发平台

    无线龙物联网STM32+ZigBee实验箱智能家居多种传感器开发平台 无线龙STM32-ZigBee实验箱是专门为高校市场打造的一款新型的教学科研平台,用到的STM32嵌入式开发板取代了CC2530的 ...

  5. 基于ZigBee的智能家居系统设计

    1   前言 智能家居(smart home, home automation)是以住宅为平台,利用综合布线技术.网络通信技术.安全防范技术.自动控制技术.音视频技术将家居生活有关的设施集成,构建高效 ...

  6. zigbee智能家居基础扫盲

    zigbee Zigbee是基于IEEE802.15.4标准的低功耗个域网协议.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和&qu ...

  7. 远程智能家居ZigBee控制系统

    0 引言 智能家居系统(SmartHome)最早源于欧美发达国家,是指以住宅为平台,利用现代计算机网络通讯.自动化控制技术.传感器技术.无线通讯技术.音视频技术,通过社区综合布线.社区局域网.Inte ...

  8. 基于Zigbee和MQTT的智能家居应用

    基于Zigbee和MQTT的智能家居应用 摘要:本文提出了基于Zigbee和MQTT的一种智能家居设计方案,与小米华为等做成品的方案不同,本文方案主要设计的是不同的设备控制器,对于用户定制的自由度大, ...

  9. ZigBee智能家居安防硬件设计

    0 引 言 在信息产业快速发展的今天,嵌入式设备已经深入到了人类生活的各个方面,智能设备更是成为了人们日常生活中不可或缺的一部分.随着能源的日渐消耗,环保节能刻不容缓. 因此,在现在和未来的家居生活环 ...

最新文章

  1. TensorFlow 2.0+Keras 防坑指南
  2. 通过eclipse调试MapReduce任务
  3. GPT-3不算机器学习算法创新?2020年AI顶会最佳论文榜单引发激烈争论
  4. nginx源码分析—内存池结构ngx_pool_t及内存管理
  5. 被 Kafka 虐的日子,太惨了……
  6. js中关于array的slice和sort方法(转自JavaEye)
  7. 堪称经典!这部由苏联最杰出数学家编写的数学教材,为何能大受推崇?
  8. 想进美团不知道选哪个技术岗位?这里有一份通关秘籍!
  9. linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具
  10. 打造kubernetes 高可用集群(nginx+keepalived)
  11. UGUI 源码之 GridLayoutGroup
  12. vmware workstation server 服务无法启动
  13. 《战神》全剧情对话超详尽攻略
  14. Mysql大文本类型
  15. 华大芯片入坑系列-1
  16. 冷库管理源码PHP,冷库管理系统,你想知道的都在这里
  17. 小白学STM32——跑马灯库函数版本
  18. 线性表(链式存储结构)C语言
  19. 删除网络共享计算机,如何把电脑上的共享文件删除
  20. 2022年全网最全AI绘画产品整理(一共23款,免费的绘画次数用到你手软)

热门文章

  1. 字数监控,价格监控等
  2. Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight respo
  3. JavaScript中的回调地狱及解决方法
  4. mysql数据库水平分割_数据库的水平分割和垂直分割
  5. 2021北京高考英语口试成绩查询,2021北京高考英语口语怎么考?2021英语增加口语考试是全国?...
  6. 时序分析:手势--空间轨迹模式识别
  7. Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol
  8. 磁盘分区原理:从MBR到GPT
  9. Fedora 14 网卡设置
  10. java多线程 -- 同步鎖