基于ARM920T的红外通信系统的设计
扫描二维码
随时随地手机看文章
摘 要: 提出了采用以基于内核ARM920T的嵌入式微处理器S3C2440A为核心,以基于嵌入式Linux的ZHX1403为红外收发器的红外通信系统的设计方案。设计了红外收发器在嵌入式Linux操作系统下的驱动程序,并给出了红外通信系统应用的设计编程方法。
关键词: 红外通信;ARM920T;S3C2440A;Linux;ZHX1403
目前,嵌入式系统已经进入了蓬勃发展的时代,越来越多的带红外通信功能的嵌入式设备走进人们的生活当中。红外通信是利用红外光进行通信的一种空间通信方式。红外通信标准IrDA(Infrared Data Association)是目前IT和通信业普遍支持的近距离无线数据传输规范。尽管通信距离只有几米,却有很多优势:红外连接比有线连接更安全可靠,并且避免了因线缆和连接器磨损和断裂造成的检修;它的小型化和低成本,很适合应用在便携式产品中;并且红外通信成本低廉,跨平台适应性好,传输速率高,适宜用于低成本、跨平台、点对点高速数据连接,尤其适用于嵌入式系统。
1 IrDA标准简介
红外标准IrDA的章程是建立通用的、低功率电源的、半双工红外串行数据互联标准、支持近距离、点到点、设备适应性广的用户模式。建立该标准是在各种设备之间较容易地进行低成本红外通信的关键。
IrDA就是一个点对点的协议,用在近距离进行异步串行传输。IrDA规范1.0定义了数据传输率最高到115.2 kb/s的红外通信;规范1.1将数据传输率提高到4 Mb/s,并保持了对版本1.0产品的兼容; 规范1.2定义了最高速度为 115.2 kb/s下的低功耗选择;规范1.3将这种低功耗选择功能推广到1.152 Mb/s和4 Mb/s[1],规范1.4废弃并替代了规范1.3,定义了最高速度为16 Mb/s下的低功耗选择[2]。
2 红外通信系统的总体方案
基于ARM920T的红外通信系统由软、硬件两部分组成。硬件部分包括基于ARM920T内核的微处理器S3C2440A及存储器等硬件开发平台和基于红外收发器ZHX1403的红外通信模块两部分;软件部分包括红外通信模块驱动程序、红外通信应用程序和嵌入式Linux操作系统三部分。
3 红外通信系统的硬件设计
3.1 硬件开发平台
嵌入式系统硬件开发平台采用S3C2440A为控制器。S3C2440A是32 bit RISC处理器,内嵌ARM920T核。它的低功耗,简洁,美观和全静态设计特别适用于对成本和功耗敏感的应用场合。S3C2440A提供手持设备和低功率的一般应用的方案,以及高性能的微控制器解决方案[3]。
S3C2440A有如下特点:(1)最高可达400 MHz的主频;(2)内部集成LCD控制器(高达4 K彩色STN和256 K色TFT)液晶显示专用的DMA;(3)3路异步串行通信接口(支持IrDA1.0,64 B的FIFO发送和64 B的FIFO接收);(4)IIS音频编解码器接口;(5)内置看门狗定时电路及实时时钟(RTC);(6)内部集成两路USB主控制器和1路USB设备控制器(版本1.1);(7)4路PWM定时器,1通道内部定时器/看门狗定时器;(8)130个通用I/O端口,24通道外部中断源;(9)8路10 bit ADC和触摸屏接口;(10)增强型ARM架构的MMU支持WinCE、嵌入式Linux操作系统。
3.2 红外通信模块
ZHX1403是ZiLOG公司出品的一款专用于PDA、网络应用、医疗电子、手持式设备的红外收发器,且与IrDA1.4协议标准兼容[4]。它支持所有红外通信协议支持的SIR红外传输速率,采用半双工串行传输方式,并具有Always On技术,使得长时间的红外功能开启成为可能,为红外设备的应用增加了更多的可能性。它具有极小巧的外型尺寸(7.3 mm×2.8 mm×1.9 mm),应用电路的空间也是非常小,只需要外接两个外部元件,与其他支持IrDA标准的收发器间的典型数据连接距离可达1 m。
ZHX1403有7个引脚,依次是NC、Vcc、GND、SD、RXD、TXD、LEDA。ZHX1403与S3C2440 处理器连接电路如图1所示。LEDA通过一个外接的电阻接到Vcc上,给红外管提供工作电流。ZHX1403接收数据输出端口TXD与S3C2440A的GPH4/TXD1连接,ZHX1403发送数据输入端口RXD与S3C2440A的GPH5/RXD1。掉电模式使能控制端SD与S3C2440A的GPB0/TOUT0连接,用来将内部的电路控制在关闭模式。ZHX1403把接收到的数据通过GPH5/RXD1传送给S3C2440A,S3C2440A把预发送的数据通过GPH4/TXD1发送给ZHX1403的TXD端口,再通过红外收发器发射管发送。
4 红外通信系统的软件设计
4.1 红外通信协议的实现
红外数据通信标准包括基本协议和特定应用领域的协议两类。类似于TCP-IP协议,它是一个层式结构,其结构形成一个栈,如表1所示[5]。
其中有3个基本的规范和协议,即为必要协议:(1)红外物理层协议 IrPHY(Infrared Physical Layer);(2)红外连接访问协议层 IrLAP(Infrared Link Access Protocol);(3)红外连接管理协议层 IrLMP(Infrared Link Management Protocol)。以上每一层的功能是为上一层提供特定的服务。其中物理层协议制定了红外通信硬件设计上的目标和要求,处于最底层。其他两层属于软件协议的范围,负责对链接进行设置、管理和维护。
在IrLMP协议上层的协议都属于可选的红外数据通信协议,可用于特定应用领域的规范和协议:(1)流传输协议(TinyTP);(2)对象交换协议(IrOBEX);(3)模拟串口层协议(IrCOMM);(4)局域网访问协议(IrLAN);(5)信息访问服务协议(IAS)。
驱动部分是协议栈的最主要部分,包括了IrLAP、IrLMP、TinyTP、IAS、IrOBEX、IrCOMM和IrLAN等协议。IrLAP、IrLMP是两个必选的软件协议。物理层上的第一层为IrLAP,它的功能是支持链路初始化、设备地址目录、解决冲突、创建连接、数据交换、接触连接和链路关闭,并且规定了红外数据包的帧结构及红外通信的错误检测方法。IrLMP提供建立在IrLAP连接上的多路复用及数据链路管理。TinyTP对数据传输进行流控制。IAS提供一个设备所拥有的相关服务检索表。IrOBEX提供文件和其他数据对象的交换服务。IrCOMM使当前的应用能够在IrDA平台上使用串、并口通信,而不必进行转换。IrLAN能为笔记本电脑和其他设备开启IR局域网通道[6]。
整个红外协议栈比较庞大,在嵌入式系统中,由于微处理器的速度和存储器容量的限制,没有必要实现整个红外协议栈,可以将协议栈简化,根据实际需求,有选择地实现自己需要的协议和功能[7]。
4.2 红外通信模块驱动程序的设计
(1)初始化
IrDA不是单纯的串口物理通信规范,而是一种网络传输控制标准。在Linux操作系统下,红外通信是作为一类特殊的网络设备来支持的。Linux必须按网络设备驱动方法来组织红外数据的网络传输。在linux/net/irda中有红外设备的代码。可以用下面的函数初始化一个红外设备:
struct net_device *alloc_irdadev(int sizeof_priv)
{
return alloc_netdev(sizeof_priv,”irda%d”,irda_device_
setup);
}
当内核启动或加载网络驱动模块的时候,就会调用初始化过程。首先检测网络物理设备是否存在,通过检测系统中的红外串行接口完成,然后初始化与红外相关的寄存器,随后构造设备的device数据结构,用检测到的数值对device中的变量初始化。最后向Linux内核中注册该设备并申请内存空间。
(2)数据包的发送和接收
数据包的发送和接收是实现嵌入式Linux操作系统下红外驱动程序中两个最关键的过程[8]。首先在网络设备驱动加载时,通过device域中的init函数指针调用红外设备的初始化函数对设备进行初始化。初始化成功后可以通过调用红外设备的打开函数打开设备,申请红外中断,启动队列。数据包的发送通过调用s3c2440_irda_hard_xmit函数,禁止接收,关闭中断,将上层交付的数据帧放入到低层驱动的缓冲区中。进入发送模式,允许发送中断,在中断服务时把底层驱动缓冲区中的数据发送到红外接口。
数据包的接收通过中断来完成。当有数据到达时,就会产生中断信号,红外设备驱动功能层就调用接收中断处理程序,读取URXH(串口接收缓冲寄存器)中的数据。
4.3 红外通信程序设计
应用层的网络编程一般利用套接字建立双方的虚拟连接。红外通信的Socket称为红外套接字(IrSock)。在Linux中,每一种协议都有自己的网络地址数据结构,均以sockaddr_开头。Linux内核在af_irda.c文件中实现了IrDA套接字。定义红外套接字如下:
struct sockaddr_irda{
sa_family_t sir_family;//协议类型,一般是AF_IRDA
_u8 sir_lsap_sel;
_u32 sir_addr;
char sir_name[25];
}
分配完套接字后,用bind绑定地址,用listen建立侦听,等待接收客户连接。使用send和recv与客户端通信,最后使用closesocket关闭连接。
本文在以基于ARM920T内核的微处理器S3C2440A为核心的嵌入式开发平台上详细介绍了嵌入式Linux操作系统下红外通信系统的设计和实现过程。通过对照硬件规范,可以实现嵌入式Linux操作系统下将红外协议移植到特定的嵌入式系统中。在嵌入式Linux操作系统下红外通信系统的开发对今后的嵌入式系统的应用研究具有较强的实用性,使红外技术能在嵌入式系统中得到广泛的应用。
参考文献
[1] 张晓红,SASDAT S,乔为民,等.红外通信IrDA标准与应用[J].光电子技术,2003,23(4):261-265.
[2] Infrared Data Association(IrDA).Infrared Data Association Serial Infrared Physical Layer Specification,Version1.4[EB/OL].[2005-5-30].http://www.irda.org/standards/specifications.asp.
[3] S3C2440A 32-BIT CMOS Microcontraller User’s Manual[R].Samsung Electronics,2004.
[4] ZHX1403 SIR UltraSlim transceiver product specification[R].ZiLOG Worldwide Headquarters,2002.
[5] 叶辉.红外通讯协议在嵌入式系统中的实现[J].电子技术应用,2004,30(7):68-71.
[6] 邱磊,肖兵.基于IrDA协议栈的红外通信综述[J].无线通信技术,2004,13(4):28-32.
[7] 陈祖爵,王继凤,王加民.基于嵌入式Linux的红外通信系统设计[J].计算机工程与设计,2009,30(4):816-818,854.
[8] 周亦敏,佟国香.基于Linux的红外网络通信的实现[J].
仪器仪表学报,2005(Z2):478-481.