嵌入式学习之USB协议(一)
文章目录
一、USB电器特性
二、USB总线信号
三、USB连接信号
四、总结
前言
USB接口的设备在工商业领域应用已经非常广泛了,比如U盘,鼠标,键盘,手机等等;USB传输速度快,可扩展性强,兼容性强等众多优点,已经有非常全面的应用;今天我们就来聊一聊他的电气特性,总线信号,连接信号。
一、USB电器特性
USB由4根线组成,Vbus,GND,D+和D-;Vbus和GND是供电信号,比如U盘,鼠标等由主机供电;D+和D-是数据线,USB使用差分传输模式;
差分信号1:D+ > Von(2.8V)且D-<Vol(0.3)
差分信号0:D- > Von(2.8V)且D+<Vol(0.3)
RS485通信是按照差分信号1/0表示数字1和0,而USB则表示J状态和K状态,再通过状态翻转表示数据0,状态保持表示数据1。
如图,USB信号的数据0/1与我们通常理解的不太一样。常见的通讯方式如I2C,SCI,SPI,USART等等,都是高电平为数据1,低电平为数据0;而USB信号比较特殊,它采用的是非归零编码,对数据先进行翻转,再发送。
如果要发送连续的数据1呢,电平不变,那就一直都是高电平;为了保证发送数据序列中有足够多的电平变换,USB协议规定了位填充的概念;即:数据流中出现连续的6个1,后面加一个0。
二、USB总线信号
Reset信号:复位信号;D+ and D- 小于 Vol 并且>=10ms
Idel状态:J状态
Suspend状态:挂起信号;3ms以上的J状态
SYNC信号:同步信号;3个KJ状态切换,后跟随2位时间的K状态
Resume状态:唤醒信号;20ms的K状态+低速EOP
SOP信号:帧起始信号;从IDLE状态切换到K状态;
EOP信号:持续2位时间的SE0信号,后跟随1位时间的J状态
三、USB连接信号
设备连接/断开信号
USB规范要求低速设备在D-数据线上拉一个电阻,全/高速设备在D+数据线上拉一个电阻;因此主机检测到某个数据线上的电平保持了一段时间,就认为有设备连接了。如果是D+数据线被拉高,则会被认为是全速(高速设备也会被认为是全速,再通过一系列的握手信号(chirp序列)去区分为全速/高速);如果是D-数据线被拉高,则会被认为是低速。
没有设备连接时或者设备断开时,主机端D+、D-数据线上的下拉电阻起作用,使得二者都在低电平;当低电平持续TDDIS时间就会被主机认为是断开状态。TDDIS在2到2.5us之间
设备集成电阻
USB规范要求全速/高速设备在D+上集成上拉电阻,低速设备在D-上集成上拉电阻;因此主机通过检测上拉电阻就可以得到插入的设备类型及速度。
总结
USB设备现在已经很常见了,但是由于他协议的复杂性,导致很多人只会使用他而不理解他的电气型号,在复杂的应用环境下出现异常问题而经常束手无策。由于他复杂,所以无法通过软件模拟他的时序去虚拟USB信号,因此对硬件有很高的要求(我们常见的IIC,SPI,USART都是可以使用普通IO口通过软件去模拟的,USB不行);比如SYNC,PID,CRC,地址,端点等等都不需要通过软件去写,硬件已经做好了;所以很多人只会应用而不知道他的原理。
作为一个合格的嵌入式软件工程师,对于信号的走向还是需要了解清楚的;积累的越多,你就越厉害;好了,USB的电气信号今天就写到这里,下一篇我们将接着聊USB通信协议。关于USB电气相关的知识,如果你有不清楚的或我写错的,都可以在评论区告诉我哦;谢谢大家!