红外通讯协议在嵌入式系统中的实现(红外通讯协议在嵌入式系统中的实现方法)

网友投稿 984 2022-08-25

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

红外通讯协议在嵌入式系统中的实现(红外通讯协议在嵌入式系统中的实现方法)

摘要:从红外通讯协议的特点、基本原理对红外无线通信技术进行了分析,结合实际例程探讨了红外数据通信在嵌入式系统中的基本设计要点。

红外和蓝牙协议是两种较流行的短距离无线通信协议。但目前蓝牙协议各大厂商尚未有一个统一的标准规范,加之硬件价格较为昂贵的缺点,因此市场上红外通信在手机、笔记本电脑等小型移动设备中仍然应用广泛,在嵌入式系统中的实际应用有着较高实际意义。

1 红外协议背景

红外线是波长在750nm至1mm之间的电磁波,其频率高于微波而低于可见光,是一种人的眼眼看不到的光线。目前无线电波和微波已被广泛应用在长距离的无线通信中,但由于红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通信场合点对点的直接线数据传输。为了使各种设备能够通过一个红外接口进行通信,红外数据协议(Infrared Data AssociaTIon,简称IRDA)发布了一个关于红外的统一的软硬件规范,也就是红外数据通讯标准。

2 红外协议基本结构

整个红外协议栈比较庞大复杂,在嵌入式系统中,由于微处理器速度和存储器容量等限制,不可能也没必要实现整个的红外协议栈。一个典型的例子就是TInyTP协议中数据的拆分和重组。它采用了信用片(creditcard)机制,这极大地增加了代码设计的复杂性,而实际在红外通信中一般不会有太大数据量的传输,尤其在嵌入式系统中完全可以考虑将数据放入单个数据包进行传输,用超时和重发机制保证传输的可靠性。因此可以将协议栈简化,根据实际需求,有选择地实现自己需要的协议和功能即可。

3 红外协议数据基本传输原理

由于硬件接口限制,嵌入式系统中红外通信的速率基本在9600bps~115.2kbps之间。这里是通过硬件电路板上的异步通信收发器(UART)进行红外数据编码和无线传输。在115.2kbps速率下红外采用RZI的编码调制方案,脉冲周期为3/16位周期。数据校验采用CRC16。其基本思想是将要发送的数据按照CRC16算法(CRC算法可以参考相关资料)进行打包校验,在接收时进行CRC解包并与常数OXF0B8比较,若匹配即数据校验无误。红外数据传输以帧为基本单位。帧是一些特定域的组合,其中红外协议底层字节包格式如图2所示。

各个域含义如下:STA为开始标志,即0x7E、ADDR为8位的地址域;DATA为数据域;FSC为16们的CRC校验码;STO标志帧结束,在接收两个连续的帧时必须至少有3个以上的1后则标志该帧有错误,设备会放弃该帧。在红外数据实际传输过程中,为了延时控制考虑,一般在数据帧头添加多个STA域,通常采用连续11个0x7E达到延时目的。在接收时,当收到多个STA域时当作一个来处理,多余的STA域被忽略。红外数据传输的状态机流程如图3所示。

4 嵌入式系统中红外协议实现设计

笔者采用Sitronix公司的ST2204电路板为硬件平台,处理芯片内核为65C02。ST2204电路板使用了集成的8位处理器,寻址能力达到了44M字节,并提供了低电压检测功能。由于2204集成了上述这些功能,非常适合省电、支持长电池寿命的手持移动设备嵌入式设计实现方案。在固件设计、软件设计方面采用了汇编语言。65C02上的汇编采用存储器映象方式,并广泛使用了零页寻址,因此使用起来十分方便、高效。整个设计实现可分为硬件设计和软件设计两部分。硬件设计包括电路设计和固件程序(Firmware)的编写;软件设计包括CRC数据编码校验、数据收发及主站(Primary)、辅站(Slave)状态要流程实现等。

在硬件设计方面根据对设备的需求和硬件板芯片性能,可以设计出相应的电路在仿真板上进行实验。固件程序和编写可采用分块的方法,例如初始化(Initilize)模块、中断处理(Interrupt)模块、时钟(Timer)事件处理模块等。初始化模块可根据硬件板的指南说明(Specification)提供的各个寄存器值设备初始化参数;中断处理模块可按照中断向量表提供的入口地址编写,其基本要求短小精悍,运行的时钟周期与微处理器频率和设备需求的波特率紧密相关。时钟事情处理可根据硬件板提供的基本时钟设备不同的时钟精度,以满足不同的需求。在红外传输实际设计中定时器主要用于三个方向:第一是sniff探查过程中主站发广播帧后辅站超时未响应的处理;第二是超时重发控制;最后一个是数据传输过程中轮转时间片的控制。其中第三个方面要求的精度比较高,红外协议制定的标准是在25ms~85ms之间。因此有必要把超时处理放在中断处理。在程序编写时使用信号量和程序计数器进行时间控制。其基本思路得设备一个程序计数器进行累加计时,当各自事情时间到达时分别设置三个信号量来标志事件处理,当事件处理完毕后重置各自信号量,转入重新计时。

/*******************************************

* UART Receiver Interrupt Service Routine

********************************************/

ISR_URX:

pha

phx ;压栈,保存通用寄存器值

cld ;清空十进制标志位

ldx #00001100B ;允许接收,并设置可以接收下一字节

stx ldx mBagLen cpx #IrDAb_BAG_LEN ;一个包的长度 bcs ferr_over ;溢出否 lda sta mReadBuff,x ;写数据 lda sta mIrdaByteFlag ;保存状态标志位 inc mBagLen ;计数器++ bra ?exit ?err_over; smb0 ?exit; plx ;出栈,恢复通用寄存器值 pla rti 该中断处理程序在硬件收到一个字节时触发。它先将通用寄存器值压栈保存,接下来进行状态寄存器的控制,并检查一些状态标志,然后进行数据的接收;将数据保存在一个缓存里,并进行溢出等状态的检测和控制。最后恢复通用寄存器的值,返回中断调节函数。按照类似的原理可以编写出红外发送方程序。编写数据收发中断程序有一点要注意,程序代码量和处理器主频以及选择的红外波特速率是密切相关的。若不注意就很容易造成“丢中断”的现象,这是应该避免的。还有一点要说明:UART是工作在半双工模式下,在一些实时系统和时间精度要求较高的应用中是不能同时进行收发数据的。但由于其收发时间片较短(最长为500ms),在一些普通应用中可以模拟成同时收发。 在程序编写完后对其进行编译/连接定位,用调试器以16进制的形式加载在主机开发系统中即可进行模拟调试。但是模拟调式不能百分之百地模拟硬件的全部特性。它主要用于调试软件逻辑、状态机流程。对于调试UART数据收发等实时性较强的硬件特征还需到目标系统上进行验证。

上一篇:三种网络硬件架构的原理及优劣势剖析(网络硬件结构)
下一篇:变电站运维云平台系统在台商大厦的设计与应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~