基于嵌入式系统的USB(HID)设备

基于嵌入式系统的USB(HID)设备,第1张

基于嵌入式系统USB(HID)设备

目前嵌入式系统在数字化电子产品领域应用越来越广泛。随着其成本的降低,大有取代单片机的趋势。 USB设备以其小巧、便携、即插即用、成本低廉等优势在当前的桌面应用中有相当的比重,尤其是 HID(人机接口)设备,其免驱的特点(不用安装驱动程序)更是给用户带来极大方便。现在市场上 USB设备多是由专门的 USB控制芯片来实现其应用控制,芯片内集成了 USB协议,成本较高。 PCB板的面积较大。本文提出了仅用一片 MCU(微处器-单片机)或嵌入式系统芯片来实现其与 PC机的通讯的方法。就单片机而言,多数单片机速度较慢,对事件的响应能力较弱,对全速 USB应用不是很好的选择。而嵌入式系统,由于其速度较之单片机快很多,内部 RAM容量较大,用其来仿真 USB设备是个理想的策略。

本文将以 LM310嵌入式芯片仿真USB(HID)键盘为例,研究其仿真 USB的方法。 1 USB协议规范

1.1总线定义:
 
USB又称通用串地总线,共有四条线,如图 1所示,VBUS是设备供电接线,电压+5V,最大供电电流500mA,向设备提供电源。具有过流保护、供电控制等功能。D-低速信号线;D+全速信号线;GND电源地。
基于嵌入式系统的USB(HID)设备,第2张

1.2 USB版本常规 USB通讯协议有USB1.1、USB2.0。USB1.1版本的 USB设备,支持全速 12Mb/S低速通讯(1.5Mb/S);USB2.0版本的 USB设备,支持高速通讯(480Mb/S)。由于 USB2.0的通讯速率太高,所以用芯片仿真无法实现(必须由单独芯片控制)。

1.3总线长度USB1.1版本的设备总线长度不大于 5米,通过集线器或中继器,可达到 30米 95个中断器或集线器)。U2.0设备总线长度不大于3米。

1.4 通讯建立 串口通讯另一个标准 RS232的通讯发起方可以从两端发起,而 USB通讯发起方总是在主机端(HOST),设备端总是响应主机端的通讯请求。主机端如果是 PC机,每隔 1ms发起一次对一个设备的通讯建立请求,设备接收到访问己方请求后,立即与主机建议起通讯连接。

1.5 电气特性

对于“D-是低带信号总线,D+是高速信号总线是高速总线”的说法是不准确的,因为USB信号总线是平衡差分式的,这点类似于 485总线。所谓“在-是低速信号总线”是指当US阳低速设备(如鼠标、键盘) 时,D-这条线在 USB设备端加 1.5K上拉电阻。反之对于全速设备(如U盘、打印机、扫描仪),D+信号线加1.5K上拉电阻。

关于D+、D-信号线上的电压浅谈一下,类似于 485总线,当 485总线的 A相电压大,B相电压 200mV时,差分放大器输出逻辑“1”,反之“0”,USB总线在低速设备端D-电压如大于2.0V,D+电压小于 0.8V为逻辑“1”反之为“0”,在主机端,一根为大于2.8V,另一根小于 0.3发,在此主机端不做深入探究。

1.6 NRZI编码及位填充

由于 USB总线没有同步时钟信号线,想要主机与设备建立良好通讯同步效果,只有从数据序列中提取同步时钟。类似 RS232串口通讯,USB通讯的建立也有起始信息,RS232是一个起始位,而 USB起始位也有 8位,称之为同步域(或段)格式为01010100。由于 RS232的通讯速率较低,所以两端同步时钟不大于5%即可实现良好通讯。然而 USB通讯最低速率也大于1Mb/S,对于时钟的同步要求严格的多,况且 USB的数据包中的每个字节不象 RS232每个字节都有起始位(仅在包头有同步域)。鉴此,USB通讯时必须在数据包的位序列中提取同步信息。想象一下,如果数据包序列中数据位全是逻辑“1”或者全是逻辑“0”,芯片是无法提取同步信息的,为此需要一个高效的编码方案,于是就有了 NRZI和位填充概念。何谓NRZI,看图 2所示,NRZI是非“1”跳变。由图可知问题只解决一半,USB规范约定当序列中连续出现 6个逻辑“1”时加进一位“0”,如此问题全部解决,只不过是需要在接收后除去加进的一个位“0”,加进一位“0”的过程就是位填充。
 
1.7 USB通讯模式 共四种模式:控制传输、等时传输、中断传输、批量传输。

1.8端点

端点也可称为设备终端,每个 USB设备(USB芯片)内可以有1—16个端点,相对USB芯片而言,各端点在通讯中功能传输的数据包的大小和传输模式有所不同。在芯片内数据缓冲 区的地址也有所变化。
基于嵌入式系统的USB(HID)设备,第3张

2 嵌入式芯片(LM3S310)

Stellaris系列微控制器(包括 L3同S310)是以 ARM Cortex TM-M3为内核设计的。与早期的 ARM7相比较有功耗更低、中断延时更小、代码执行速度更快、价格更低等优势。

3 实现原理

由于 LM3S310控制器每个 GPIO都可配置为中断引脚,所以在这个应用中只需要用两个 同 Port的两个相邻引脚仿真 USB的D+和 D-,图 3所示。 

 

 基于嵌入式系统的USB(HID)设备,第4张


4 软件设计图 4是一个简化程序流程图,实际编程中还有很多细节,在此不再罗列。下面以中断传输为例,将一个事务不同阶段思想重点研讨。
 
LM3S310芯片利用两个 GPIO(USB)的中断监控 USB总线,当 USB总线从空闲状态变为传输状态,也就是总线由主机发起与同步域(SYN),LM3S310进入 USB接收程序。略过同步阶段,收到的第一个字节是 PID字段(包标识类型)。这字段的低四位描述此包类型方向(IN或OUT),接下来 7位表示设备的地址,然后是四位端点号索引。LM3S310根据设备地址判定主机向本设备发起的请求,如果是则根据包的类型决定继续接收数据或向主机发送数据。对OUT类型数据的后 5—16位是 CRC校验(根据配置决定 CRC的位数)。对 IN类型,LM3S310将准备好数据连同 RC校验数据一同发往主机。数据传输阶段完成后,主机或设备要确认传输成功。

对于低速设备的仿真,LM3S310芯片的速度足以满足要求(包括一些速度较快单片机,如:PIC、EMP、MSP),然而对全速设备的仿真,须要选择速度更快嵌入式芯片,软件实现的原理方法基本相同。
基于嵌入式系统的USB(HID)设备,第5张
结论

使用微控制器仿真 USB设备的方法,极大地方便了用户的开发,同时降低了功耗、成本。本文作者创新点在于利用 MCU或嵌入式控制器实现 USB设备功能。本方法在 USB读卡器、USB编程器、USB接口转 RS232及 RS485接口等方面有良好的应用前景。

参考文献

[1]《LM3S310数据手册》   作者:Luminary  Micro 2005

 [2]《USB大全》作者:[美]Jan Axelson  陈逸 译  2001.5

 [3]《USB技术大全》电子教程  2007.2
[4]郭佑民,王杰,孙启国基于嵌入式微处理器 S3C44B0X的 USB通信.微计算机信息[J],2008,1-2: 21-23。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2487800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存