USB通信协议——深入理解

USB通信协议——深入理解

0. 基本概念

一个【传输】(控制、批量、中断、等时):由多个【事务】组成;

一个【事务】(IN、OUT、SETUP):由一多个【Packet】组成。

USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。

1. 包(Packet)

包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。数据在 USB总线上的传输以包为单位,包只能在帧内传输。高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms。帧的起始由一个特定的包(SOF
包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。
       注意:虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mS。

USB总线上的情形是怎样的?


包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。

USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图:

1.1 PID类型(即包类型)

1.2 Token Packets

此格式适用于IN、OUT、SETUP、PING。

PID            数据传输方向

IN              Device->Host

OUT         Host->Device

SETUP    Host->Device

PING        Device->Host

1.3 Start-of-Frame(SOF) Packets

SOF包由Host发送给Device。
    1) 对于full-speed总线,每隔1.00 ms ±0.0005 ms发送一次;
    2) 对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;
    SOF包构成如下图所示:

1.4 Data Packets

有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA,且由PID来区分。DATA0和DATA1被定义为支持数据切换同步(data toggle synchronization)。

1.5 Handshake Packets

• ACK: 对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出。

• NAK: 在数据阶段,对于IN事务,它将由device发出;在握手阶段,对于OUT和PING事务,它也将由device发出;host从不发送NAK包。

2. 事务(Transaction)

在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)即:The delivery of service to an
endpoint。一个事务由一系统packet组成,具体由哪些packet组成,它取决于具体的事务。可能由如下包组成:

• 一个token packet

• 可选的data pcket

• 可选的handshake packet

• 可选的special packet

2.1 输入(IN)事务处理

输入事务处理:表示USB主机从总线上的某个USB设备接收一个数据包的过程。

•【正常】的输入事务处理

•【设备忙】时的输入事务处理

•【设备出错】时的输入事务处理

2.2. 输出(OUT)事务处理

输出事务处理:表示USB主机把一个数据包输出到总线上的某个USB设备接收的过程。

•【正常】的输出事务处理

•【设备忙时】的输出事务处理

•【设备出错】的输出事务处理

2.3 设置(SETUP)事务处理

•【正常】的设置事务处理

•【设备忙时】的设置事务处理

•【设备出错】的设置事务处理

3. USB传输类型

在USB的传输中,定义了4种传输类型:

• 控制传输 (Control Transfer)

• 中断传输 (Interrupt Transfer)

• 批量传输 (Bulk Transfer)


同步传输 (Isochronous)

3.1 控制传输 (Control Transfer)

控制传输由2~3个阶段组成:

1) 建立阶段(Setup)

2) 数据阶段(无数据控制没有此阶段)(DATA)

3) 状态阶段(Status)

•每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。

控制数据由USB系统软件用于配置设备(在枚举时),其它的驱动软件可以选择使用control transfer实现具体的功能,数据传输是不可丢失的。

3.1.1 建立阶段

主机从USB设备获取配置信息,并设置设备的配置值。建立阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定)。

3.1.2 数据阶段

根据数据阶段的数据传输的方向,控制传输又可分为3种类型:

1) 控制读取(读取USB描述符)

2) 控制写入(配置USB设备)

3) 无数据控制

数据传输阶段:用来传输主机与设备之间的数据。

    •
控制读取

是将数据从设备读到主机上,读取的数据USB设备描述符。该过程如下图的【Control Read】
所示。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来。然后,设备将数据通过DATA1/DATA0数据信息包回传给主
机。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主
机发出STALL握手信息包。

     • 控制写入

是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所
示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设
备。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,
设备发出STALL握手信息包。

3.1.3 状态阶段

状态阶段:用来表示整个传输的过程已完全结束。
       状态阶段传输的方向必须与数据阶段的方向相反,即原来是IN令牌封包,这个阶段应为OUT令牌封包;反之,原来是OUT令牌封包,这个阶段应为IN令牌封包。

