CyFi无线传感嚣网络组建与通信设计
1 CyFi简介
Cypress公司先前推出的WirelessUSB技术已被广泛应用于无线鼠标、键盘、游戏手柄等产品中。在此基础之上,Cypress公司又推出了针对嵌入式控制领域的一款低成本、低功耗、高可靠性的无线射频解决方案――CyFi。CyFi的市场定位使其具有可靠、简化、低功耗、多信道等特点。
①可靠。通过使用直接序列扩频(DSSS)调制技术,CyFi能够使传输的数据从可能的错误中恢复回来,从而提供出色的连接可靠性。对于来自同样工作在非常拥挤的2.4 GHz频段的Wi―Fi、蓝牙、ZigBee等其他无线技术的干扰,CyFi的跳频技术能以预设的频段间隔自动搜索干净的信道进行通信,如图1所示。同时,CyFi的链接管理功能可以根据网络环境将发射功率、传输速率自动调整到保证可靠链接的最优配置上。DSSS调制、跳频技术和成熟的链接管理算法使得CyFi成为2.4 GHz频段的高可靠性无线解决方案。
②简化。CyFi提供的轻量级星型协议栈CYFISNP尺寸非常小,应用于Hub仅占用8 KB,而应用于节点仅为6 KB,如图2所示。CYFISNP协议栈可直接在PSoCDesigner中使用,其所提供的用户模块使开发者只需简单的拖放即可实现创新的无线设计,用户无需自行编写任何通信协议或编码,与PSoC可编程片上系统的结合使其在研发过程的任何阶段都可进行重新编程。
③低功耗。为了实现低功耗,CyFi尽量工作在睡眠模式。这意味着在干扰较弱的情况下,CyFi将以尽可能快的速度(1 Mbps)传输,以缩短传输时间;而在干扰较强的情况下,将启用DSSS调制技术并提高RF发射功率以250 kbps的速率传输,从而减少重传的可能。当节点与Hub的距离较近时,节点也能降低发射功率从而减小功耗。这种有效的电源管理机制使得采用CyFi的典型传感器应用只靠2节AA电池就可使用4年之久。
④多信道。由于CyFi仅占用1 MHz的带宽,故可用信道多达80个,而ZigBee等仅能使用16个5 MHz的信道。
2 CY3271简介
CY3271是Cypress公司针对新手推出的一款带CyFi的低成本USB接口套件,包括PSoC集成开发环境PSoCDesigner、用于数据采集的感应控制软件SCD、带RF功能的PC桥FTPC、多功能板FTMF、支持长距离无线应用并带功率放大器的RF扩展板FTRF,以及2个电池板。其中,PC桥FTPC作为CyFi的Hub设备使用;RF扩展板FTRF作为CyFi的节点设备使用,同时带有一个超低功耗的温度传感器;而多功能板FTMF中带有CapSense触摸传感器、接近式传感器、温度传感器、光传感器和红、黄、蓝3个LED灯。本文中仅以CapSense触摸传感器为例。
3 硬件结构
由于CyFi使用的是星型广播式网络协议,所有消息需要经过中心Hub,故实现节点A到节点B数据通信的过程如下:节点A通过I2C协议采集多功能板A的CapSense触摸滑块的位置、3个LED灯的亮灭情况等数据,并与目标节点B的ID号一起通过RF发送出去;Hub检测到网络中有消息后,再根据消息中的目标节点ID将消息转发出去,同时将数据保存到缓存中等待PC机读取;节点B接收到消息之后根据消息中的数据,同样通过I2C协议控制多功能板B上的3个LED灯的亮灭。其中Hub所在设备FTPC有2个PSoC内核:主内核实现USB―I2C转换和各个板卡(包括从内核)的编程功能;从内核实现Hub功能,同时通过I2C与主内核连接。系统功能框图如图3所示。
4 软件设计
4.1 PSoC软件设计
CY3271套件的光盘中提供了各个PSoC的设计样例,本文中PSoC部分的设计就是在这些样例的基础上修改而成的。为了实现上述功能,需要在节点A发送的消息中添加目的节点B的ID信息,以便Hub将接收到的消息再转发出去。每个CyFi收发器有2种ID;一种为6字节的Radio ID,此ID在收发器出厂时烧入,不可更改且全球唯一;另一种为1字节的Node ID,此ID在节点绑定时确定,可以事先指定也可以由Hub动态分配。由于Ra-dio ID较复杂,开发人员在开发过程中可以忽略RadioID,而只关注Node ID。
对于多功能板A可直接使用光盘上的MF_CS_SLIDE样例,不需要修改。对于节点A使用的RF_12C_BRIDGE样例,主函数中需修改调用CYFISNP_BindStart()函数时的参数,如下:
其中,采集并发送消息的函数sendNewTxMsg()中发送的消息类型必须修改为CYFISNP_API_TYPE_CONF_BCDR,且应在调用的loadTxData()函数中添加如下一句以添加节点B的ID信息:
txApiPkt.payload[I2C_PAYLOAD_MAX]=DEV_ID_RX;
对于Hub使用的RF_HUB样例,首先需要将用户模块CYFISNP的Device ID assignment属性设置为Preas-signed Device ID,以便节点A、B使用指定的ID绑定成功。重新编译后,在ServeSNPPackets()函数中接收到CYFISNP_API_TYPE_CONF_BCDR类型的消息之后,添加如下代码:
评论