"); //-->
我们知道,传输事务解决了主机、设备之间交互一次数据的问题(请看上节笔记 USB 之传输事务),但是有些端点是需要进行多次双向传输或者多次单向传输的,同时因为设备的功能不同,所需要的带宽和传输特性也不同,那么就需要一个更上层的机制解决以上问题,四大传输应运而生。
控制传输(Control Transfers)、中断传输(Interrupt Transfers)、批量传输(Bulk Transfers)、同步传输(Isochronous Transfers)称之为四大传输。
接下来我们看看这些传输各自的特点,同时了解一下这些传输方式在生活中的应用。
控制传输
一种可靠的双向传输,所有USB设备必须支持的一种传输方式,该传输一般发生在端点0 中,用于USB的枚举、配置(也可能进行其他数据传输)等阶段。而我们接下来需要详细介绍的传输方式就是它。
当设备插入主机后,主机通过端点 0 (还记得前面说它是双向端点吗)进行控制传输,通过一系列的数据交互,主机可以了解设备有多少个接口,有多少可用的端点等各种设备信息。
你的设备能否被主机(电脑)正确识别,完全取决于控制传输能否正常进行,这是 USB 学习中最先遇到的拦路虎,也是很多人望而却步的一个地方,但是希望大家通过鱼鹰的介绍能够真正掌握它。
在带宽(所谓带宽,可以认为主机对USB总线进行分时数据传输,比如1秒中使用100毫秒用于控制传输)使用上,高速端点的控制传输不能占用 20 %的微帧(125 us 一个微帧),全速和低速不能超过 10 %(1 ms 一帧)。
在控制传输中,为了实现完整的一次控制传输,一般由三个阶段组成:
建立阶段、数据阶段(该阶段可能没有,由建立阶段的数据决定)、状态阶段,每一个阶段都由传输事务组成,即存在三个数据包的传输。

我们可以具体看看上面最简单的无数据阶段控制传输(其他传输类似):

这里需要特别注意的是,建立阶段一定是DATA0 数据包,之后如果有数据阶段,将进行翻转,变成 DATA1,并且在每次正确数据传输后都会进行一次翻转,这个机制用于保证数据被正确接收,而不是发送方发送的重复数据包(如果对方没有正确接收数据,DATAx不会翻转)。
在状态阶段,一律使用 DATA 1进行回复,状态阶段的数据包中的数据为空,也就是说不携带任何数据。
同时,根据建立阶段中的数据要求不同,比如要求发送数据或者接收数据,将使用相反的 IN 或 OUT 令牌完成状态阶段,比如建立阶段主机要求发送 15 字节到设备中,那么数据阶段将先使用 OUT 令牌发送数据,之后在状态阶段主机将使用相反的 IN 令牌获得空数据包。
因为传输时,可能需要多次传输事务才能完成数据阶段,那么如何判断对方数据传输已经完成,从而让主机不再发送IN或OUT令牌包传输数据呢?
有两种可能:
如果传输的数据大小刚好是端点支持数据大小的整数倍,比如一个端点最大数据包长度为64字节,如果传输128字节,就需要在最后发送一个空数据包。
而如果要传输127字节,那么因为最后一个包不是满负载(只有63字节),所以也将认为数据传输完成。

也就是说,最后一个数据包一定不是满载的,前面的数据包一定是满载的。这代表了数据阶段的结束。
当完成了以上几个阶段,一次控制传输才算完成。
正因为控制传输的情况比较复杂,所以学习起来也比较麻烦,不过鱼鹰会在接下来的 CDC 教程中详细介绍这种传输方式,目前暂时了解即可。
中断传输
中断传输时一种可靠的单向传输方式,采用定时轮询的方式收发数据,每次主机对中断端点查询时,如果设备有数据传输,则返回数据,否则NAK,表示未准备好。
同理,如果是主机发送数据,如果设备没有准备好接收,也将使用 NAK 回复。
如果需要双向传输,必须使用 IN 和 OUT 两个端点。
中断传输的延迟有保证,也就是说,可以在有限的延迟中完成传输,并且支持错误重传(在下一个周期进行重传),所以它是可靠的。因为可能产生错误重传,所以中断传输也会采用 PID 翻转的机制保证收发端数据的同步。
中断传输一般用于对延迟要求比较严格,同时数据量较小,比如我们常见的键盘、鼠标就是采用中断传输方式。
当你的鼠标、键盘插入电脑后,电脑在枚举配置成功后,就会按照描述符中的查询时间定时发送 IN 令牌包,获取所需的数据,如果设备没有数据发送,则回复 NAK。
对于全速端点,中断传输的间隔在 1 ms 到 255 ms 之间,对于低速端点,间隔时间限制在10ms到255ms之间, 对于高速端点,间隔为2^bInterval-1×125us, bInterval的值在1到16之间。
CMSIS-DAP 调试器使用的就是中断传输,全速模式下1 ms 64 字节一包数据,所以最大传输速率是64 K,速率不是很高,如果使用高速,可以达到125 us 1024 字节,还有一种高速高带宽的中断端点,125 us 微帧内可以进行三次中断传输,即125 us 内可传输 3072 字节。

