利用AT89LV52单片机作控制器,实现基于RFWaves公司的射频芯片RFW122-M的短距离无线数据通信系统;分析射频芯片RFW122-M及其与单片机的接口芯片RFW-D100的特点;给出系统的硬件原理框图及软件流程图。对应用于该装置的无线数据传输协议CSMA进行分析,并且在对固件的编程配置中加以实现。
目前, 短程射频通信技术是一种热门技术, 已广泛应用于实际中, 主要有无线局域网(WLAN )、个人区域网络(PAN) 及无线短距离消费类产品(如中低速数据传输应用, 有效范围在30 m以内)。该通信技术的标准有IEEE802.11a、Hiperlan2、蓝牙(IEEE802.15.1)、 HomeRF及IEEE802.11b(WIFI)等。支持这些标准的器件一般功耗都比较高,结构复杂,价格较高, 因而不适合低端产品。RFWaves 公司针对现有市场发展推出的面向低端的用于短距离无线通信的射频通信芯片组RFW122-M,符合美国联邦通信委员会(FCC)的技术规范。
本系统利用射频芯片RFW122-M及其与MCU的接口芯片RFW-D100,在单片机AT89LV52的控制下,实现了短距离的无线数据通信。
1 射频芯片RFW122-M及其接口芯片RFW-D100
RFW122-M无线收发芯片是一种半双工、使用直接序列扩频(DSSS)技术的无线收发两用集成电路,工作中心频率为2.44 GHz(ISM频段),采用ASK调制方式,工作电压为2.4~3.6 V。在空闲状态下,几乎不消耗功率(0.1 μA @ VCC=3 V)。RFW122-M可以外接一个200 Ω的差分阻抗天线(印制版天线)或带有匹配电路的其他天线,在误码率为10-3的条件下,接收灵敏度为-77 dBm。该模块有3根数据控制线,且其数据I/O口是一个串行的数字接口。它的唤醒时间为20 μs,同步时间是1.2 μs。最高数据传输速率为1 Mbps,此时工作电流为33 mA。
为了降低MCU实时处理MAC协议的要求,RFW122-M芯片组提供了RFW122-M与MCU之间的接口芯片RFW-D100。该芯片在MCU和RFW122-M之间提供了一个并行接口;同时提供了对CSMA协议的支持。RFW-D100采用了两种技术来获得比较好的载波侦听的能力: 一种是RSSI(射频信号强度检测),能检测到任何强度的无线传输,避免冲突;另一种是使用RFWaves 网络的载波侦听算法。采用这种技术可以避免与本网络内的或其他网络的RFWaves站点发生冲突。
(1) RSSI(射频信号强度检测)
RSSI机制用来比较某个非RFWaves站点传输的功率超过了一个确定的门限(用一个外部的电阻来设置这个数值,RFW-D100给出了该门限的参考电压和计算公式),比较的结果放在寄存器SSR[7]-COMP_IN中。当MCU内有数据传输时,就去读取该寄存器,根据寄存器的状态确定信道是否处于被占用的状态,从而确定数据是否被传输。
(2) 内部/外部RFWaves网络的载波监听的算法
该机制主要用来监测相似的RFWaves网络。RFWD100利用载波侦听算法监听是否有外部相似的RFWaves网络正在传输数据。如果外部的RFWaves网络正在进行数据的传输,则内部的标志位将被置1,表示信道处于被占用的状态;如果信道由被占用的状态转为空闲的状态,将产生一个中断来通知MCU,此时MCU可以进行数据的传输。
2 硬件设计
系统的微处理器采用Atmel公司的AT89LV52。它是一款基于51系列的低功耗微处理器,支持汇编和C语言,开发环境采用Keil公司 Keil C51(51单片机的汇编和C语言的开发工具);支持汇编、C语言以及混合编程,同时具备功能强大的软件仿真和硬件仿真。系统包含两个半双工的通信终端,来自高层的数据由串口发往MCU,MCU再将数据发往RFW-D100。RFW-D100将数据打包以后送往RFW122-M进行调制,再通过天线发送出去。系统框图如图1所示。
图1 系统框图
MCU与RFW122-M及RFW-D100的连接关系如图2所示。
图2 MCU与RFW122-M及RFW-D100的连接关系
3 通信协议及软件流程
系统所采用的数据链路层的协议是载波侦听多路访问协议(CSMA)。局域网一般采用共同介质的方法,为此当多个站点要同时访问介质时,就要进行控制。CSMA就是常用的一种方式。当网中站台要发送数据时,先检测是否有别的站台占用了传输媒体。具体做法是:先进行载波侦听,如果发现介质(媒体)空闲,则立刻发送数据;否则,就根据不同的策略退避重发。
由于该系统工作在2.44 GHz的ISM频段,该频段存在较大干扰,所以设计数据包结构时最重要的原则是,以尽量短的时间占用信道,以降低潜在冲突的概率。在传输中,包重叠的概率是与每个发送节点占用共享信道的时间成正比的。因此,若以高比特率传输数据包, 会提高数据被正确接收的概率。RFW-D100最高的空中数据传输速率为1 Mbps,它可以被配置为各种传输速率。在RFW-D100的数据手册中,降低数据速率并不能降低误码率,因此为了缩短数据包在空中传输的时间,降低数据碰撞的概率,在协议中建议以最高的速率传输数据。若把数据分成小包,则每个小包被正确接收的概率又会增加。这样,当干扰出现时,只有一小部分会丢失,而且协议有能力来定位在特定包中损坏的数据。因此可以得出这样的结论:以高的数据速率发送短的数据包,将增强协议处理损坏数据的能力。
3.1 数据包格式
数据包格式如图3所示。
图3 数据包格式
① PREAMBLE:RFWD100 发送PREAMBLE 的目的是使接收机和发送机同步。20 位长,高4位为1111,其他16位可以配置。发送顺序为从高到低。
② NET_FIRST:1字节,网络地址字节。
③ NET_SEC:1字节,网络地址字节。
④ DST_ID:1字节,数据包所发往的目的节点地址。
⑤ SRC_ID:1字节,发数据包的源站地址。
⑥ SEQUENCE:1字节。这个段包括两个值:高4位表示数据序号,低4位表示数据包的类型。低4位代表的含义:0000b为握手数据包, 0001b为握手应答包,0010b为数据包,0011b为数据包的应答包,0100b为拆链包,0101b为拆链的响应包。
⑦ SIZE:1字节。这个段说明包的大小。当设定数据包为固定大小时,SIZE没有意义。
⑧ PAYLOAD:1字节。来自上层软件层的数据。
⑨ CRC:1字节。RFWD100 在发送端给每个包增加CRC 信息,使得接收机对接收的数据进行检测。
在本系统的协议设计过程中,采用小数据包的传输模式,从串口中收到的数据个数(以字节为单位)等于10时,将这些数据打包发送出去。如果收到的数据个数小于10, 并且串口数据的发送已经结束, 则系统也将这些数据打包并发送出去。
3.2 系统状态转移图
系统的状态转移如图4所示,包含4个状态,分别是空闲态、握手态、传输态和接收态。
图4 系统状态转移图
空闲态:如果没有串口中断或外部的握手信号中断,则系统将一直处于空闲状态。
握手态:如果串口中断发生,则表明有上层的数据包需要传输,系统进入握手的状态。
传输态:系统把从串口收到的数据通过无线信道发送出去。
接收态:系统处理接收到的数据包,发往串口,并对从串口到来的数据包做丢弃处理。
3.3 4个状态的处理流程
系统4个状态的处理流程如图5~图8所示。
图5 空闲态流程
图6 握手态流程
图7 发送态流程
图8 接收态流程
系统接收串口数据的缓冲池的大小为15字节。
图6中各个标志位的意义如下:
New_flag串口中有新数据到来(串口中有数据到来,将New_flag置1,在串口中断中设置此标志位)。
Checkact_suc_flag收到握手应答包的标志。收到握手应答数据包后将此标志位置1。
Tx_size系统接收到的来自串口的字节个数。
Tx_end_flag串口中的数据发送完毕。由定时器1控制,定时一段时间。如果在这段时间内没有新的数据到来,则认为串口数据的这次发送完毕。每次收到新的串口数据时重置定时器,定时的时间大于1字节数据传输的时间。
Checkact _send_flag由定时器0控制,在定时的时间内如果没有收到握手应答包,则定时器0溢出,Checkact _send_flag被置1,重发握手包。
图7中各个标志位的意义如下:
New_flag串口中有新的数据到来。若串口有数据到来,则将New_flag置1,在串口中断中设置此标志位。
Pk_sended_nack一个数据包已经发送出去但还没有收到确认包时将此位置1,为0时表示系统可以发送数据包。
Ack_flag为1表示发出的数据包收到了确认。
Tx_end_flag从串口发来的数据已经停止了发送。
Exceed_TIming_flag在发送完每一个数据包的同时打开定时器0,从定时器0打开到定时器0溢出的这段时间内,如果没有收到确认包,则认为数据包发送失败,将Exceed_TIming_flag置1;如果在这段时间内收到确认的数据包,则将定时器0关闭。
Tx_size系统接收到的来自串口的字节个数。
图8中各个标志位的意义如下:
Lock_flag本节点收到了其他节点发来的数据包。
Tx_to_s_flag在接收状态,如果MCU中的缓冲区内仍有数据,且Tx_to_s_flag=1,则可向串口发送1字节数据。当MCU的TI中断发生时,将此标志位置1。
4 接口芯片RFW_D100的固件编程
对RFWD100进行固件的编程是通过对RFWD100内的特殊功能寄存器的编程实现的。
SCR2=0x1c配置前的操作;
BLR=0x06配置数据的空中码速为1 Mbps;
PPR=0xca配置数据包的格式;
LCR=0x45配置数据包特殊字节的位置;
NIR=0xbb网络识别地址;
BIR=0xee节点识别地址;
SCR1=0x20打开RSSI;
SCR3=0x03
SCR4=0x03
IER=0x13中断使能;
SCR2=0x02系统处于数据包的搜索状态。
结语
本设计以射频芯片RFW122M及其接口芯片RFED100为核心,采用单片机AT89LV52作微处理器,实现了一个短距离无线数据传输系统。今后的工作是完善和改进该协议,进一步提高无线数据的传输效率。
利用AT89LV52单片机作控制器,实现基于RFWaves公司的射频芯片RFW122-M的短距离无线数据通信系统;分析射频芯片RFW122-M及其与单片机的接口芯片RFW-D100的特点;给出系统的硬件原理框图及软件流程图。对应用于该装置的无线数据传输协议CSMA进行分析,并且在对固件的编程配置中加以实现。
目前, 短程射频通信技术是一种热门技术, 已广泛应用于实际中, 主要有无线局域网(WLAN )、个人区域网络(PAN) 及无线短距离消费类产品(如中低速数据传输应用, 有效范围在30 m以内)。该通信技术的标准有IEEE802.11a、Hiperlan2、蓝牙(IEEE802.15.1)、 HomeRF及IEEE802.11b(WIFI)等。支持这些标准的器件一般功耗都比较高,结构复杂,价格较高, 因而不适合低端产品。RFWaves 公司针对现有市场发展推出的面向低端的用于短距离无线通信的射频通信芯片组RFW122-M,符合美国联邦通信委员会(FCC)的技术规范。
本系统利用射频芯片RFW122-M及其与MCU的接口芯片RFW-D100,在单片机AT89LV52的控制下,实现了短距离的无线数据通信。
1 射频芯片RFW122-M及其接口芯片RFW-D100
RFW122-M无线收发芯片是一种半双工、使用直接序列扩频(DSSS)技术的无线收发两用集成电路,工作中心频率为2.44 GHz(ISM频段),采用ASK调制方式,工作电压为2.4~3.6 V。在空闲状态下,几乎不消耗功率(0.1 μA @ VCC=3 V)。RFW122-M可以外接一个200 Ω的差分阻抗天线(印制版天线)或带有匹配电路的其他天线,在误码率为10-3的条件下,接收灵敏度为-77 dBm。该模块有3根数据控制线,且其数据I/O口是一个串行的数字接口。它的唤醒时间为20 μs,同步时间是1.2 μs。最高数据传输速率为1 Mbps,此时工作电流为33 mA。
为了降低MCU实时处理MAC协议的要求,RFW122-M芯片组提供了RFW122-M与MCU之间的接口芯片RFW-D100。该芯片在MCU和RFW122-M之间提供了一个并行接口;同时提供了对CSMA协议的支持。RFW-D100采用了两种技术来获得比较好的载波侦听的能力: 一种是RSSI(射频信号强度检测),能检测到任何强度的无线传输,避免冲突;另一种是使用RFWaves 网络的载波侦听算法。采用这种技术可以避免与本网络内的或其他网络的RFWaves站点发生冲突。
(1) RSSI(射频信号强度检测)
RSSI机制用来比较某个非RFWaves站点传输的功率超过了一个确定的门限(用一个外部的电阻来设置这个数值,RFW-D100给出了该门限的参考电压和计算公式),比较的结果放在寄存器SSR[7]-COMP_IN中。当MCU内有数据传输时,就去读取该寄存器,根据寄存器的状态确定信道是否处于被占用的状态,从而确定数据是否被传输。
(2) 内部/外部RFWaves网络的载波监听的算法
该机制主要用来监测相似的RFWaves网络。RFWD100利用载波侦听算法监听是否有外部相似的RFWaves网络正在传输数据。如果外部的RFWaves网络正在进行数据的传输,则内部的标志位将被置1,表示信道处于被占用的状态;如果信道由被占用的状态转为空闲的状态,将产生一个中断来通知MCU,此时MCU可以进行数据的传输。
2 硬件设计
系统的微处理器采用Atmel公司的AT89LV52。它是一款基于51系列的低功耗微处理器,支持汇编和C语言,开发环境采用Keil公司 Keil C51(51单片机的汇编和C语言的开发工具);支持汇编、C语言以及混合编程,同时具备功能强大的软件仿真和硬件仿真。系统包含两个半双工的通信终端,来自高层的数据由串口发往MCU,MCU再将数据发往RFW-D100。RFW-D100将数据打包以后送往RFW122-M进行调制,再通过天线发送出去。系统框图如图1所示。
图1 系统框图
MCU与RFW122-M及RFW-D100的连接关系如图2所示。
图2 MCU与RFW122-M及RFW-D100的连接关系
3 通信协议及软件流程
系统所采用的数据链路层的协议是载波侦听多路访问协议(CSMA)。局域网一般采用共同介质的方法,为此当多个站点要同时访问介质时,就要进行控制。CSMA就是常用的一种方式。当网中站台要发送数据时,先检测是否有别的站台占用了传输媒体。具体做法是:先进行载波侦听,如果发现介质(媒体)空闲,则立刻发送数据;否则,就根据不同的策略退避重发。
由于该系统工作在2.44 GHz的ISM频段,该频段存在较大干扰,所以设计数据包结构时最重要的原则是,以尽量短的时间占用信道,以降低潜在冲突的概率。在传输中,包重叠的概率是与每个发送节点占用共享信道的时间成正比的。因此,若以高比特率传输数据包, 会提高数据被正确接收的概率。RFW-D100最高的空中数据传输速率为1 Mbps,它可以被配置为各种传输速率。在RFW-D100的数据手册中,降低数据速率并不能降低误码率,因此为了缩短数据包在空中传输的时间,降低数据碰撞的概率,在协议中建议以最高的速率传输数据。若把数据分成小包,则每个小包被正确接收的概率又会增加。这样,当干扰出现时,只有一小部分会丢失,而且协议有能力来定位在特定包中损坏的数据。因此可以得出这样的结论:以高的数据速率发送短的数据包,将增强协议处理损坏数据的能力。
3.1 数据包格式
数据包格式如图3所示。
图3 数据包格式
① PREAMBLE:RFWD100 发送PREAMBLE 的目的是使接收机和发送机同步。20 位长,高4位为1111,其他16位可以配置。发送顺序为从高到低。
② NET_FIRST:1字节,网络地址字节。
③ NET_SEC:1字节,网络地址字节。
④ DST_ID:1字节,数据包所发往的目的节点地址。
⑤ SRC_ID:1字节,发数据包的源站地址。
⑥ SEQUENCE:1字节。这个段包括两个值:高4位表示数据序号,低4位表示数据包的类型。低4位代表的含义:0000b为握手数据包, 0001b为握手应答包,0010b为数据包,0011b为数据包的应答包,0100b为拆链包,0101b为拆链的响应包。
⑦ SIZE:1字节。这个段说明包的大小。当设定数据包为固定大小时,SIZE没有意义。
⑧ PAYLOAD:1字节。来自上层软件层的数据。
⑨ CRC:1字节。RFWD100 在发送端给每个包增加CRC 信息,使得接收机对接收的数据进行检测。
在本系统的协议设计过程中,采用小数据包的传输模式,从串口中收到的数据个数(以字节为单位)等于10时,将这些数据打包发送出去。如果收到的数据个数小于10, 并且串口数据的发送已经结束, 则系统也将这些数据打包并发送出去。
3.2 系统状态转移图
系统的状态转移如图4所示,包含4个状态,分别是空闲态、握手态、传输态和接收态。
图4 系统状态转移图
空闲态:如果没有串口中断或外部的握手信号中断,则系统将一直处于空闲状态。
握手态:如果串口中断发生,则表明有上层的数据包需要传输,系统进入握手的状态。
传输态:系统把从串口收到的数据通过无线信道发送出去。
接收态:系统处理接收到的数据包,发往串口,并对从串口到来的数据包做丢弃处理。
3.3 4个状态的处理流程
系统4个状态的处理流程如图5~图8所示。
图5 空闲态流程
图6 握手态流程
图7 发送态流程
图8 接收态流程
系统接收串口数据的缓冲池的大小为15字节。
图6中各个标志位的意义如下:
New_flag串口中有新数据到来(串口中有数据到来,将New_flag置1,在串口中断中设置此标志位)。
Checkact_suc_flag收到握手应答包的标志。收到握手应答数据包后将此标志位置1。
Tx_size系统接收到的来自串口的字节个数。
Tx_end_flag串口中的数据发送完毕。由定时器1控制,定时一段时间。如果在这段时间内没有新的数据到来,则认为串口数据的这次发送完毕。每次收到新的串口数据时重置定时器,定时的时间大于1字节数据传输的时间。
Checkact _send_flag由定时器0控制,在定时的时间内如果没有收到握手应答包,则定时器0溢出,Checkact _send_flag被置1,重发握手包。
图7中各个标志位的意义如下:
New_flag串口中有新的数据到来。若串口有数据到来,则将New_flag置1,在串口中断中设置此标志位。
Pk_sended_nack一个数据包已经发送出去但还没有收到确认包时将此位置1,为0时表示系统可以发送数据包。
Ack_flag为1表示发出的数据包收到了确认。
Tx_end_flag从串口发来的数据已经停止了发送。
Exceed_TIming_flag在发送完每一个数据包的同时打开定时器0,从定时器0打开到定时器0溢出的这段时间内,如果没有收到确认包,则认为数据包发送失败,将Exceed_TIming_flag置1;如果在这段时间内收到确认的数据包,则将定时器0关闭。
Tx_size系统接收到的来自串口的字节个数。
图8中各个标志位的意义如下:
Lock_flag本节点收到了其他节点发来的数据包。
Tx_to_s_flag在接收状态,如果MCU中的缓冲区内仍有数据,且Tx_to_s_flag=1,则可向串口发送1字节数据。当MCU的TI中断发生时,将此标志位置1。
4 接口芯片RFW_D100的固件编程
对RFWD100进行固件的编程是通过对RFWD100内的特殊功能寄存器的编程实现的。
SCR2=0x1c配置前的操作;
BLR=0x06配置数据的空中码速为1 Mbps;
PPR=0xca配置数据包的格式;
LCR=0x45配置数据包特殊字节的位置;
NIR=0xbb网络识别地址;
BIR=0xee节点识别地址;
SCR1=0x20打开RSSI;
SCR3=0x03
SCR4=0x03
IER=0x13中断使能;
SCR2=0x02系统处于数据包的搜索状态。
结语
本设计以射频芯片RFW122M及其接口芯片RFED100为核心,采用单片机AT89LV52作微处理器,实现了一个短距离无线数据传输系统。今后的工作是完善和改进该协议,进一步提高无线数据的传输效率。
举报