- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于nRF905的无线数据传输系统
3.2.1 M端协议设计
M端协议主要是从保证可靠接收的角度考虑,程序流程图如图2所示。采用nRF905的CD/AMDR信号作为状态查询,进行正常状态下的快速判断和接收。正常情况下,当M系统发送控制指令后进入接收模式,等待来自S系统的数据。与此同时,S系统在收到M系统的指令后,立即回传数据,M系统收到后,本次通信结束。但是,如果S系统根本就没有收到M系统发送的指令,或者S系统虽然收到M系统发的指令且也回传了数据,但M系统却没有像预期的那样收到该数据,则势必造成了M系统和S系统都处于接收状态,等待来自于对方的数据。
为了避免陷入死循环,在单片机程序中专门设计了中断子程序,用于处理此类情况。中断子程序采用的中断源是TMR1定时器。一旦死循环运行超时,就会触发TMR1中断,程序跳转到中断子程序。中断子程序的任务是打破当前的僵局,使双方的程序运行都能回到正常的轨道上。考虑到S系统此时处于接收模式,正在等待来自M系统的指令,所以,M系统在中断子程序中重发上一条指令,然后返回主程序中,继续查询CD/AM/DR信号的状态,等待来自S系统的数据。而S系统收到该指令后判断是否是S端协议内容。通过M端重发指令的方式,使双方再建立一次通信,跳出上一次的死循环。如果本次通信仍然不成功,那么单片机程序会遵循中断一重发机制运行,直到通信成功为止。当然,如果通信双方的距离已经超出了信号的有效覆盖范围,通信是不会成功的。
3.2.2 S端协议设计
S端的协议处于从控位置,相对简单。设计中,仍然通过查询nRF905的CD/AM/DR状态接收指令,关键要解决指令的判读问题,即分清是正常流程内指令还是重发指令。这一问题在冲击波存储测试系统的工作参数设定阶段不存在,因为每一个参数设定指令都不一样,S端第一次收到某个指令肯定是正常流程内指令,第二次收到该指令则肯定是重发的指令。但在读数阶段就不同了,因为存储数据可能有几兆字节,如此大的数据量需要拆成无数个包才能发送,而M端不可能每读一次都使用不同的指令。为此,S端协议采用两个读数指令K1和K2,循环发送。K1之后收到K2或K2之后收到K1均为正常,S端协议从测试系统读取存储数据并缓存到内部寄存器,然后无线发送出去。若连续收到两个相同的指令,说明M端没有收到刚才的数据,此时,S端从内部寄存器中读取刚才的数据,进行无线重发,而不再从测试系统中读取。S端的协议流程如图3所示。
4 结束语
系统调试成功后,进行了多次数据传输实验,从实验数据可得,无线信号在室内传输环境下的损耗要远大于室外街道环境;在同等条件下,误码率主要与距离延伸有关;过往车辆对数据传输影响不大。该无线数据传输系统已成功应用于多个存储测试系统中。实现了控制指令和测试数据的无线传输
作者:荚庆 王代华 张志杰 来源:中电网