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

基于嵌入式系统的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电源地。
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芯片而言,各端点在通讯中功能传输的数据包的大小和传输模式有所不同。在芯片内数据缓冲 区的地址也有所变化。
2 嵌入式芯片(lm3s310)
stellaris系列微控制器(包括 l3同s310)是以 arm cortex tm-m3为内核设计的。与早期的 arm7相比较有功耗更低、中断延时更小、代码执行速度更快、价格更低等优势。
3 实现原理
由于 lm3s310控制器每个 gpio都可配置为中断引脚,所以在这个应用中只需要用两个 同 port的两个相邻引脚仿真 usb的d+和 d-,图 3所示。
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设备的方法,极大地方便了用户的开发,同时降低了功耗、成本。本文作者创新点在于利用 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。

消息称荣耀V40将于明年1月12日正式登场
“5G+工业互联网”发展呈现三大梯队
小学学生遇到人工智能教学会怎样
仿生机器人是什么,现在有哪些仿生机器人
2023年慕尼黑(上海)电子展合科泰展台现场回顾
基于嵌入式系统的USB(HID)设备
车载快充,广大神通 — 打开我的小轿车果然发现MPQ4214
蓝宙电子成为全球领先的开源硬件Arduino中国区代理商
小米33W快充氮化镓充电器正式开销
工业企业为什么要用边缘计算网关?
万用表经典口诀科普
TWS Plus技术及声控耳机的大揭秘
WiFi智能插座?您需要一款智能插座WIFI模块
微型传感器在汽车电子化、智能化工程中的应用
专利授权量排名前列证明华为强大的核心竞争力
晶体二极管的主要参数
云存储和本地存储哪一个更适合自己
中微爱芯功放类产品AiP1350/AiP1351、AiP8004介绍
新型自旋电子器件用电磁波进行计算,结果如何
华为鲲鹏整机制造总部项目落户成都 总投资超10亿元