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)
操控数据由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: 指示Deviceendpoint现已中止,且告诉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.