ZigBee技能是一种近距离、低复杂度、低功耗、低数据速率、低本钱的双向无线通讯技能,该技能根据IEEE 802.15.4规范,由成立于2001年8月的ZigBee联盟提出。2004年12月,ZigBee联盟拟定了ZigBee SpecificationV1.0。至今ZigBee技能现已得到了广泛的开展和运用。现在,我国绝大部分的ZigBee硬件都是由国外厂商规划和出产的。前期的ZigBee硬件都是微操控器(MCU)和IEEE 802.15.4射频芯片别离的。跟着片上体系(SoC)的呈现,ZigBee硬件也开展到了在一个芯片内部集成了MCU和射频芯片,如Freescale公司的MC1321x,TI公司的CC243x,Ember公司的EM250以及Jennic公司的JN5121和JN5139等[1-2]。其间,Freescale公司的MC1321x降低了ZigBee开发者对硬件射频电路的要求,加快了ZigBee体系的开发,一同具有较高的安稳性和牢靠性。
为了更好地推广运用ZigBee,本文对物理层协议及编程办法进行了深入研讨。物理层是ZigBee的关键技能,完好的ZigBee协议包含运用层(APL)、网络层(NWK)、前言接入操控层(MAC)和物理层(PHY)等。物理层经过操作底层硬件为上层供给服务接口,因而物理层的安稳牢靠关系到整个协议栈的健壮性,是其他层规划的根底。
选用嵌入式构件化的规划办法,可进步物理层规划的可移植性和可重用性,现在很少有人做这方面的作业。本文选用射频片上体系(SoC)——MC13213规划了一个较通用的单芯片ZigBee硬件渠道,剖析和完结了ZigBee协议物理层,依照构件化的办法进行规划,并对构件进行了具体的测验,这不仅为根据物理层的简略运用供给了办法,而且为后续的MAC层的运用打下了根底。
1 ZigBee物理层功用概述
ZigBee作业在免恳求的工业科学医疗频段。IEEE 802.15.4规范中界说了两个可用的物理层:根据2.4 GHz频段的“短距离”完结和根据868/915 MHz频段的“长距离”完结,两者都运用直接序列扩频(DSSS)技能。我国现在的ZigBee作业频段为2.4 GHz。
ZigBee物理层经过射频固件和射频硬件为MAC层和物理无线信道之间供给了服务接入点SAP(Service Access Point)。
IEEE 802.15.4界说的物理层参阅模型如图1所示。其间PD-SAP(PHY Data Service Access Point)是物理层供给给MAC层的数据服务接口,PLME-SAP(Physical Layer Management Entity-Service Access Point)是物理层供给给MAC层的办理服务接口,RF-SAP是由底层无线射频驱动程序供给给物理层的接口。
物理层首要完结以下作业:激活和禁用射频收发器,对信道进行能量检测ED(Energy Detect),供给所接纳数据包的链路质量指示LQI(Link Quality Indication),闲暇信道评价CCA(Clear Channel Assessment),信道频率挑选,数据发送和接纳等。
2 MC13213单芯片ZigBee物理层编程结构
Freescale公司推出的单芯片ZigBee解决方案——MC13213选用SoC技能,在9 mm×9 mm的LGA封装内集成了HCS08 MCU和遵从IEEE 802.15.4规范的第二代无线射频收发器MC1320x[3-4] (后文中将用MCU和Modem别离代表MCU模块和射频收发器模块)。具有4 KB的RAM、60 KB的Flash,1个串行外设接口(SPI),2个异步串行通讯接口(SCI),1个键盘中止模块(KBI),2个定时器/脉宽调制TPM(Timer/PWM)模块,1个8通道10位的模数转换器(ADC),以及多达32个的GPIO口等[5]。Modem内部现已集成了功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)和收/发开关(T/R switch),这在很大程度上降低了体系本钱和射频电路的规划难度。
2.1 Modem与MCU的交互办法
Modem能够经过SPI接口、IRQ中止恳求以及几个状况和操控信号与主控MCU完结交互,如图2所示。
SPI指令通道是Modem与MCU之间的首要交互办法,运用规范的4线SPI进行通讯。MCU经过SPI指令结构能够读/写Modem的寄存器内容、设置Modem的初始化参数、读取Modem的状况和操控信息。IRQ中止为Modem供给了一种告诉MCU有关Modem内部所发生事情的办法,这样就免除了MCU一向轮询Modem,降低了MCU的运转开支。ATTN用来把Modem从低功耗方式唤醒,RXTXEN用来答应Modem的发送、接纳和CCA等操作。GPIO1引脚反映了Modem收发机是否忙,GPIO2引脚能够反映所接纳数据包的循环冗余校验CRC(Cyclical Redundancy Check)是否有用或许反映CCA的成果[6]。
2.2 Modem的SPI业务操作
SPI业务是在规范SPI协议根底上完结的一个扩展SPI协议。因为Modem中的寄存器和RAM巨细都装备为16 bit即一个字(word)的宽度,所以它规则了每次SPI业务进程有必要由1 B的头(header)和2×N B的载荷(payload)组成,每个字节对应一个SPI脉冲(SPI burst),其间1≤N≤64,且为整数,代表每个SPI业务中所包含的字(word)数,当N=1时,称为SPI单次业务(SPI singular transaction);其他状况称为SPI循环业务(SPI recursive transaction)。header的最高位为R/W位,标明操作类型是读仍是写;header的低6位是寄存器地址,标明了SPI操作的64个或许的寄存器地址(留意,有一部分寄存器没有完结)。
2.3 Modem的数据传输方式
Modem界说了两种数据传输方式:Stream方式和Packet方式。在Stream方式中,数据的发送和接纳是逐字(word-by-word)处理的。而在Packet方式中,发送时,发送方先将待发送数据缓存在Modem的发送缓冲区(TX RAM)中,然后再发送;接纳时,接纳方先在接纳缓冲区(RX RAM)中缓存收到的整个数据包,然后再告诉MCU来读取。尽管Packet方式下数据的接纳有稍稍推迟,但其降低了对MCU的资源要求[7],在本协议栈完结进程中运用这种数据传输方式。
3 物理层构件规划
根据MC13213单芯片的ZigBee渠道完结物理层协议构件程序的规划,首要有必要编写底层硬件驱动程序,然后设置Modem的运转办法,再进行数据包收发程序的规划等。
3.1 底层硬件驱动程序的完结
硬件驱动程序介于底层硬件和ZigBee协议栈之间,能够使得运转于硬件之上的ZigBee协议栈更易于保护和移植。其间芯片初始化程序对MCU的一些硬件模块进行正确的装备,以确保MCU能够正常作业。这儿所做的首要装备包含:封闭看门狗,设置内部时钟模块的校准(trim)值,装备MCU的时钟模块等。
初始化完结后会涉及到SPI循环业务的完结,下面以Packet方式下发送和接纳3 B数据的完好进程来描绘对Modem RX/TX RAM的SPI循环读写操作,如图3所示。其间,RX/TX RAM的长度为128 B。图中假定MCU均是以字节数组的方式来保存待发送或接纳到的数据。
从图3能够看出,读/写RAM时的SPI通讯是最高有用位优先(MSB-first)的,而在无线发送/接纳进程中是最低有用位优先LSB-first(Least Significant Bit first)的,但在编写SPI循环读写操作时并不需求考虑上述两种次序,也并不会导致接纳方在接纳发送方的数据时发生比特位次序的改动。
需求特别留意的是,因为SPI业务要求一切的数据传输都是按16 bit宽度进行的,当发送数据是奇数个字节时,其最终一字节数据要进行特别处理,即需填充一个恣意字节以凑满16 bit宽度,可是这个凑集的字节和最终那个有用字节的发送次序有必要依照图3中的次序进行,即先发填充字节,以确保在TX RAM中,最终一字节紧跟在前面的偶数个字节之后。而在最终一字节数据之前的偶数个字节数据因为是16 bit宽度的倍数,所以在发送每个字时对字节发送次序没有特别要求,只需接纳方和发送方依照同一种次序收发各字节即可。
3.1.1 运用SPI循环写业务向TX RAM中写入待发送数据
履行这个操作之前,待发送数据长度应现已写入TX_Pkt_Control寄存器的tx_pkt_length[6:0]字段。
MCU向TX RAM中写入待发送数据的一般流程如下:
(1)根据需求装备TX_Pkt_Control寄存器的tx_ram2_select位,以挑选运用两块TX RAM中的一块。
(2)核算写入待发送数据所需求的SPI脉冲个数,留意:
①CRC字节不需写入到TX RAM中,它是由硬件主动发生的;
②待发送数据的最大长度为125 B(去掉2 B的CRC);
③有必要为偶数个字节,若数据长度为奇数个字节,应加1使其变为偶数。
(3)做一个SPI循环写业务来写入数据:
①MCU拉低SPI模块的片选信号CE,选中Modem;
②MCU向Modem发送榜首个SPI脉冲,其间R/W位应为0,标明写操作;
③依照(2)中核算的SPI脉冲个数,写入待发送数据;
④MCU拉高CE,使片选失效;
(4)整个写操作完毕。
3.1.2 运用SPI循环读业务读取RX RAM中的已接纳数据
MCU读取RX RAM中的已接纳数据的一般流程如下:
(1)MCU读Modem的RX_Status寄存器rx_pkt_latch[6:0]字段以获取数据长度。
(2)核算读取RX RAM中的已接纳数据所需求的SPI脉冲个数:
①一般不读取2 B的CRC,所以数据长度应减去2;
②若数据长度为奇数个字节,应加1使其变为偶数;
③依照Modem SPI业务协议的规则,应丢掉读到的榜首个字(word),因为在榜首次读取时,内部RAM的地址还没有准备好,这样又导致了数据长度加2。
(3)做一个SPI循环读业务来读取数据:
①MCU拉低SPI模块的片选信号CE,选中Modem;
②MCU向Modem发送榜首个SPI脉冲,其间R/W位应为1,标明读操作;
③依照(2)中核算的SPI脉冲个数读取一切数据。留意,协议规则应丢掉读到的榜首个字(word)。当数据为奇数个字节时,应丢掉图3中的那个填充字节;
④MCU拉高CE,使片选失效。
(4)整个读操作完毕。
3.2 设置Modem运转方式
Modem有多种运转方式,首要可分红两类:活动方式和低功耗方式。其间活动方式包含Idle方式、Receive(RX)方式、Transmit(TX)方式和CCA/ED方式;低功耗方式包含Off方式、Hibernate方式、Doze方式[8]。
Idle方式是Modem退出任何其他方式后的默许方式,也是进入任何其他方式的初始方式;RX、TX方式别离为Modem接纳、发送数据时所在的作业方式;CCA/ED方式为闲暇信道评价/能量检测时所在的作业方式,用来评价信道是否闲暇或丈量信道的当时能量值[8]。
收发机状况设置是经过调用设置收发状况函数完结的,其函数头如下:
//—————————————–*
//功用: 设置收发机状况函数,把收发机设置成用户希望的状况
//参数: nDesiredStatus – 用户希望状况
//回来: SUCCESS – 成功设置成指定方式;
// 等于用户希望方式-收发机之前就处于用户希望状况;
// 其他 – 标明履行失利;
//阐明: 无
//—————————————-*
INT8U PLMESetTRXState(INT8U nDesiredStatus);
3.3 物理层数据包的收发
物理层数据称为物理层数据单元PPDU(PHY Protocol Data Unit),包含同步包头、物理层包头和物理层载荷三部分[3],如图4所示。其间同步包头能够使得接纳设备锁定在比特流上,并与比特流坚持同步;物理层包头包含了数据包的长度信息,在0~127之间;物理层服务数据单元PSDU(PHY Service Data Unit)也称物理层载荷,带着MAC层的帧信息,即MAC层协议数据单元MPDU(MAC Protocol Data Unit)。留意,CRC查验字节包含在PSDU中的最终两字节中。
物理层数据包的发送和接纳比较简略,关于MC13213的Modem来说,用户所要做的仅仅调用SPI循环业务写入或读取物理层包头和载荷,然后拉高RXTXEN引脚使能Modem的发送和接纳即可。PPDU的同步包头是由硬件主动增加的。
(1)物理层数据包的发送
Packet方式下发送数据包的进程是在物理层数据恳求函数中完结的,在函数完结进程中,应根据要求,向上层告诉数据发送成果的状况信息。其函数头如下:
//————————————————*
//功用: 数据恳求函数,生成物理层协议数据单元(PPDU)并无线发送出去
//参数: nPSDULength-物理层PSDU(即MAC层的MPDU)中的字节数,
// 长度要=aMaxPHYPacketSize(物理层最大数据包容量)
// pPSDU – 指向物理层PSDU数据的指针
//回来: SUCCESS – 发送成功;其他值 – 发送失利
//阐明: 由MAC层调用
//—————————————–*
INT8U PDDataRequest(INT8U nPSDULength, INT8U *pPSDU);
(2)物理层数据包的接纳
一般状况下,Modem的接纳机是封闭的。当Modem接纳机处于翻开状况时有其他Modem在同一信道上发送数据,则Modem会接纳到这些数据。
本协议栈完结Packet方式下接纳数据包时,为物理层数据包完结了一个环形的接纳缓冲区,以确保数据的及时牢靠接纳,其结构界说如下:
//PSDU最大数据包长度(不包含CRC)
#define PSDUMaxLen 125
//PSDU数据包界说
typedef struct PSDURxPacket_tag
{ INT8U m_nLen;
INT8U m_nData[PSDUMaxLen];
INT8U m_nStatus;
INT8U m_nLQI;
} PSDURxPacket_t;
//PSDU数据接纳缓冲区个数
#define PSDURxBufferNum 8
//PSDU数据接纳缓冲区界说
typedef struct PSDURxBuffer_tag
{ INT8U m_nPSDUCount;
INT8U m_nHead;
INT8U m_nTrail;
PSDURxPacket_t m_sPSDU[PSDURxBufferNum];
} PSDURxBuffer_t;
//界说PSDU环形接纳缓冲区
static PSDURxBuffer_t s_sPSDURxBuffer;
3.4 其他编程相关阐明
闲暇信道评价(CCA)用来判别信道是否闲暇。能量检测(ED)用来丈量方针信道中接纳信号的功率强度,因为这个检测自身不进行解码操作,所以检测成果是有用信号功率和噪声信号功率之和。别的,链路质量指示(LQI)供给了接纳数据包时无线信号的强度和信道质量信息。与能量检测不同的是,LQI要对信号进行解码,生成的是一个信噪比目标。这个信噪比目标和物理层数据单元一同提交给上层处理。Modem中RX_Status寄存器的cca_final[7:0]字段保存了以上操作的成果值。
当Modem完结MCU指定的某个功用(如发送完结、接纳完结、CCA/ED完结等),就会发生IRQ中止,然后MCU会读取Modem的IRQ状况寄存器,针对不同的IRQ中止类型别离进行处理。
物理层办理实体(PLME)保护了物理层正常作业一切必要的一些特点参数,包含物理层支撑的信道列表、当时用于发送和接纳的信道、物理层的发射功率以及CCA方式4个特点。每个特点都有一个仅有的特点标识符,而且某些特点还有一些特定的取值规模。特点的读和写别离由特点设置和读取函数来完结,因为物理层的特点较少,直接经过switch/case句子完结即可。
4 物理层构件测验
依照前面剖析的ZigBee物理层编程结构编写测验程序,可用于对物理层的构件功用进行测验。测验可先进行SPI单次读写业务测验,然后再进行数据包收发测验。
4.1 SPI单次读写业务的正确性测验
在对Modem的内部寄存器初始化之前,可使用SPI单次读业务获取Modem寄存器的内容,并经过串口输出显现与Modem寄存器的复位值比照是否共同。接着使用SPI单次写业务,对Modem进行初始化,初始化后,再把修正后的Modem寄存器的内容经过串口输出显现,与修正值比较,即可得出SPI写业务是否正确。
4.2 物理层数据包的收发测验
物理层数据包的收发测验需求一个发送节点和一个接纳节点相互配合。关于能否正确收发需求测验两种状况,发送节点别离发送奇数个和偶数个字节的数据,看接纳节点能否正确收到。这部分的测验是借助于串口调试东西来完结的,接纳节点把收到的数据发往PC机串口显现。
物理层数据包收发的牢靠性测验条件如下:一个发送节点和一个接纳节点,二者相距5 m左右,其间发送节点每次发送长度为20 B的数据,而且数据中的最终2 B作为一个16 bit的整数,用来记载发送次数,每发送一次其值加1。发送节点何时开端发送数据由PC方测验软件操控,接纳节点担任接纳数据并发给PC端测验软件显现,经过比较发送字节数与接纳字节数以及数据中的发送次数字段,能够得出数据丢掉状况。一切的测验数据会写入后台的ACCESS数据库中,以供将来进行数据的统计剖析。实验中测验的一组数据如表1所示,丢包率不超越0.1%。
本文研讨了ZigBee协议物理层的SPI业务协议、Modem的作业方式等关键技能和编程办法,完结了根据单芯片ZigBee渠道的构件化的底层硬件驱动程序和物理层数据包收发程序。测验标明,此硬件渠道安稳牢靠、完结简单,不光方便了其他研讨人员学习和实践ZigBee技能,降低了研讨ZigBee技能的门槛,还因为选用了单芯片规划和构件化规划办法,具有较高的可移植性和可重用性,使其很简单运用到实践项目中。一同为ZigBee协议栈后续其他层的研讨和完结打下了根底,并为其他协议的运用研讨供给了参阅。
参阅文献
[1] 刘新,吴秋峰.无线个域网技能及相关协议[J].核算机工程,2006,32(22):102-103.
[2] 吴荣耀,章剑雄.ZigBee网络体系节点硬件规划与完结[J].杭州电子科技大学学报,2008,28(4):49-52.
[3] IEEE. Wireless Medium Access Control (MAC) and Physical Layer(PHY) specifications for low-rate wireless personal area networks[S]. IEEE Std 802.15.4-2006, September 2006.
[4] IEEE. Wireless medium access control(MAC) and physical layer(PHY) specifications for low-rate wireless personal area networks[S]. IEEE Std 802.15.4-2003, October 2003.
[5] ZigBee Alliance. ZigBee specification[EB/OL]. http://www.zigbee. org/en/spec-download, 2007.
[6] Freescale. MC13213: 2.4GHz RF transceiver and 8-bit MCU with 60K of flash for ZigBee applications[EB/OL]. http://www.freescale.com/webapp/sps/site/prod_summary. jsp?code=MC13213nodeId=0106B9869925657103, 2009.
[7] Freescale. MC13224V: MC1322x platform in a package[EB/OL]. http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC13224VnodeId=0106B9869925657103, 2009.
[8] Freescale. MC13213RM. pdf[DB/OL]. http: //www. freescale. com/, 2009.