1、事务
在介绍USB传输类型之前,请允许我先简答介绍一下USB事务。
事务一般由令牌包、数据包(可选)、握手包组成。
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。下面简答介绍一下这四种传输类型及其注意事项。
2、控制传输
2.1. 控制传输分为三个过程:建立过程、数据过程(可选)、状态过程。
建立过程:
a. 主机发送令牌包:SETUP
b. 主机发送数据包:DATA0
c. 设备返回握手包:ACK或不应答,注意:设备不能返回NAK或STALL,即设备必须接收建立事务的数据。
数据过程(可选):
一个数据过程可以包含多个数据事务,但所有数据事务必须是同一方向的。若数据方向发生了改变,则认为进入状态过程。数据过程的第一个数据包必须为DATA1,然后每次正确传输一个数据包后就在DATA0和DATA1之间交替。
状态过程:
状态过程只使用DATA1包,并且传输方向与数据过程相反。
2.2. 控制传输的应用场合:主要应用于设备的枚举过程和对数据准确性要求较高的场合。
3、同步传输
4、批量传输
批量输出流程:
1) 主机发送OUT令牌包。
说明:令牌包中包含设备地址、端点号。
2) 设备处理令牌包。
注:令牌包的正确与否包括设备地址和端点号是否匹配。
3) 主机发送数据包,然后切换到接收模式,等待接收设备返回的握手包。
说明:数据包中包含一个DATA(具体是什么类型的DATA,取决于数据切换位)。
4) 设备处理数据包。
批量输入流程:
1) 主机发送IN令牌包,然后切换到接收数据状态,等待设备返回数据。
说明:令牌包中包含设备地址、端点号。
2) 设备处理令牌包。
3) 主机接收并处理数据包。
注:USB协议规定,不允许主机使用NAK握手包来拒绝接收数据包。
PING事务:
PING流程:
1. 主机发送PING令牌包。
2. 设备返回状态。
5、中断传输
6、端点
USB四种传输模式
当USB插入USB总线时,USB控制器会自动为该USB设备分配一个数字来标示这个设备。另外,在设备的每个端点都有一个数字来表明这个端点。
USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(Transaction),事务有四种类型,分别是Bulk Transaction、Control Transaction、Interrupt Transaction和Isochronous Transaction。每次事务都会分解成若干个数据包在USB总线上传输。每次传输必须历经两个或三个部分,第一部分是USB控制器向USB设备发出命令,第二部分是USB控制器和USB设备之间传递读写请求,其方向主要看第一部分的命令是读还是写,第二部分有时候可以没有。第三部分是握手信号。以下针对这四种传输,分别进行讲解。
1.Bulk传输事务
顾名思义,改种事务传输主要是大块的数据,传送这种事务的管道叫做Bulk管道。这种事务传输的时候分为三部分,如图17-10所示。第一部分是Host端发出一个Bulk的令牌请求,如果令牌是IN请求则是从Device到Host的请求,如果是OUT令牌,则是从Host到Device端的请求。
第二部分是传送数据的阶段,根据先前请求的令牌的类型,数据传输有可能是IN方向,也有可能是OUT方向。传输数据的时候用DATA0和DATA1令牌携带着数据交替传送。
第三部分是握手信号。如果数据是IN方向,握手信号应该是Host端发出,如果是OUT方向,握手信号应该是Device端发出。握手信号可以为ACK,表示正常响应,也可以是NAK表示没有正确传送。STALL表示出现主机不可预知的错误。
在第二部分,即传输数据包的时候,数据传送由DATA0和DATA1数据包交替发送。数据传输格式DATA1和DATA0,这两个是重复数据,确保在1数据丢失时0可以补上,不至于数据丢失。如图17-11所示。
(点击查看大图)图17-10 Bulk传输 |
图17-11 Bulk传输时的令牌 |
2.控制传输事务
控制传输是负责向USB设置一些控制信息,传送这种事务的管道是控制管道。在每个USB设备中都会有控制管道,也就是说控制管道在USB设备中是必须的。控制传输也分为三个阶段,即令牌阶段、数据传送阶段、握手阶段,如图17-12所示。
图17-12 控制传输事务 |
3.中断传输事务
在USB设备中,有种处理机制类似于PCI中断的机制,这就是中断事务。中断事务的数据量很小,一般用于通知Host某个事件的来临,例如USB鼠标,鼠标移动或者鼠标单击等操作都会通过中断管道来向Host传送事件。在中断事务中,也分为三个阶段,即令牌阶段、数据传输阶段、握手阶段,如图17-13所示。
(点击查看大图)图17-13 中断传输事务 |
4.同步传输事务
USB设备中还有一种事务叫同步传输事务,这种事务能保证传输的同步性。例如,在USB摄像头中传输视频数据的时候会采用这种事务,这种事务能保证每秒有固定的传输量,但与Bulk传输不同,它允许有一定的误码率,这样符合视频会议等传输的需求,因为视频会议首先要保证实时性,在一定条件下,允许有一定的误码率。同步传输事务有只有两个阶段,即令牌阶段、数据阶段,因为不关心数据的正确性,故没有握手阶段,如图17-14所示。
图17-14 同步传输事务 |
篇三:http://blog.sina.com.cn/s/blog_e70a3ddb0101bezy.html
传统USB的连接模式是:主机PC,接一个鼠标、键盘等做设备,但是OTG技术的出现改变了这个惯例。USBOTG技术中OTG是“ON THEGO”的简写。主要应用在嵌入式终端中,OTG控制器既可以做主机也可以做设备,两个带USBOTG的移动设备可以通过一根USB线灵活的传递数据。简化了必须先把数据拷贝到电脑再从电脑中拷贝到目标设备中的过程。
endpoint的理解
OTG实现的是点对点传输(point topoint),而这个点就是端点(endpoint)。在一个USB设备中会有很多endpoint,最多有16个。而我用的S5PV210处理器中有 16个,分别为EP0 –EP15。一个EP本质上讲是FIFO,也就是一段缓冲区,我们可以这样理解一个USBOTG设备就是有很多个缓冲区的集合。
虽然有16个端点,但是我们通常只会用到3个。比较常用的做法是EP0用做传输配置和控制信息,EP1做 IN_EP,EP2做OUT_EP。
IN_EP的作用是用于把数据从Host传到Device中。而OUT_EP的作用是用于把数据从Device传送到Host中。即他们分别用做发送和接收。
BULK传输
每个EP可以有四种传输模式,分别为:BULK传输,Control传输,同步传输和中断传输。BULK传输,一般专业术语叫批量传输事务。可以分为三个阶段:1)令牌阶段,2)传输数据阶段,3)握手阶段。
例如数据由Host传到Device, 即OUT型传输。主机向设备发送一个OUT令牌包,令牌包里面指定了设备地址和端点,设备正确收到数据包后回一个ACK,否则回NAK。接着主机发送数据包,末了就是握手包。
IN型传输恰好相反,Host先发一个IN的令牌包,Device控制USB的芯片收到此包后进行相应的处理,如果有数据可以回复Host,则把数据写入对应的EP。USB总线把数据发给Host,最后是发送握手包。
同步传输和中断传输的过程和BULK传输类似。Control传输还没有仔细研究。