摘要: 本文给出了一种基于USB 1.1 总线协议的嵌入式数据传输系统的设计与实现方案。 采用Philips 公司的USB 专用芯片PDIUSBD12 与微控制器LPC2210 构成USB 设备,在 μC/OS-II 操作系统上实现该设备的USB 通信协议。在PC 主机上完成了基于WINDOWS 驱 动程序模型(WDM)的USB 主机驱动程序和应用软件的设计,实现了设备与PC 主机的通信。 经测试,该USB 数据传输系统具有速度快、即插即用、热插拔和低功耗等特点。 关键词:数据传输; USB接口; PDIUSBD12; WDM
随着信息技术的迅速发展,数据采集和处理技术广泛应用于科学研究的各个领域。早期 的计算机系统上通常使用串口或并口来发送数据,每个接口都需要占用计算机内部很多的资 源,传统的接口一般采用PCI总线或RS-232串行总线。PCI总线有较高的传输速率,可达 132Mbit/s,也可以即插即用,但是它们的扩充槽有限且插拔不方便;RS-232串行总线连接 比较方便,但是传输速率太慢,不易用于高速传送数据和传送大量数据。 通用串行总线(Universal Serial Bus,USB)集中了PCI和RS-232串行总线的优点,具有方 便的即插即用和热插拔特性以及较高的传输速率。因此,将USB技术应用于数据采集可以实 现数据采集系统的高速度处理。现在的PC机几乎都配备了USB接口,Microsoft的Windows 以及MacOS、Linux、FreeBSD等流行操作系统都增加了对USB的支持。作为一种通用的串 行标准,USB接口势必将扩大很多技术的应用范围。如果在小体积、低功耗、低成本的嵌入 式平台中实现USB技术,嵌入式设备将会有更大的应用空间。而嵌入式设备的实时、小巧等 特性使得USB的协议栈和总线驱动的开发设计显得尤为重要,因为它的好坏会直接对USB主 机产生影响,从而会对嵌入式系统性能产生较大影响[1]。本设计利用Philips公司生产的USB 专用芯片PDIUSBD12(以下简称D12)与微控制器LPC2210构成USB设备,在μC/OS-II操作系 统上实现该USB设备与PC机通信的USB协议,实现数据传输功能。 1 USB 接口硬件设计 1.1 系统接口芯片的选择 USB 接口控制器是USB 系统的关键,很多半导体生产公司参与了USB 芯片的开发, 形成了多种产品系列。本设计选用了性价比较高的Philips 公司的USB 专用芯片D12,它符 合USB1.1 版规范。此芯片是带有并行总线的全速USB 接口器件,可与任何微控制器实现高速并行接口(2Mb/s),并可用于许多外设。D12 集成了SIE、FIFO 存储器、收发器及电压 调整器;可通过SoftConnectTM 技术软件控制与USB 的连接;采用GoodLink 技术的连接指 示器,在通讯时使LED 闪烁等[2]。 1.2 D12 接口电路 如图1所示,D12的硬件接口和外部存储器的接口很相似,因此,可以把它当作一片外 部RAM芯片来进行访问。对于LPC2210微控制器,它的外部数据总线与地址总线是分开的。 这时,D12的DATA0~DATA7与LPC2210的数据总线的D0~D7直接相连就可以构成访问D12 的数据总线了。D12的AD0连接到LPC2210的A0,当LPC2210在A0引脚输出1时,表示输出 到D12数据总线D0~D7上的数据为命令字,当A0引脚输出0时,表示输出到D12数据总线 D0~D7的数据为数据字。D12使用LPC2210外部存储控制的Bank2部分,其数据地址为 0x82000000(偶数地址),命令地址为 0x82000001(奇数地址) [3]。

其中,C1、C2 和X1 为D12 提供工作所需的时钟输入,为了保证D12 的工作时钟正常, C1 和C2 必须分别为68pF 和22pF;D+/D-线上应串接18 的匹配电阻[3]。输出(GL-N) 接LED 对其状态进行监控,这个LED 在USB 被连接时会发光,在进行数据传输时会闪烁, LED 常亮或一直不亮则说明USB 接口出现问题。 USB 设备通过4 条电缆接入主机或USB Hub,这4 条电缆分别是:Vcc(总线电源), GND(地线),D+和D-数据线。主机通过D+和D-上的电压变化来检测设备的状态变化, 当没有设备连接到USB 端口时,D+和D-线上的下拉电阻就将两条数据线拉到近地,当检测 到任一条数据线电压接近Vcc,而其他保持近地电压,那么主机就知道该设备已准备好了[4]。 2 USB 系统软件设计 USB系统软件结构的特点是分层化和模块化,如图2所示。协议接口以上的程序运行在 PC上位机上,最下面的设备控制器程序运行在基于μC/OS-II操作系统上的嵌入式平台即下位 机上[4]。 2.1 下位机软件设计 USB设备端的程序采用ADS1.2编写,为了使软件可移植性强、易维护,采用分层的方 法编写D12的驱动程序。根据USB1.1协议、D12硬件接线和μC/OS-Ⅱ的结构,采用中断服务 程序处理实时性强的异步事件,体系框架如图3所示。具体工作原理是,当CPU处理前台任 务时,USB的传输可在后台进行,当D12从USB收到一个数据包,就对CPU产生一个中断请 求,CPU立即响应中断。在中断服务程序中,将数据包从D12内部缓冲区移到循环数据缓冲 区,并清空D12内部数据缓冲区,以使能接收新的数据包。CPU可继续当前的任务直到完成, 然后检查循环数据缓冲区是否有新数据[5]。

