漫谈IR通讯协议
IR是“InfraRed”的缩定,可译为:红外线,红外线通讯,红外线信息等。要了解IR通讯协议,先要了解红外线是什么。
红外线是波长在750nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人眼看不到的光线。红外线通讯一般用红外波段内的某段范围:波长在0.75um至25um之间。红外数据协会(IRDA)成立后,为了保证不同厂商的红外产品能够获得最佳的通讯效果,红外通讯协会将红外数据通讯所取用的光波波长范围限定在850nm至900nm之内。目前无线电波和微波已被广泛地应用在长距离的无线通讯之中,但由于红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通讯的场合,进行点对点的直线数据传输。
知道什么是红外线之后,要进一步了解IR通讯就很有必要了解红外线数据协会(InfraRed Data Association,简称IRDA)。
IRDA是为了建立统一的红外线数据通讯标准而成立的一个组织。1993年,由HP、COMPAQ、INTEL等二十多家公司发起成立了红外线数据协会(IRDA);一年多后,发布第一个红外线数据通讯标准,即IRDA1.0,简称SIR(Serial InfraRed),是一种HP-SIR开发出来的一种异步的、半双工的红外线通讯方式;1996年,发布IRDA1.1标准,即FIR(Fast InfraRed),其通讯速率有质的飞跃;之后,IRDA又发布了VFIR(Very Fast InfraRed)技术,进一步提升了IR 通讯速率,使其在大数据量通讯传输方面也占有一席之地。
初步了解以上IR的基础知识后,我们进入研究IR的内核:IR通讯协议。
面向不同的对象层次,IR标准有三个基本的规范和协议:
1)物理层规范(Physical Layer Link Specification,简称PHY);
2)连接建立协议(Link Access Protocol,简称IrAP);
3)连接管理协议(Link Management Protocol,简称IrLMP)
这三个协议是其它一切协议的基础和规范,其实我们建立如此繁锁协议目标只有一个:充分利有硬件资源,使IR系统在固定的硬件条件下得到最高的传输速率,最安全稳定的性能。在低端物理层中,选取一种良好的编码方式是十分重要的,如“HHH1,13”码;而在相关的连接协议中,如何保证数据快速而准确地传送与接收是至关重要的,要实现数据良好收发,不仅硬件要求稳定,数据编码有效,建立一个合理的数据包格式更是重点。
在IRDA中,16MBPS数据结构为:
引导符启动数据CRC 填充
段
停止
空闲
段
以上是个格式完整的数据包格式。在我们针对具体IR设备的应用中,可根据实际需要进行取舍或增减。
以下以PL-880的IR驱动程序来说明在实际应用中IR协议的建立与调整。
要实现IR通讯,其实就是要使两个设备通过IR进行相互数据交流,数据的发送与接收是通讯内容的全部。所以实现IR通讯,就是要实现数据的发送与接收这两步。下面我们就发送和接收过程所遇问题进行讨论。
IR通讯设备均有一个发送端口(TXD)和一个接收端口(RXD),在物理层发送与接收是以位(bit)为单位元进行传输的,现有的设备一般已把这过程程序封装在硬件内。我们要做的只是把要发送的数据(byte字节)放到发送端口(TXD),触发IR中断把数据发送出去。这一过程看似很简单,但实际上我们同
时要考虑到以下几个问题:
1)IR是半双工工作的,同一时刻只能做一件事:发送或接收。所以发送数据时先要看IR是否处于繁忙(BUSY)状态(正在发送或接收数据),若
BUSY只能进行等待到IR空闲时方可发送数据。
2)数据发送出去后,由于外界各种因素的影响,一次发送对方收不到或接收错误的可能性很大。为了保证数据能被正常接收到,必须要有一个应
答交流。也就是当接收方接收到数据后,发送一个应答包,并把接收到
的数据放在应答包一起发送过来;发送方发送数据后进入等待状态,接
收到应答包后检查对方收到的内容是否为刚才所发的数据,若不是则要
重发。
3)要发送较多数据时,要计算每个数据包所需的发送时间、等待延时以确定下一个数据包的发送时刻。
4)要考虑到两机同时发送数据的情况,虽然机率不高,但若漏了当这一事件出现时,设备将会进入死循环或死机状态。
发送过程尽管复杂,但要解决并不难,IR通讯的最大难点是在它的接收过程,接收过程要考虑的问题比发送过程考虑到的还要多:
1)由于IR对外界光热敏感,并且对机内电流变化也有反应,所有经常会接收到一些无效的非法数据。怎样去辨认当前接收到的数据是有效还是无
效是非常重要的一点。
2)每接收到一个数据(假定为有效数据)后要记录下来,并发一个应答包,但该应答包的传送过程中也会出现意外,对方(发送方)接收不到或接
收错误时会重发。这样一来就会出现接收数据重复的问题。
3)接收到有效数据后,机器要从接收状态转入发送状态(发送应答包),这一转换过程的延时及何时发送应答包也是一个要考虑的问题;
4)除了要辨别有效数据和非法数据外,还要确定当前数据是新数据还是应答包数据。若不加辨别,接收到数据就发送应答包,那么两机就会陷入
发送与接收的死循环中去,也就是IR永远处于繁忙状态;
IR通讯协议除了要解决以上问题外,PL880机器还要考虑到另一个的问题:速度。发送与接收的问题也是一般网络运行要解决的问题,只要仿照网络协议也不难解决,但是我们要面临的另一个问题是IR通讯的速度是远比不上有线连接的网络系统。不要说PL880的CPU处理速度太慢,IR本身就存在着热延时问题(IR接收与发送数据是靠红外线热进行传送的,每传送一个数据后IR设备都要有一个回复期),也就是照搬网络上繁锁的操作过程是绝对行不通的。
为了解决以上问题,在PL880中建立了一个较为可行的数据包格式:引导符标志数据
以上数据结构大大减少了其它辅助数据块,加快了IR传送速度。其中各块的意义如下:
u引导符:作为有效数据标志,只有以其引导下的后序数据方为有效数据
u标志:作为新数据或应答包的标志(在大量数据传输中也作为数据包序号)
u数据:要发送的数据