您当前的位置:五五电子网电子知识单元电路接口电路32位ARM嵌入式系统扩展USB接口设计 正文
32位ARM嵌入式系统扩展USB接口设计

32位ARM嵌入式系统扩展USB接口设计

点击数:7772 次   录入时间:03-04 11:37:43   整理:http://www.55dianzi.com   接口电路

摘要:基于ARM处理器的32位嵌入系统具有极高速和大容量的数据处理能力,如何设计ARM与主机设备或系统的通信接口、提升数据通信能力,成为嵌入式系统设计的一大问题。文章给出了一种USB接口方案,对比RS-232串行口,大大提高了嵌入式系统的数据吞吐能力,与以太网接口相比有即插即用特性、有块和同步等多种数据传输模式,更适合音视频码流传送。文章具体阐述了方案的硬件、软件设计,并应用于音频PCM码流传送,实验结果显示音效流畅,方案有较高参考价值。
关键词:ARM ;嵌入式系统;USB;音频PCM码流; 


0 引言
    常用的主机与嵌入式外设的高速通信接口有LPT并行口、USB、1394及10/100M以太网等接口。RS232不适合高速数据传送,1394接口需要专门的适配器接口成本过高,一般较少使用,USB接口被广泛用于高、中、低不同速度设备与主机通信,USB2.0的最高速度可达480Mb/s, 可传送高清晰数字视频码流,完全可以替代1394接口,USB与以太网接口相比,采用主从结构,有即插即用特性,驱动程序丰富,互操作性好等优点。
    USB(Universal Serial Bus,通用串行总线)接口是1994年Intel、MICroSOFt等多家公司联合推出的计算机外设互连总线协议。USB接口支持1.5Mb/s、12Mb/s和480Mb/s的数据传输速率,支持控制、中断、批量与实时4种数据传输模式,让外围设备可以有弹性的选择。不管是交换少量或是大量的数据,还是有无时效的限制,都有合适的传输类型。USB的实时同步数据传输模式适合于高速实时音视频数据流的传送。
基于ARM(Advanced RISC Machines)处理器的32位嵌入系统具有极高运算速度和大容量的数据处理能力,常需要设计高速接口与其他设备通信,为此本文讨论基于S3C44B0X ARM7处理器的嵌入式统[3]扩展USB接口(设备端)的技术方案。

1 USB接口原理
    USB1.1规范[1]将USB分为5部分:控制器、控制器驱动程序、USB芯片驱动程序、USB设备以及针对不同USB设备的客户端驱动程序。
    (1) 控制器(Host Controller)主要负责执行由控制器驱动程序发出的命令。
    (2) 控制器驱动程序(Host Controller Driver), 在控制器与USB设备间建立通信管道(Pipe)。
    (3) USB驱动程序(USB Driver),提供对不同USB设备及芯片的支持。
   (4) USB设备(USB Device), 有两类USB设备:一类称为功能设备(Function),另一类是称为USB集线器(HUB),可以连接多个USB设备。
    (5) USB设备驱动程序(Client Driver Software)及特定应用程序。
 

      主控制器的驱动软件由操作系统支持,USB设备开发人员一般只需编写客户驱动程序,实现特定功能,设备端所有功能软件需要全面设计。                       
    USB的四种数据传输模式分别是:控制型传输、中断型传输、批量型传输、实时型传输。第一种在缺省通道中传输USB接口本身的配置等控制信息,后面三种用于功能部件传输数据。中断型用于键盘等的异步输入输出少量数据传输,批量传输主要用于象硬盘等块设备的数据传输,在中断和批量的传输过程中要传递交互握手信号,确保数据准确无误。实时传输对带宽有严格要求,但允许有一定误码,省去了交互握手信号的传递,常用于音视频码流数据传输。四种类型数据都按带宽要求分配在1ms一帧的数据帧内进行传输,USB1.0实时传输可得到的最大带宽10.24Mbps[1]。

