USB基础知识

来源:互联网 发布:淘宝全民抢拍 编辑:程序博客网 时间:2024/06/09 12:12

1. USB是什么?
USB是Universal Serial Bus的缩写,中文译为通用串行总线。
2. 一些重要概念
主机(Host)和设备(Device)
接口(Interface)
管道(Pipe)是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点间交互数据的能力。管道包括数据流管道和消息管道。
端点(Endpoint),实际上是设备硬件上具有一定大小的数据缓冲区。USB系统中,每一个端点都有唯一的地址,是由设备地址和端点号给出的。默认设置端点0用作控制传输端点,其他端点必须在设备被主机配置后才能使用。
上行、下行:upstream、downstream,设备到主机为上行,主机到设备为下行。

3. USB的数据格式
USB数据是由二进制数字串构成的,首先数字串构成域,域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。
域:是USB数据最小的单位,可分为七个类型:同步域(SYNC)、标识域(PID)、地址域(ADDR)、端点域(ENDP)、帧号域(FRAM)、数据域(DATA)、校验域(CRC);
包:由域构成。可分为四种类型:令牌包、数据包、握手包和特殊包。
事务:一般由令牌包、数据包(可选)、握手包组成。
①令牌包:用来启动一个事务,总是由主机发送。
②数据包:可以从主机到设备,也可以由设备到主机,方向由令牌包决定。
③握手包:通常情况,数据的接收者发送握手包(ACK或者NAK)。
总结:USB的最小单元是“域”,由“域”构成了“包”,再由“包”构成了“事务”,最后由“事务”构成了“传输”,在应用层面,我们看到的只是传输,所以USB协议栈就需要完成传输以下的所有事情。

4. USB的四种传输类型
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。
控制传输,分三个过程,建立过程、数据过程(可选)、状态过程。
主要应用于设备的枚举过程和对数据准确性要求较高的场合。
同步传输,是一种实时的、不可靠的传输,不支持错误重发机制,
主要用在数据量大,对实时性要求较高的场合。
批量传输,使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包阶段、握手包阶段。
批量传输是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的带宽来完成传输,适合数据量比较大的传输。
中断传输,是一种轮询的传输方式。
主要用在数据量小,但对时间要求严格的场合。如人机接口设备(HID)中的鼠标、键盘等。
PS.
一个具体的端点只能工作在一种传输模式下。通常我们把工作在什么模式下的端点,叫做什么端点。如控制端点、批量端点、同步端点、中断端点。
端点0是设备的默认控制端点,在设备上电后就存在并可以使用,在Set Config之前所有的传输都是通过端点0传输的。
端点描述符中规定了端点所能支持的最大包长。

5. USB相关的硬件
USB设备,从物理上的逻辑结构来说,包含了主机Host端和设备Device端。其中,主机Host,有对应的硬件的USB主机控制器Host Controller,而设备端,连接的是对应的USB设备。
由于历史原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,xHCI.
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

6. USB相关软件
如果某个USB设备正常工作,除了对应的硬件之外,还需要对应的软件支持。
USB设备端的固件:对于USB设备端来说,内部是需要有对应的设备端的驱动,它实现了对应的设备端的USB所要做的事情,主要是相应的一些标准的请求,完成对应的数据读取和写入等。
主机Host端,也需要对应的驱动,此部分驱动,无论是Linux下,还是Windows下,都已经实现了常见的驱动,所以一般来说,很少需要驱动开发者再去写相关的驱动程序。

后续,会更新USB请求及描述符…