EZ-USB开发笔记(九)——USB传输

本文简单介绍USB2.0传输的一些概念,为方便了解EZ-USBUSB中断和端点。由于EZ-USB的串行引擎隐藏了USB收发的诸多细节,因此本文只是对USB的传输的关键概念做介绍,具体的细节需要参见USB2.0协议。

一、USB拓扑结构

USB是一种主从拓扑结构,主机叫Host,从机(设备)叫Device

一个主机连接一个根集线器(root hub),根集线器可以再扩展出其他的集线器(hub)和主控制器(host controller),主控制器即对应着主机的USB插口。

因此,从设备到主机的数据叫做输入数据,从主机到设备的数据叫做输出数据。

二、包

USB传输数据是由一个一个的包(package)传输的,每个包再细分成一个一个域。包的具体构成及操作(如同步、位填充、校验等)被USB串行引擎隐藏,这里略去不介绍。

每个包中都有一个8bit的域,用来表示正在传输的包的类型,叫做PID package ID)。

USB2.0协议一共规定了16个包,分为四个大类,如下表所示:

PID类型 PID名字
令牌类(Token) IN  OUT SOF  SETUP
数据类(Data) DATA0  DATA1  DATA2  DATAM
握手类(HandShake) ACK  NAK  STALL  NYET
特殊类(Special) PRE  ERR  SPLIT  PING

2.1 令牌包

令牌包用来启动一次USB传输事务(有关USB事务的概念见第三章)。

·输入令牌包(IN):通知设备,本次USB事务是要输入一个数据包。即本次USB事务中的数据包是输入的。

·输出令牌包(OUT):通知设备,本次USB事务是要输出一个数据包。即本次USB事务中的数据包是输出的。

·建立令牌包(SETUP):通知设备,本次USB事务是要输出一个数据包。建立令牌包只能用在控制传输中,且只能发送到设备的控制端点(端点的概念见笔记九),SETUP后面的数据包只能是DATA0

·帧起始包(SOF):表示一帧的起始(帧的概念见第五章)。帧起始包后面不跟数据包。

2.2 数据包

数据包里的数据是真正需要传输的数据。之所以有不同的数据包,是用在当握手包出错时进行纠错。

2.3 握手包

握手包用来表示本次USB事务是否被对方确认。

其中ACK包主机和设备都可以使用,但NAKSTALLNYET只有设备才可以返回,主机不能使用。

·ACK:正确接收数据,且有足够的空间容纳数据。

·NAK:没有数据需要返回,或者数据接收正确,但是没有足够的空间容纳数据。

·STALL:表示设备无法执行这个请求,或者端点被挂起了。

·NYET:数据接收正确,但是没有足够的空间容纳下一次数据。

2.4 特殊包

·PRE:通知集线器打开其低速端口。实质是一个令牌包。

·PING:等待设备返回ACK或者NAK,以判断设备是否能够转送数据。实质是一个令牌包。

·SPLIT:通知集线器将高速数据包转化为全速或者低速数据包发送。实质是一个令牌包。

·ERR:集线器在分裂事务中出现错误。实质是一个握手包。

三、USB事务

USB总线传输的基本单位虽然是包,但是单独的一个包不能传送数据的,必须按照一定的关系把这些不同的包按照一定的顺序组织起来,比如令牌包+数据包+握手包,USB才能够完整的传输一次数据。这样一次完整的USB传输过程,叫做USB事务。

一次USB事务通常由两个或者三个包组成:令牌包、数据包和握手包。因此我们可以按照令牌包的不同,把USB事物分为输入事务(令牌包为IN)、输出事务(令牌包为OUT)和建立事务(令牌包为SETUP.

下图表示了两个用来输出数据的USB事务:

EZ-USB开发笔记(九)——USB传输_第1张图片

图中123为第一次USB事务,主机先发送一个OUT令牌包。然后发送一个数据包DATA1DATA1中包含着需要发送给设备的数据。设备受到无误后,向主机返回一个握手包ACK。然后主机再发起下一次USB事务456

有关EZ-USB对于一次USB事务的处理,可以参见第六章

四、USB传输类型

USB协议定义了4种传输类型:批量传输(bulk transaction)、同步传输(isochronous transaction)、中断传输(interrupt transaction)、控制传输(control transfers)。

4.1 批量传输

批量传输的一次传输事务为典型事务,包括一个令牌包(IN或者OUT包),后面跟数据包,包含传输的数据,最后是设备或主机返回的应答包(ACKNAKNYETSTALL)。

全速模式下批量传输的数据包大小为8,16,32或者64字节,高速模式下数据包大小为512字节。

EZ-USB开发笔记(九)——USB传输_第2张图片

4.2 同步传输

同步传输的一个传输事务只有令牌包和数据包,不返回应答包。

全速模式下同步传输数据包大小为1023字节,高速模式下数据包大小为1024字节。

EZ-USB开发笔记(九)——USB传输_第3张图片

4.3 中断传输

中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告他的查询间隔,USB主机要保证在小于这个时间间隔内安排一次传输。中断传输的一次传输事务与批量传输的事务相似。

全速模式下中断传输数据包最大为64字节,高速模式下最大为1024字节。

EZ-USB开发笔记(九)——USB传输_第4张图片

4.4 控制传输

控制传输分为三个过程(阶段):建立过程、数据过程和状态过程。

EZ-USB开发笔记(九)——USB传输_第5张图片

4.4.1 建立过程

建立过程使用一个建立事务。该事务令牌包为SETUP。数据包只能用DATA0,数据包包含的数据为主机到设备的设备请求,USB协议规定了标准的设备请求,包括请求描述符等,当然,用户也可以定义自己的设备请求。设备返回的应答包只能为ACK,如果出错,则不返回任何应答。

4.4.2 数据过程

数据过程是可选的。一个数据过程可以包含一次或多次输入输出事务,但所有事务的方向必须相同。一旦事务的方向发生改变(令牌包方向改变),则认为结束了数据过程,进入下一过程。

数据过程的事务的令牌包为输入输出令牌(INOUT),数据包在DATA0DATA1之间交替,且第一个数据包必须为DATA1

4.4.3 状态过程

状态过程的事务与数据过程的事务方向相反。数据包只能使用DATA1

五、USB

USB的帧是基于时间的,每毫秒的数据包为USB的一帧,与USB的包和事务的结构无关。

全速USB主机为了向USB设备提供时间基准,他会以广播的形式,每毫秒向所有的USB设备发送一个SOF包。该SOF包与该毫秒内所有后继的数据包叫做一个USB帧。

高速USB设备将每毫秒的一帧再分成8个微帧,每个微帧125微秒。

SOF包中包含一个11bit的帧号,该帧号每帧递增一个。同一个帧当中的所有微帧的SOF包的帧号相同。

EZ-USB每收到一个SOF包,会产生一个USB中断。

六、EZ-USB串行引擎

EZ-USB拥有一个串行接口引擎(SIE),一边直接与USB总线的数据线D+D-相连,另一边递交和接收发往主机和发往设备的数据。

SIE能够对PID解码,进行CRC校验,并把真正需要的传送的数据发往USB设备。

同时,SIE还能够根据端点状态和校验结果,自动产生握手包(ACKNAK等)发往主机。

SIE在一个USB传输事务中扮演的角色如下图所示

EZ-USB开发笔记(九)——USB传输_第6张图片

EZ-USBSIE最大的特点是,EZ-USBSIE可以完全自主的进行枚举,这允许EZ-USBCPU复位期间,将USB主机上的固件程序下载到内部RAM中。

你可能感兴趣的:(EZ-USB)