(注意上图未画出握手包)
批量传输
批量传输是一种可靠的单向传输,但是和中断传输不同,传输延迟没有保证,它会尽可能的利用可以利用的带宽完成传输(说白了,就是个捡漏的),适合数据量比较大的传输。
当然如果说总线上只有批量传输,那么延迟也是能保证的,毕竟没人和它竞争带宽。
现实中,U盘就是采用批量传输,因为它对时间延迟不是那么严格,只要可靠的完成大量数据的传输即可。
低速设备不支持批量传输,高速设备批量最大包长度为512字节,全速批量可以为 8、16、32、64,选择余地比较大。
因为会错误重传,所以需要 PID 的翻转机制,即按照 DATA0 – DATA1 – DATA0 – DATA1……的方式翻转,允许 3 次以下的传输错误,超过三次,主机将认为端点功能错误 (STALL),放弃该端点的传输,需要主机使用控制传输恢复该端点的功能。

注意上面的 STALL 回复,这个代表端点错误,一旦回复该 STALL,如果没有主机干预,设备将一直使用 STALL 回复,说明该端点不支持该功能或者产生了错误。
同步传输
这种传输是四大传输中唯一不可靠的传输方式,但是好处就是可以保证带宽,并且没有延迟,而且因为是不可靠的传输,所以没有握手包,也不支持 PID 翻转,主机在安排这些传输事务时,同步传输拥有最高的优先级。
高速同步端点最大包长度为 1024,全速为 1023。
高速端点在一个微帧内仅允许一次同步传输事务,而高速高带宽的同步端点可以在一个微帧内传输三次,即3072 Byte / 125us。
在现实中,这种传输用于摄像头、USB音响等,因为它们对实时性要求比较高,但是可以容忍错误(摄像头偶尔出现了一帧有错误的画面,没多大关系,因为下一帧画面马上就会传过来)。

在前面的介绍中,一直都有帧、微帧的身影,那么它是什么?
我们知道,令牌包中有一种特殊的包,称之为 SOF (start of frame)包,格式如下:

CRC校验为 5 bit,和 11 bit 的帧号刚好凑成 16 bit 两个字节。
高速设备中每过 125 us 发出一个微帧,全速每过 1 ms 发出一帧,之后才会开始数据传输。
主机在每个帧(微帧)的开始传输一个SOF,每次帧号加 1,当达到 0x7FF 时,将清零重新开始计数。
看图理解 SOF 和其他传输的关系:

看上图可以了解到,每过一定时间(1 ms或者 125 us),主机发出 SOF 包,接下来进行传输事务(四大传输中的一种),每一个传输事务中又包含了三个数据包(我们可以认为SOF就是 USB 总线中的时钟信号)。
通过上图,我们就可以理解帧、传输、传输事务、包之间的关系了。
再用另一个图看看四大传输之间的关系:

可以看到,假如总线中有四类数据需要传输,那么主机将在每帧开始发送SOF包,然后优先安排同步传输,之后安排中断传输,其次是控制传输,最后才是批量传输(大容量传输),所以说批量传输是专业捡漏的。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
Protel 99 SE 视频教程 —— 第七节 绘制PCB印制电路板(2)
ECM 麦克前置放大器
昨天是父亲节,都往家里打电话了没?
欧洲半导体辐射探测器市场研究报告(2025 年)
华为计划在阿联酋、沙特阿拉伯和泰国出售其旧款 Ascend 910B 处理器
SK 海力士据报道将 DDR4/ LPDDR4X 合同价格上调 20%,因 Q3 需求保持强劲
三星已获得苹果 2026 折叠手机的独家 OLED 面板订单
米尔将出席瑞芯微第九届开发者大会
LG Innotek 推出铜柱基板技术,助力智能手机更轻薄
Protel 99 SE 视频教程 —— 第五节 创建PCB元器件
这下google能搜到我们了
Protel 99 SE 视频教程 —— 第三节 库文件的操作
AOL与Yahoo!商务策略分析
PowerPCB教程浓缩版
POWERPCB入门教程
Protel 99 SE 视频教程 —— 第六节 绘制PCB印制电路板(1)
PowerPCB软件培训
SRS效果处理器
基于TI GaN FET的10kW单相串式逆变器的设计注意事项
ADI中国三十而立
PowerPCB输出Gerber文件步骤图解
北京好吃又便宜的地方
音量控制电路
安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代
Protel 99 SE 视频教程 —— 第四节 生成网络表文件
立体声耳机频响测试仪
Pickering Interfaces 发布最新版《PXIMate》PXI 实用指南,助力工程师高效构建 PXI 测试系统
三段式音调控制器(STK3048)
PowerPCB快捷命令中文译文
日本对华援助的始末及是非