文献标识码: A
文章编号: 0258-7998(2010)12-0124-04
近些年来,随着集成电路技术的发展,ISM频段单芯片的无线数据通信IC的性能日益提高,短距离无线应用领域也在不断地扩大,其中包括消费电子、工业控制、安防、自动抄表等诸多领域。数据的无线收发在无线产品设计中占有很大的比重。为缩短产品设计周期以及提高产品的稳定性,使产品设计工程师在设计过程中只需关注系统应用的设计,而将数据收发交付一种成熟稳定的收发系统来完成。为此,本文设计了一种基于SI4432+STM32F103的高性能无线收发平台。
1 STM32F103和SI4432芯片简介
STM32系列是采用ARM CortexTM-M3 内核的闪存微控制器,所有功能都具有业界最优的功耗水平。在结合了高性能(最高72 MHz频率)、低功耗(睡眠、停机和待机模式)和低电压(可2.0 V~3.6 V供电)特性[1]的同时保持了高度的集成性能和简易的开发特性,为用户提供最大程度的灵活性。
SI4432是Silicon Labs公司的ISM频段收发一体芯片,最大输出功率达到了+20 dBm(100 mW),具有“距离之王”的美誉(空旷距离可达2 000 m)。SI4432具有特有的连续频率覆盖范围(240 MHz~960 MHz)、宽工作电压(+1.8 V~+3.6 V)、高灵敏度(在BER<0.1%, 数据速率2.0 kb/s时为-118 dBm)等特点,还集成了一些可节省应用成本的特性,如唤醒定时器、温度传感器、发射和接收数据FIFO、高性能ADC[2],这些特性可大幅简化系统设计师的工作,并允许使用低端的微控制器。高集成度使得外围仅需一个30 MHz的晶体和几个用于匹配/滤波的无源器,因此非常适用于对尺寸和成本敏感的大批量生产中的应用。
2 硬件设计
该平台主要由微处理器ARM7 STM32F103(以下简称STM32)和RF收发芯片SI4432组成。STM32通过SPI接口对SI4432进行初始化配置、数据收发控制等,而SI4432通过nIRQ脚将相应的中断发送至STM32。该平台采用单天线进行数据的收发,所以必须采用RF收发切换开关用于对SI4432的收发状态进行切换, 其中GPIO1控制RF切换开关为发送状态,GPIO2控制RF切换开关为接收状态[2]。系统硬件组成如图1所示。
为满足用户各种不同的设计需求,该平台还提供串口、通用IO口和AD转化接口。其中,AD转化接口可以用于需要处理模拟信号的系统,如有各种传感器的环境监控系统。
3 软件设计
软件编程采用模块化设计思想,系统中各主要功能模块均编成独立的函数由主程序调用。功能模块包括:初始化程序(初始化SPI、 SI4432)、无线发送程序和无线接收程序等。
3.1状态转化
为了最大限度地降低功耗,软件设计中采用SI4432的自动唤醒功能,在没有数据收发时芯片处于空闲状态,定时一段时间后将状态切换至发送或是接收,检查是否有数据的收发。SI4432主要有四种状态:关闭、空闲、发送和接收,这些状态在满足一定的条件时可实现相互转移,状态转移如图2所示。在关闭状态下功耗最低,空闲次之。空闲状态有五种不同的模式,用户可以根据不同的应用灵活选择。这些状态或模式可以在操作模式和功能控制寄存器07H中设定,通过在寄存器07H中设定txon/rxon控制位可以从空闲状态中的任一模式自动转移到发送/接收状态。不同模式/状态下转换需要的时间和功耗都不相同,可以根据系统需要选择最佳的状态和模式。
3.2 无线发送程序流程
无线发送程序负责写入数据载荷,并根据通信协议为数据载荷加上前导码、同步字、数据载荷长度等,形成数据包并将其发送出去,其流程如图3所示。在完成 SPI和 SI4432 的初始化后,通过配置 SI4432 的寄存器3EH来设置包的长度,然后清除发送FIFO,并通过SPI连续写寄存器7FH将待发送数据写入发送 FIFO(字节数小于64 B),最后打开“发送完中断允许”标志,将其他中断都禁止。完成中断使能后,使能发送功能,数据开始发送。当数据包发送完时,引脚nIRQ会被拉低产生一个低电平并通知STM32数据包已发送完毕,当nIRQ引脚变为低时读取中断状态并拉高 nIRQ,否则继续等待。一次数据发送成功后,关闭发送使能,进入下一次数据循环发送状态。
3.3 无线接收程序流程
无线接收程序负责获取有效载荷数据长度,并读取接收FIFO中的有效数据,其流程如图4所示。在程序完成SPI和SI4432的初始化后,打开“有效包中断”和“同步字检测中断”,将其他中断都禁止,并使能接收功能。等待nIRQ引脚因中断产生而被拉低,读取中断标志位拉高nIRQ引脚。若引脚 nIRQ 变成低电平,表示接收到有效数据包,通过寄存器4 BH读取包长度信息,并通过SPI访问寄存器7 FH从接收 FIFO中读取接收到的数据,之后关闭接收使能,进入下一次数据接收状态。
4 高性能应用设计
在实际的产品应用中,通常采用ACK握手信号、载波监听多路访问/冲突防止(CSMA/CA)等机制来保证数据收发的高效、稳定、可靠。而SI4432硬件不支持这些机制。为了增加本系统的高效适应性,设计了以下高性能通信机制。
4.1 基于ACK的双向通信
在无线数据传输过程中,为了确保发送过程的可靠性,发送端需要一应答信号以确保发送数据已被准确无误接收。本设计中,接收端也可以通过ACK数据包发送有效数据至发送端,大大提高了信道的使用率。应答信号数据包格式如图5所示。
图5中,ACK控制字节的数据格式如图6所示。如果发送节点需要一反馈以判断数据包是否到达目的地,则需要将应答请求位(ACKRQ位)置1。发送完数据包以后,自动转为接收状态,等待ACK状态的到来并接收应答信号数据包。如果接收节点接收到有效数据包且检测到ACK控制字节中的ACKRQ位为1,则会自动产生应答信号并且发送至发送节点。应答信息数据包中,ACK控制字节中的应答标志位(ACK位)被置1,并且有效数据为接收节点发给发送方的数据(当不需要发送有用数据时,全部用0x00填充),同时源地址和目的地址相互交换。具体通信过程如图7所示。
程序中,为了防止发送节点长时间地等待,设定只需等待固定的时间,等待的时间长短主要由实际的网络参数决定:是否使能了包转发、实际的数据速率等。若在规定的时间内,发送方未能接收到ACK数据包,则进入ACK接收错误状态;若成功接收将进入休眠、发送或是空闲状态。
使用ACK信号可以实现收发节点的双向通信,能很好地解决手动切换无线收发状态导致双方互相等待的问题,同时只在需要ACK信号的应用中才附带应答有效信息,减少不必要的通信过程,大大提高了系统的稳定性和高效性。
4.2 精简的CSMA/CA发送机制
在无线通信过程中,在一个通信域内可能存在几十个乃至几百个无线终端同时工作。在这样复杂的无线网络中,无线数据发送频繁,发生碰撞不可避免。当数据发送发生碰撞时,意味着有数据帧丢失。为了尽可能地避免由于发送数据时发生碰撞而导致数据帧的丢失,必须引入一种可以避免发送碰撞的机制。
设计中参考了802.15.4中CSMA/CA的相关原理,采用非信标的方式实现符合系统要求的精简的CSMA/CA发送机制[3]。非信标的方式即:结点若有数据要发送,需要先通过CSMA/CA机制进行信道监测,也就是在等待一个随机时间后,对当前信道进行监听,若监测到信道空闲,就可以开始传送数据;若监测到信道忙,则需要重新等待一个随机时间,然后再继续监听信道,具体实现流程如图8[4-5]所示。步骤如下:
(1)在开始发送数据之前先监听信道0.5 ms。如果在这段时间内信道是空闲的(通过读取寄存器26 H的接收信号强度(RSSI)值,则与设定的信道空闲阈值做比较来判断,发送节点将随机延时0或1个时隙(1时隙为1 ms)。如果信道仍然是空闲的就开始发送数据;若信道变得忙碌,则跳到第(3)步骤。
(2)如果在0.5 ms内信道为忙,则发送节点每隔0.5 ms采样一次RSSI值,直到RSSI值小于设定的门阈值或是采样次数达到10次。如果采样次数达到10次,则跳转到步骤(5)。
(3)若信道仍然为忙,则发送方将再等待一随机时间,等待时间的大小是由下式确定:
RandomTime = n×time[1:0]
其中,n是0~15中的一个随机数,time[1:0]可以设定为固定的时间(0.25 ms、0.5 ms、1 ms、2 ms),可以根据应用的需要选择不同的值。
(4)如果在这段时间内信道是空闲的,则发送数据;若忙碌则跳转到步骤(5)。
(5)若尝试的次数超出限定值(MAX_TRY_NUMBER),则跳转到步骤(6)。
(6)如果由于信道忙无法发出数据,则发送节点将返回信道忙错误。
为了验证精简CSMA/CA发送机制的性能,在空旷场地进行了多节点(1个接收4个发送节点)数据收发测试,发送5 000次,MAX_TRY_NUMBER=4,实验结果如表1所示。
由表1可以看出,当距离近、传输速率低时,两种情况丢包率为0;当距离远且传输速率高时,未使用CSMA/CA的丢包率随着距离和速率的增加而大幅增加,而使用CSMA/CA的丢包率则很小,其性能最大可提高28倍。因此,使用精简的CSMA/CA发送机制可以大大减少由于数据冲突而产生的丢包概率,从而提高了通信吞吐率。
5 低功耗处理
STM32和SI4432是模块的耗电“大户”,但它们都提供了低功耗运行功能。STM32支持三种省电模式:睡眠、停机和待机,并带有自动唤醒功能。在本系统中STM32的常态为待机,在接收到任何中断时,将从待机状态切换到正常状态,在执行完任务后,立即从正常状态切换回待机状态。而SI4432中集成了一个基于内部32.768 kHz RC振荡器的定时唤醒器,可以从睡眠模式定期唤醒芯片,而且SI4432内部集成的功放(PA)的输出功率是可编程的,工作电流与发射功率成正比,可根据RSSI的值来动态调整输出功率的值,当RSSI的值大时可减小输出功率;反之,则可增大输出功率[2]。
本文设计的无线收发模块可用于一对一、一对多以及网状网近距离无线通信环境中,系统工作稳定可靠,具有很好的通用性。因STM32自带ADC,SI4432自带温度传感器,稍作改动就可以应用到安防、自动抄表、传感器网络、无线遥控等一些短距离无线通信场合。该平台具有较高的应用价值,为无线数据传输提供了一个很好的解决方案。
参考文献
[1] STMicroelectronics Inc. STM32F10xxx_reference_manual[R]. 2008.
[2] Silicon Laboratories Inc. Si4432 user′s manual[R].2009.
[3] IEEE Std 802. part 15.4: wireless medium access control (MAC) and physical layer(PHY) specifications for lowrate wirelesspersonal area networks(WPANs)[S]. IEEE, 2006.
[4] Silicon Laboratories Inc. EZMACPRO user′s guide[R]. 2009.
[5] 郑朝霞,邹雪城,姜天杰,等. WSN中CSMA/CA协处理器的软硬协同设计[J]. 固体电子学研究与进展,
2009,29(1):132-137.