http://blog.ednchina.com/nthq2004/1339241/message.aspx
一、我理解的USB接口通信的几个关键点
1、硬件连接和数据传输的特点
(1)USB设备接口共有四根线:电源线VBUS,数据线D+、D-,地线GND。
采用的是差分数据传输。两根线有四种状态:低低、高高、低高、高低。低高、高低是正常数据传输时所用,低低是设备断开状态,高高好像是USB的复位状态。(这是我的理解,不一定正确吗,看过书以后再更正。)
(2)USB传输一般采用NRZI(非归零反相编码)编码方式:电平翻转表示0,电平维持表示1。
(3)在USB设备端,有一个SIE(串行接口引擎),对差分线上的BIT流进行解释。
2、USB设备检测的原理
在主机端,D+和D-两根线都被下拉电阻拉到了低电平。若是在设备端差分线上提供上拉的话,可以被主机检测到。比如在 D+线提供3.3V电源、1.5K左右电阻,则该设备被识别为“高速设备12Mbps”;如果在D-线提供上拉,则识别为低速设备(1.5Mbps)。
3、USB通信的主从原则
一般的USB主机和设备之间遵循主从通信的原理,每一次的数据传输都是又主机发起。
如果主机要输出数据,则先发一个握手包,通知设备。然后发送数据,设备接收到数据后,再发送一个确认包。
如果主机要输入数据,也是先发一个握手包,通知设备。设备然后将准备好的数据发送给主机。主机再给设备一个确认包。
4、USB数据通信的最小单位
USB数据传输的基本单位是一个包。以异步串行通信对比:它的一个传输单位是起始字节、N个数据位、奇偶校验位、停止位。USB传输也差不多,只是它称为包。
包的基本组成包括:同步域、包ID、数据、CRC校验、包结束符。跟异步串行通信本质上是相同的。
同步域用来告诉对方一个包的开始,并且利用NRZI编码规律的特点,可以同步通信双方的时钟
包结束是总线的特殊状态:低低状态,我前面提到过。但与我原来的想法有出入,是“低低”状态表示“包结束、复位”等特殊状态。
包ID用于指明该包的类型(主机令牌、数据、握手)。
对于包的理解有一个基本的理解就行了,因为包的处理是由SIE完成的。它会给用户提供一些包处理过后的标志,比如数据传输是否正常完成、主机发出了复位信号等等,用户能够理解这些标志就可以编程了。
5、USB数据包类型与USB的基本事务
USB接口的工作是由主机和设备通信来完成的,所以它所做的每一个基本工作都要由双方输出不同类型的数据包。USB的一个基本工作我们称为事务。
一个事务的基本组成最起码是三个包:由主机发令牌包,表明要干什么;紧跟着一个数据包(可能是主机输出、也可能是设备);收到数据的那一方发送一个握手包(表明它有没有收到、数据对不对)。
令牌包、数据包和握手包的含义比较好理解,还有一类特殊包,现在就先不研究了。
6、USB的控制传输
USB有四类传输过程:其中批量传输、终端传输、等时传输比较类似,每个传输就是一个数据输出或数据输入事务。主要用于USB主机与设备的数据交换。
比较复杂一点的是控制传输。
控制传输可以分为三个阶段:建立阶段、数据阶段和状态阶段。
建立阶段是一个建立事务:主机发一个SETUP令牌包、一个数据包,然后设备必须通过ACK握手包回应。
数据阶段可以是多个基本数据事务。这个阶段的数据传递只能是一个方向,要么全是输入事务、要么全是输出事务。
状态阶段是主机对数据传输阶段的结果进行检测:如果主机读了数据,则会使用一个数据输出事务表明自己是否正确收到了设备的数据;如果主机输出了数据,它要求设备返回数据接收的情况。实质上是一个与数据阶段传输方向相反的一个数据包。
7、USB的地址和端点
USB主机是通过地址和端点具体与USB设备交换数据的。即每一个包都是针对具体的地址、端点。
USB设备挂在总线上,只要总线上有数据的传输,它都能检测到。但是只有令牌包中指定地址 与本设备地址相同时,SIE才会将该数据接收进来,并对包中指定的端点进行状态确认。
特别要注意的是:USB设备的地址是可以动态分配的。在复位后,它使用地址0。在用地址0与主机做协调后,可以分配到新的地址。然后就可以使用新地址与主机通信了。
端点实际上是一个数据缓冲区(我的理解)。它与USB传输类型对应,每种类型都有输入、输出端点。比如控制传输对应有控制端点两个,一个输入(主机想要获取设备的控制传输数据时,就从这里取,当然设备先要准备好),一个输出(主机在控制传输阶段传输给设备的数据,就会由SIE写入这个输出端点,然后USB固件程序就可以从该端点读取主机来的数据进行处理。
8、USB的描述符
我觉得它实质上就是一个具体设备所有属性、配置、能力等等所有信息的综合。这是一个将数据与数据处理过程分开来的典型例子。
设备描述符:主要指明设备的类型、所使用的协议、VID、PID、设备版本号等。一个特别重要的信息是:控制传输输入端点0支持的数据长度。
其它描述符性质差不多,我这里就不再一一叙述了。
转载请注明:在路上 » 【转】我理解的USB接口通信的几个关键点