对于【控制读取】而言,主机会送出OUT令牌封包,其后再跟着0长度的DATA1封包。而此时,设备也会做出相对应的动作,送ACK握手封包、NAK握手封包或STALL握手封包。

相对地对于【控制写入】传输,主机会送出IN令牌封包,然后设备送出表示完成状态阶段的0长度的DATA1封包,主机再做出相对应的动作:送ACK握手封包、NAK握手封包或STALL握手封包。

3.2 批量传输 (Bulk Transfer)

•用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等。

•批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
      • USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务。
      • 一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。
      • 翻转同步:发送端按照
DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转
PID,发送下一个数据包,否则会重试本次事务传输。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个
DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传。

它通过在硬件级执行“错误检测”和“重传”来确保host与device之间“准确无误”地传输数据,即可靠传输。它由三种包组成(即IN事务或OUT事务):

1) token

2) data

3) handshake

1) For IN Token (即:IN Transaction)

• ACK: 表示host正确无误地接收到数据


NAK: 指示设备暂时不能返回或接收数据  (如:设备忙)


STALL:指示设备永远停止,需要host软件的干预 (如:设备出错)

2) For OUT Token (即:OUT Transaction)

如果接收到的数据包有误,如:CRC错误,Device不发送任何handshake包


ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包

• NAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)

• STALL: 指示Device endpoint已经停止,且通知Host不再重传

3) Bulk读写序列

即由一系统IN事务或OUT事务组成。

3.3 中断传输(Interrupt Transfer)

中断传输由IN或OUT事务组成。

中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。
     主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。
     同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图。

中断传输方式总是用于对设备的查询,以确定是否有数据需要传输。因此中断传输的方向总是从USB设备到主机。

DATA0或DATA1中的包含的是中断信息,而不是中断数据。

3.4 同步传输(Isochronous Transfer)

1) 它由两种包组成:

1) token

2) data

同步传输不支持“handshake”和“重传能力”,所以它是不可靠传输。

同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。

同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦
克风、喇叭、UVC Camera等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。

Isochronous data is continuous and real-time in creation, delivery,
and consumption. Timing-relatedinformation is implied by the steady rate
at which isochronous data is received and transferred. Isochronousdata
must be delivered at the rate received to
maintain its timing. In addition to delivery rate, isochronousdata may
also be sensitive to delivery delays. For isochronous pipes, the
bandwidth required is typicallybased upon the sampling characteristics
of the associated function. The latency required
is related to thebuffering available at each endpoint.

A typical example of isochronous data is voice. If the delivery rate
of these data streams is not maintained,drop-outs in the data stream
will occur due to buffer or frame underruns or overruns. Even if data
isdelivered at the appropriate rate by USB hardware,
delivery delays introduced by software may degrade applications
requiring real-time turn-around, such as telephony-based audio
conferencing.

The timely delivery of isochronous data is ensured at the expense of
potential transient losses in the data stream. In other words, any error
in electrical transmission is not corrected by hardware mechanisms such
as retries. In practice, the core bit error
rate of the USB is expected to be small enough not to be an issue.  USB
isochronous data streams are allocated a dedicated portion of USB
bandwidth to ensure that data can be delivered at the desired rate. The
USB is also designed for minimal delay of isochronous
data transfers.

时间: 2024-10-26 05:50:50

USB通信协议——深入理解的相关文章

usb协议深入理解

0. 基本概念 一个[传输](控制.批量.中断.等时):由多个[事务]组成: 一个[事务](IN.OUT.SETUP):由一多个[Packet]组成. USB数据在[主机软件]与[USB设备特定的端点]间被传输.[主机软件]与[USB设备特定的端点]间的关联叫做[pipes].一个USB设备可以有多个管道(pipes). 1. 包(Packet) 包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的.数据在 USB总线上的传输以包为单位,包只能在帧内传输.高速

深入理解51单片机串口通信