2  嵌入式系统USB接口设计
    要满足高性能ARM嵌入式系统的要求,扩展USB接口必须选择高性能USB控制器芯片,Philips公司的PDISUBD12 USB器件,是与微处理器配合使用的高性能USB接口器件,性价比很高[2][4]。PDIUSBD12主要特性有:
    (1) 符合USB 1.1 技术规范;
    (2) USB控制器并行接口与处理器间的数据传输速度高达2M 字节/秒;
    (3) 在批量模式和同步模式下均可实现1M 字节/秒的数据传输速率;
    (4) 集成了FIFO存储收发器,支持DMA 操作;
    (5) 内置时钟倍频PLL电路,可编程时钟频率输出;
    (6) 多中断模式实现批量和同步传输;
    采用PDIUSBD12 USB标准组件与S3C44B0X接口,减小了开发的时间、风险以及费用,是最快捷、最经济的方法实现ARM嵌入式系统扩展USB的解决方案之一。PDIUSBD12与S3C44B0X ARM7处理器的电路图见图2。因ARM7用存储器影射方法扩展I/O接口,一般按16bit方式寻址,所以U2的A0连到U1的Addr1引脚, 片选信号nGCS1的基地址是0x0200_0000。

3 ARM端USB设备程序
    设备端程序主要完成:ARM BIOS和ucLinux的加载、启动通信进程、USB控制器初始化、响应主控制器标准PNP及其他命令、建立USB端点(End point)逻辑通道、数据传输操作等功能,图3是基于ARM 的USB设备与PC间音频通信的程序功能结构图。

图3

操作USB芯片的接口函数的宏定义为:
typedef  unsigned short int  U16 ;
#define   pD12_CMD      ( ( U16 *) 0x02000002 )    //指向D12命令寄存器指针
#define   pD12_DAT         ( ( U16 *) 0x02000000 )    //指向D12数据寄存器指针
#define D12WriteCmd( data )  (*p D12_CMD = (U16)(data) & 0xff ) 
#define D12WritEDAta( data )  (* pD12_DAT = (U16)(data) & 0xff ) 
#define D12ReadData()      (* pD12_DAT & 0xff )

4 音频码流USB设备驱动程序
    Windows2000中各种USB设备客户驱动程序结构框架基本相同,可以从Windows2000 DDK中获得USB设备驱动程序范例代码,对范例代码作少量修改就可以满足特定功能需要。图1显示了驱动程序各层间的数据传递关系,底层USB主控制器驱动程序(USB Host Driver)由操作系统提供支持,设备驱动程序只需要对USB Host Driver上传的I/O数据包IRP作出响应,并把要输出数据以IRP形式下传给USB Host Driver即可[5] [6]。
    在ISO(实时型)模式下传输音频码流,USB客户程序除了WDM(Windows Driver Model)驱动常规处理外,必须计算好带宽,并为驱动程序在非分页存储区内分配好环行缓冲区(Ringbuffer),以便USB 主控制器可以不间断输出实时数据。RingBuffer的大小按下式计算:
每帧字节数 × 每缓冲帧数 × 缓冲区数 ;
    每传完一缓冲区,USB Host Driver回调(CallBack)一次客户驱动程序,USB带宽按每1ms传送1帧数据来分配,要实现8kHz采样频率、8bits编码的音频PCM码流传输,帧数据包大小必须设为8Bytes,若设置4个缓冲区交替工作,每缓冲区分20帧传送, 则RingBuffer的大小为640Bytes,那么USB主控制器每20ms的频率中断回调一次客户驱动程序是合适的。
    驱动程序通过IoSetCompletionRoutine()函数给每个IRP设置回调函数入口地址[6],每完成一个IRP缓冲区数据传送操作,回调一次该地址指向的函数,以便把下一缓冲包数据压入到IRP栈,直到全部数据流传送完毕或人为终止传送。

 5 结束语
    扩展USB接口,大幅提升了32位ARM嵌入式系统数据通信的吞吐能力,有即插即用特性和多种数据传输模式,方案适合于嵌入式系统的多种应用。文章具体阐述了方案硬件、软件设计的关键问题,并讨论了如何分配USB总线带宽,实现恒速音频PCM码流传送,实验结果表明该方案能流畅地接收Windows2000通过USB接口输出话音编码信号,方案可行,具有较高参考价值。





本文关键字:嵌入式  接口  接口电路单元电路 - 接口电路