近些年来,随着集成电路技术的发展,ISM频段单芯片的无线数据通信IC的性能日益提高,短距离无线应用领域也在不断地扩大,其中包括消费电子、工业控制、安防、自动抄表等诸多领域。数据的无线收发在无线产品设计中占有很大的比重。为缩短产品设计周期以及提高产品的稳定性,使产品设计工程师在设计过程中只需关注系统应用的设计,而将数据收发交付一种成熟稳定的收发系统来完成。
1、STM32F103和SI4432芯片简介
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的选择。两个系列都内置32K到128K的闪存,不同的是SRAM的容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗的产品,相当于0.5mA/MHz。
SI4432是Silicon Labs公司的ISM频段收发一体芯片,输出功率达到了+20 dBm(100 mW),具有“距离”的美誉。采用Silicon Labs EZRadioPRO系列ISM频段无线芯片SI4432,在240-960 MHZ频段下输出功率可以达到+20DBm。整个网络分为PC机、中继器和节点三部分,此方案为无线工程师们使用SI4432芯片开发无线网络控制系统,提供了完整的硬件和软件参考。
2、硬件设计
该平台主要由微处理器ARM7 STM32F103和RF收发芯片SI4432组成。STM32通过SPI接口对SI4432进行初始化配置、数据收发控制等,而SI4432通过nIRQ脚将相应的中断发送至STM32。该平台采用单天线进行数据的收发,所以必须采用RF收发切换开关用于对SI4432的收发状态进行切换,GPIO2控制RF切换开关为接收状态[2]。系统硬件组成如图1所示。
为满足用户各种不同的设计需求,该平台还提供串口、通用IO口和AD转化接口。其中,AD转化接口可以用于需要处理模拟信号的系统,如有各种传感器的环境监控系统。
3、软件设计
软件编程采用模块化设计思想,系统中各主要功能模块均编成独立的函数由主程序调用。功能模块包括:初始化程序、无线发送程序和无线接收程序等。
3.1、状态转化
为了限度地降低功耗,软件设计中采用SI4432的自动唤醒功能,在没有数据收发时芯片处于空闲状态,定时一段时间后将状态切换至发送或是接收,检查是否有数据的收发。SI4432主要有四种状态:关闭、空闲、发送和接收,这些状态在满足一定的条件时可实现相互转移,状态转移如图2所示。在关闭状态下功耗,空闲次之。空闲状态有五种不同的模式,用户可以根据不同的应用灵活选择。这些状态或模式可以在操作模式和功能控制寄存器07H中设定,通过控制位可以从空闲状态中的任一模式自动转移到发送/接收状态。不同模式/状态下可以根据系统需要选择的状态和模式。
3.2、无线发送程序流程
无线发送程序负责写入数据载荷,并根据通信协议为数据载荷加上前导码、同步字、数据载荷长度等,形成数据包并将其发送出去,其流程如图3所示。在完成 SPI和 SI4432 的初始化后,通过配置 SI4432 的寄存器3EH来设置包的长度,然后清除发送FIFO完成中断使能后,使能发送功能,数据开始发送。当数据包发送完时,引脚nIRQ会被拉低产生一个低电平并通知STM32数据包已发送完毕,当nIRQ引脚变为低时读取中断状态并拉高 nIRQ,否则继续等待。数据发送成功后,关闭发送使能,进入下数据循环发送状态。
3.3、无线接收程序流程
无线接收程序负责获取有效载荷数据长度,并读取接收FIFO中的有效数据,其流程如图4所示。在程序完成SPI和SI4432的初始化后,打开“有效包中断”和“同步字检测中断”,将其他中断都禁止,并使能接收功能。等待nIRQ引脚因中断产生而被拉低,读取中断标志位拉高nIRQ引脚。若引脚 nIRQ 变成低电平,表示接收到有效数据包,并通过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,并且有效数据为接收节点发给发送方的数据同时源地址和目的地址相互交换。具体通信过程如图7所示。
程序中,为了防止发送节点长时间地等待,设定只需等待固定的时间,等待的时间长短主要由实际的网络参数决定:是否使能了包转发、实际的数据速率等。若在规定的时间内,发送方未能接收到ACK数据包,则进入ACK接收错误状态;若成功接收将进入休眠、发送或是空闲状态。
使用ACK信号可以实现收发节点的双向通信,能很好地解决手动切换无线收发状态导致双方互相等待的问题,同时只在需要ACK信号的应用中才附带应答有效信息,减少不必要的通信过程,大大提高了系统的稳定性和高效性。
4.2、精简的CSMA/CA发送机制
在无线通信过程中,在一个通信域内可能存在几十个乃至几百个无线终端同时工作。在这样复杂的无线网络中,无线数据发送频繁,发生碰撞不可避免。当数据发送发生碰撞时,意味着有数据帧丢失。为了尽可能地避免由于发送数据时发生碰撞而导致数据帧的丢失,必须引入一种可以避免发送碰撞的机制。
设计中参考了802.15.4中CSMA/CA的相关原理,采用非信标的方式实现符合系统要求的精简的CSMA/CA发送机制[3]。非信标的方式即:结点若有数据要发送,需要先通过CSMA/CA机制进行信道监测,也就是在等待一个随机时间后,对当前信道进行监听,若监测到信道空闲,就可以开始传送数据;若监测到信道忙,则需要重新等待一个随机时间,然后再继续监听信道,具体实现流程如图8[4-5]所示。步骤如下:
㈠、在开始发送数据之前先监听信道0.5 ms。如果在这段时间内信道是空闲的(通过读取寄存器26 H的接收信号强度(RSSI)值,则与设定的信道空闲阈值做比较来判断,发送节点将随机延时0或1个时隙(1时隙为1 ms)。如果信道仍然是空闲的就开始发送数据;若信道变得忙碌,则跳到第㈢步骤。
㈡、如果在0.5 ms内信道为忙,则发送节点每隔0.5 ms采样RSSI值,直到RSSI值小于设定的门阈值或是采样次数达到10次。如果采样次数达到10次,则跳转到步骤㈤。
㈢、若信道仍然为忙,则发送方将再等待一随机时间,等待时间的大小是由下式确定:
RandomTime = n×time[1:0]
其中,n是0~15中的一个随机数,time[1:0]可以设定为固定的时间(0.25 ms、0.5 ms、1 ms、2 ms),可以根据应用的需要选择不同的值。
㈣、如果在这段时间内信道是空闲的,则发送数据;若忙碌则跳转到步骤㈤。
㈤、若尝试的次数超出限定值(MAX_TRY_NUMBER),则跳转到步骤㈥。
㈥、如果由于信道忙无法发出数据,则发送节点将返回信道忙错误。
为了验证精简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]。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。