(1)主循环层检查事件标志,再调用对应的处理函数做进一步处理; (2)中断服务程序处理由D12产生的中断,它检索从D12内部FIFO存储器发给MCU存储器 的数据,然后设立适当的事件标志以通知主循环程序进行处理; (3)协议层处理USB1.1协议的标准设备请求; (4)功能层包括实现外设功能的子程序; (5)D12硬件提取层是底层电路直接通信的物理模块,可以完成硬件访问D12相关I/O口的 功能; (6)系统硬件提取层包含外设的底层代码,用于完成硬件的初始化,MCU对I/O口的访问 等。 2.2 上位机软件设计 上位机软件主要包含USB 客户应用程序,USB 客户驱动程序和USB 主控制器驱动程 序。 2.2.1 USB 客户应用程序 USB 客户应用程序负责与设备使用者的交互,包括接收用户的命令,向USB 客户驱动 程序发送命令,以及获取返回的数据等。USB 客户应用程序的设计在Visual C++ 6.0 开发环 境下进行。主要功能包括检测USB 设备、开启/关闭USB 设备、获取设备信息集、设置数 据传输端口、显示实时传输的数据,程序流程图如图4 所示。 2.2.2 USB 客户驱动程序 USB 客户驱动程序接收USB 客户应用程序的命令,把读/写命令变成规范的USB 请求 包传给下一层驱动程序。客户驱动程序要解析设备的各种描述符,掌握设备的性质和功能, 制订与其功能相适应的软件结构和算法,为上层应用程序提供API 接口。 该USB 驱动程序采用WDM(Windows Driver Mode)驱动程序模型设计,提供USB 的底 层驱动和驱动程序接口USBDI。USB 客户驱动程序是由多个模块构成,每个模块相互独立,负责专门的事务。USB 客户驱动程序主要包括初始化、即插即用和设备I/O 控制三个模块[4]。 2.2.3 USB 主控制器驱动程序 USB 主控制器驱动程序属底层驱动程序,负责对主控制器进行操作,完成最底层的数 据通信工作。USB 主控制器驱动程序直接或间接地接收客户驱动程序发送来的USB 请求包, 完成底层通信协议的操作。USB 主控制器驱动程序由操作系统提供[4]。

3 系统调试 采用100Hz的采样频率对信号发生器产生的三角波进行采集传输测试,结果如图5所示。 说明此系统可以正确的识别USB设备,并有效完成数据传输任务。

4 结束语 本设计中使用USB1.1作为接口部分,具有传输速度快、即插即用和热插拔等优点。应 用程序充分利用VC的MFC框架比较丰富的资源进行数据采集和控制,具有界面友好、功能 丰富等特点。经实际测试证明,本系统设计合理,使用方便,数据传输稳定可靠。本文创新 点:设计和实现了基于ARM微处理器LPC2210的嵌入式USB接口,通过对LPC2210芯片组成 的嵌入式USB的具体实践, 证明了硬件设计和软件测试方案的可行性。 参考文献 [1]马军,李玉林.基于PDIUSBD12的USB接口设计[J].微计算机信息.2006,22(7-2),285-287. [2]Philips PDIUSBD12 Product data Rev. 08-20[Z],2001. [3]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005. [4]胡晓军,张爱成.USB接口开发技术[M],西安:西安电子科技大学出版社,2005.
[5]颉瑞昌,张根保,朱福益,王戈.基于PDIUSBD12的通用Fireware结构及设计[J]. 计算机应用研究.2005.9. [附] 作者简介:范晓青(1986-),女,山东平邑人,硕士,四川大学制造学院,专业:生物医学工程; Biography:FAN Xiao-qing (1986-),female(Han),Shandong Province Pingyi County,Master, studying in School of manifesting science and engineering of Sichuan University. Major: medical information and instrument.
|