Usb Transfer Protocol

本文详细介绍了USB系统中Pipe的概念及其分类,包括Stream Pipe和Message Pipe的区别,并深入探讨了Control Transfer的工作原理及其在USB通信中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pipe
USB的pipe的两端分别指的是USB host端的内存区域,和设备端的endpoint。
pipe分为两类,一类是stream pipe, 另一类是message pipe。
两类的主要区别是,message pipe发送的数据,都是usb协议里规定好的结构,而steam pipe发送的数据则没有什么要求。
还有一个重要的概念就是,message pipe要求IN和OUT,而且必须是一个endpoint支持IN,OUT,也就是要求全双工。所以endpoint 0的control transfer就总是message pipe。但是只能是endpoint 0可以使用control transfer么?其实不是,除了endpoint 0之外,其实还可以有其他endpoint支持全双工,这就根据设备的支持了,一般这么用的比较少。下面介绍control transfer的时候会介绍到。

Transfer
USB协议规定了4种transfer,分别为control transfer, isochronous transfer, bulk transfer, interrupt transfer.
一个transfer由多个transaction组成,一个transaction由多个packet组成。

control transfer
一个control transfer由SETUP, DATA, STATUS三种transaction组成,其中SETUP是由host -> device, STATUS是由device -> host。DATA是可有可无的,DATA的传输方向也是由SETUP里去指定的。
control trnasfer属于message pipe, 里面传输的数据都是定义好了的结构体,比如set configuration之类。
一个device必须有一个control transfer,也就是使用的endpoint0,但是device不见得只有一个control transfer,也可以有其他的全双工的endpoint去运作附加的control transfer

SETUP transaction的数据都是USB协议定义好的结构体,这个结构体允许vendor指定自己的专门设备的一些command。DATA transaction如果有的话,就跟在SETUP后面,其也有一个USB定义好的结构体,除非传输的是vedor指定的信息。最后是STATUS transaction,这个也是有USB协议规定好的。

基于control transfer的endpoint决定了最大的packet大小,full-speed的设备为8, 16, 32, 64个bytes, high-speed设备支持64 bytes, low-speed为8bytes.这个包的最大size决定于wMaxPacketSize。这个wMaxPacketSize是在device descriptor里,所以正确的读取顺序为,先读8个bytes,解析后得到wMaxPacketSize后,再去用真实的size继续操作。

还有一点,这个wMaxPacketSize,也就是max packet大小,指的是DATA transaction里的真实data filed的size。像SETUP,STATUS这些transaction,都是USB定义好的,所以size也是固定的,所以就跟这个最大size没有关系了。如果传输的数据大于packet的max size里,那就分多个packet。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值