串口通信的基本认识 通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高.以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行信号输出,类似于8个车道可以过去8辆车,这样的形式是并行的,一般称P0,P1,P2,P3为51单片机的4组并行总线. 串行通信,就是一个车道,一个只能通过一辆车,如果一个0x55这样一个字节的数据要传输过去的话,假如低位在前,高位在后的话,那发送方式是:0-1-0-1-0-1-0-1,一位一位的进行

通信协议之序列化

原文转自:http://blog.chinaunix.net/uid-27105712-id-3266286.html 通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等.常见的有tcp,udo,http,sip等常见协议.协议有流程规范和编码规范.流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包. 编码规范就是我们通常所说的编解码,序列化.不光是用在通信工作上,在存储工作上我们也经常用到.如我

USB设备驱动之设备初始化(设备枚举)

USB设备从接入HUB到正常工作之前,都属于设备枚举阶段.所谓设备枚举,就是让host控制器认识USB设备,并为其准备资源,建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所以属于ISO标准流程.设备枚举阶段也对应了USB设备的五种状态. 设备枚举阶段分为如下8个步骤: 获取设备描述符 复位 设置地址 再次获取设备描述符 获取配置描述符 获取接口,端点描述符 获取字符串描述符 选择设置配置 其中,步骤1与4都是获取设备描述符,两者有什么区别? 步骤1中只取得设备描述符的

USB设备驱动开发之远程访问USB设备(一)

By Fanxiushu 2016 05-15  转载或引用本文,请注明原始作者. 使用过vmware的人都应该知道,vmware虚拟机有这样的一个功能, 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别. 再看一种情况,假设有两台机器C和S,C 机器是你正在使用的机器, S机器在远端,你只能通过远程控制S. S机器的配置和功能都很强大,大部

Citrix XenApp和XenDesktop 打印系统解析②

三.思杰通用打印解决方案 思杰的通用解决方案推出的时间很久了,在2004年的思杰iForum大会上,Citrix宣布推出通用打印机驱动程序(UPD)并激动的宣布,Citrix已经永久性的解决了打印的问题.但是事实上,激情之后发现其实通用打印机驱动程序也没有彻底的解决打印问题.其实打印问题长久的悬而未决是微软的问题,思杰只是创造了一些工具,从而使得打印更加的轻松. 思杰的通用打印解决方案,采用了Citrix开发的通用驱动程序(UPD)与底层网络基础设施,允许该驱动程序远程操作所有客户端打印机的设置

FPGA寒假学习目标

学习FPGA逻辑设计课程 熟练使用ISE Quartus Modelsim掌握四种FPGA经典设计思想:流水线 乒乓操作 串并转换 数据同步调试经常的模块:PLL  RAM ROM FIFO dds 任意奇偶分频 计数器 状态机 掌握测试文件编写方法常用接口协议逻辑开发:串口(rs232 rs485 uart) i2c spi can serdes fsmc LVDS常用外设控制器开发:SRAM FLASH SDRAM DDR2 DDR3 PCIe 以太网通信协议芯片 USB通信协议类芯片 HD

Mis603视频图像通信 开发平台用户手册

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 一.整体概述 Mis603板卡是由南京米联电子科技有限公司基于Xilinx公司的Spartan6系列的FPGA独家设计的一套板卡,主要集

关于打印机状态的获取

关于这个需求很早就考虑了,一直没敢下手,也不是不敢,是之前下过一次手但是没有成功.一直过了几个月腾出一些空闲来解决这个问题.另外说明一下,截止到目前对于这个需求我还没有一个完全的解决方案.这篇也只是捋下思绪. 关于打印机状态的问题我在stackoverflow上也作过提问,结果问题就被删除了,原因有二有人说这个问题是硬件上的问题,所以不在stackoverflow所讨论的范围.另一个或许是自己的英文着实烂的不行了,问题都解释不清楚. 由于一直没有死心,所以在平时无聊的时候也会掏出手机搜索一番,当