目前嵌入式系统在数字化电子产品领域应用越来越广泛。随着其成本的降低,大有取代单片机的趋势。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 规范约定当序列1 1中连续出现6 个逻辑“1”时加进一位“0”,如此问题全部解决,只不过是需要在接收后除去加进的一个位“0”,加进一位“0”的过程就是位填充。
1.7 usb 通讯模式
共四种模式:控制传输、等时传输、中断传输、批量传输。
1.8 端点
端点也可称为设备终端,每个usb 设备(usb 芯片)内可以有1—16 个端点,相对usb 芯片而言,各端点在通讯*能传输的数据包的大小和传输模式有所不同。在芯片内数据缓冲区的地址也有所变化。
2 嵌入式芯片(lm3s310)
stellaris 系列微控制器(包括l3 同s310)是以arm cortextm-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),然而对全速设备的仿真,须要选择速度更快嵌入式芯片,软件实现的原理方法基本相同。
5 结论
使用微控制器仿真usb 设备的方法,极大地方便了用户的开发,同时降低了功耗、成本。本文作者创新点在于利用mcu或嵌入式控制器实现usb设备功能。本方法在usb 读卡器、usb 编程器、usb 接口转rs232 及rs485 接口等方面有良好的应用前景。
中国台湾地震,台积电产能目前尚无显著影响
如何推进L2级别自动驾驶功能应用?
UWB定位与蓝牙定位的区别
电池平衡的工作原理
通过高速PCB控制解决EMI问题
基于LM310嵌入式控制器实现USB设备功能的设计
大尺寸电缆非接触在线测径仪
绝缘子故障检测仪的功能特点及技术参数
LED电子屏有多少种信号?
国产特斯拉的雷达传感器
异步和同步电路的区别 同步时序设计规则
STM32WB55开发(4)----配置串口打印Debug调试信息
华为2款“神品级”旗舰! 如今降至冰点价
随着5G时代的来临 硅光芯片市场发展的难题会慢慢迎刃而解
Microchip推出了全球首款基于RISC-V的强化型实时微处理器子系统
余热发电工艺流程图_余热发电如何提高发电量
浅析发展氢燃料电池汽车高效储氢技术
以大数据为基础,分析人脸识别技术的未来
什么是SoC
汽车电子测试系统解决方案综述