作者:刘佳,周广荣,夏志忠 大连海事大学信息工程学院
摘要:主要介绍基于MSP430F133 单片机和RFW 模块的短距离无线数据通信,重点说明了
RFW 模块的RFW-D100 和RFW102 的特点和实际应用,文中给出了相关的硬件设计。无线数据
通信的实现是基于CSMA 协议,在固件编程有所体现。
1 前言
随着信息技术的不断发展,人们对通信技术的需求越来越强,摆脱有线网络的束缚实现
无线通信始终是大家关心的问题,当今无线通信研究越来越热,应用非常广泛,使人与人之
间的通信更加方便快捷,更具有市场发展前景。
2 硬件设计
本设计主要实现短距离无线数据通信,由两个部分组成:发送终端,接收终端。无线数
据的收发是通过串口来实现的,通过串口给无线发送端送数据,无线接收端再通过串口将接
收的数据传给PC。发送终端和接收终端的硬件设计是一样的,只不过是在固件编程时有所
不同。系统实现框图,如图一所示。
图一系统实现框图
设计中采用的处理器为MSP430F133,它是一种超低功耗的混合信号控制器,具有16
位RISC 结构,CPU 中的16 个寄存器和常数产生器使MSP430 能达到最高的代码效率。单
片机通过采用不同的时钟源工作可以使器件满足不同功耗要求,适当选择时钟源,可以让器
件的功耗达到最小。外设资源丰富。支持汇编和C 语言。此次开发利用的是IAR 公司提供
的Embedded Workbench 集成开发环境。
下面介绍一下RFW 模块。RFW 模块是由RFWaves 公司开发的,RFWaves 是一家以色
列公司,主要是提供短距离RF 应用的解决方案。首先介绍一下RFW102,它是一个可靠而
耐用的短距离RF 收发器芯片组。它是一个物理层RF 收发器,工作在2.4GHz,包含一个印
在印制板上的天线,无需外部天线。工作电压很宽:2.7~3.6V,适合不同的电池供电;功
耗低:待机电流仅1µA,唤醒时间20µs。模块提供一个扩频脉冲管作通信用,速率达到1Mbps。
有效室内距离可达25 米,在RF 前端增加一个功率放大器可将有效范围扩展到100 米。
RFW102 芯片组包括RFW24,RFW488C 和RFW488R 三个芯片。RFW24 完成所有时序、
放大、切换、发送和接收功能;RFW488C 是一个完全非差分无源器件,是DSSS(直接序列扩
频技术)扩频和去扩频的基本单元,实现4 引脚SAW 相关器;RFW488R 是单端口SAW 谐振器,
谐振频率为488MHZ,可作为系统的CW 谐振源。RFW-D100 是对RFW-102 的补充,使得能
够在MCU 上实现无线通信协议。RFW-D100 主要特点是提供输入输出缓存,对数据包地址
进行滤波,循环冗余码校验,看门狗定时器,工作频率为6-24M,低功耗模式:后台处理和
电源关闭模式,提供网络载波侦听,对RFW-D100 的发送和接收的时钟漂移进行补偿,提供中断,用于载波侦听机制的无线电信号增强指示器(RSSI)。在RFWaves 的应用中,MCU
主要负责MAC 层协议。RFWD-100 可以缓解MCU 处理MAC 协议实时的要求。RFW-D100
在MCU 和RFW-102 提供了一个并行接口,它可以把快速连续输入的数据转为8-bit 字,这
样就非常适合8-bit 的MCU 进行处理,它采用16 个字节的FIFO 对输入的数据进行缓存,
提高了MCU 使用RFWD-100 的效率。并不是一个中断读一个字节,每一个中断MCU 可以
读16 个字节,这就减少了MCU 处理数据的开销。
无线数据通信的收发硬件设计是一样的。基于电路的复杂性,下面给出电路图得主要连
线。如图二所示
图二系统硬件实现的主要连接图
硬件设计中对MCU 提供双晶振系统,低频晶振32.768K 为RS232 接口提供频率支持,
高频晶振8M 为系统运行的主时钟,P1 口的8 位为RFW-D100 的8 根数据线,P4.0~P4.4 为
RFW-D100 5 根地址线,P2 口与P3 口部分管脚为RFW-D100 的控制脚。由于MSP430 系统
无对外开放总线,故MSP430 对RFW-D100 的读写是通过模拟实现的。RFW-D100 主要实
现对数据的输入输出缓冲,其内部的寄存器标志着发送和接收时各种事件的发生。RFW102
主要完成对数据的无线发送和接收。
3 软件设计
3.1CSMA 协议
局域网一般采用共同的介质的方法,为此当多个站点同时要访问介质时,就要进行控制。
CSMA(载波侦听多路访问)就是常用的一种方式。当网中站台要发送数据时,先检测是否
有别的站台占用了传输媒体?方法是先进行载波侦听,如果发现介质(媒体)空间,就立刻
发送数据;否则就根据不同的策略退避重发。
3.2 数据包结构介绍
在介绍具体软件设计之前学要了解一下基于CSMA 协议数据包结构。如表一所示:
表一:数据包的结构
1. Preamble:RFW-D100 发送PREAMBLE 的目的是为了使接收机和发送相同步。20 位长,高四位为1111,由RFW-D100 自动产生,对RFW102 的接收段进行初始化。其它16 位由PRE—L 和PRE—H 决定。发送顺序为从高到低。
2. Network:4 个字节,指明数据包属于哪一个网络。
3. Dst/Src:1 个字节。由节点发送到主控制器,叫做源段;由主控制器向节点发送叫目的段。源段的值是指由节点向主控制器发送的ID 号;目的段值是指由主控制器向节点发
送的ID 号。
4. Sequence:1 个字节。这个段包括两个值。高四位表示数据序号;低四位表示应答包的
序号。包的类型由这个段值决定,低四位都为0 表示这是一个数据包,高四位都为0 表示这是一个应答包。如果都不为0 则表示既是数据包又是应答包。
5. Size:1 个字节。这个段说明包的大小。包的结构有两种类型由PPR[5](Packet ParameterRegister)决定。
6. Payload:包含来自上层软件层的数据
7. CRC:2 个字节。RFW-D100 在发送端给每个包增加CRC 信息,使得接收机对接收的数
据进行检测。接收端的CRC 计算的结果和接收到的包的CRC 段相比较,如果CRC 的比较结果相同,接收机认为包接收正确;如果CRC 的比较结果不等,则接收机认为接收到的包不正确。CRC 通过PPR[3:4]来配置。需要注意的是,RWF-D100 对每一个接收的包进行CRC 计算,CRC 的值并不放在RX_FIFO 中,只把计算结果放在RX_FIFO中,作为包的最后一个字节。0X55 表示CRC 接收正确;0XAA 表示CRC 接收错误。可通过读SSR[0](System Status Register)来判断。
3.3 固件编程
1. 对RFWD-100 和REW102 初始化,包括复位,启动RFW102 等操作。主要是对RFD_RST、
IDLE_RST、WDT_RST、POWER_DOWN、IDLE_MODE、WDT 进行相关设置。
2. 主程序初始化,包括启动晶振,看门狗以及串口初始化。主要是对BCSCTL2设定选定主
系统时钟为XT2;对UCTL0设定串口数据位为8位,低频晶体为串口提供工作频率,设定波特率寄存器UBR和波特率调整寄存器UMCTL0,使得串口的数据传输率为4800bps,并设定模块使能寄存器在发送端接收模块使能在接收端发送模块使能,通过功能选择寄存器设定P3.4为发送,P3.5为接收。
3. 无线发送端:启动RFW-D100设置为发送状态,其中READ()为读RFW-D100数据,WRITE
()为向RFW-D100写数据。
WRITE(SCR4,3); //RF_active,开放所有中断
WRITE(SCR2,0x1c); //D100处于接收状态,RX_FIFO复位
WRITE(BLR,18); //位长为18+6=24
WRITE(PPR,0x3A); //发送包为固定大小,
WRITE(PSR,12); //PSR(Packet Size Register)设定包的大小为12个字节
WRITE(PRE_H,0x55);
WRITE(PRE_L,0xBB);//PREAMBLE=0X55BB
WRITE(IER,0x10);//IER中断使得寄存器设定TX_EMPTY=1
WRITE(SCR3,128);//SCR3(系统控制寄存器)LOW_MODE=1
WRITE(SCR4,0);
READ(TFSR,REG1);//TFSR(Transmit FIFO Status Register)
4. 无线接收端:启动RFW-D100为接收状态
WRITE(SCR2,0x0c);//初始化RFW-D100为接收模式,接受缓冲区复位
WRITE(BLR,18);
WRITE(PSR,12);
WRITE(PPR,0x3A);
WRITE(PRE_H,0xF5);
WRITE(PRE_L,0xBB);
WRITE(SCR4,0x03);//RF_ACTIVE=1,所有的中断使能
WRITE(IER,0x02);//LOCK_OUT中断使能,表示如果包正常接收则则引发LOCK_OUT中断
WRITE(SCR2,0x62);//PREAMBLE寻找使能
5. CSMA协议要求一个节点在发送之前先侦听通道,如果通道中有其它节点在使用通道,则
随机等待一段时间再发送。载波侦听协议使得通道带宽利用率更加有效,每一个节点的
功耗更低。RFW-D100提供两种技术进行载波侦听,一个是RSSI(Radio Signal Strength
Indicator),另一个是网络载波侦听算法。本设计中使用RSSI技术,使用内部比较器
来检测发射功率是否超过一个门限值,这个门限值由外部电阻来确定,当检测到强的发
送信号时则停止发送。通过设置SCR1[5](COMP_EN)来使能或禁止RSSI比较器,比较输
出的结果在SSR[7](COMP_IN)中。可以通过以下程序来实现。
WRITE(SCR1,0x20);
do
{
READ(SSR,REG1);
}
while(REG1&SSR_COMP_IN);
4 结论
先把设计的两块板通过串口与PC机相连,一块作为发送端,另一块作为接收端,这两块
板之间有一定的距离,没有任何连线,通过串口给无线发送端送数据,与无线接收端相连的
PC机正确显示相应的数据,则实现了无线数据通信。这时再加入另一块发送端,同样彼此相
隔一定的距离,中间没有任何连线,也在发送数据,这就存在着竞争信道,发生碰撞,导致
数据不能传送的可能性,软件设计中采用了CSMA协议,设定的数据包长度为12位,在接收端
轮流正确显示两块发送端的12位数据。
在USB接口应用比较广泛的今天我们也可以使用USB接口来实现无线通信,同样还可以实
现无线语音通信。
参考文献:
1.泰龙编著,MSP430单片机应用系统开发典型实例,中国电力出版社,2005
2.胡大可编著,MSP430系列单片机C语言程序设计与开发,北京航空航天大学出版社,2003
3.郑少仁王海涛赵志峰米志超黎宁编著,Ad Hoc 网络技术,人民邮电出版社,2005