网上关于USB协议的文章很多,但往往只讲了基本概念或者某一部分的内容,加之USB协议本身十分庞大,导致许多初学者看完云里雾里的,所以我想写个文章把USB实际开发中涉及到的一些要点简单整理一下
物理层
USB采用D+和D-差分数据线,数据编码采用NRZI(非归零编码),每6个“1”填充一位“0”,连接和断开事件由D+和D-上的上拉电阻实现,同时这个上拉电阻也是区分高低速设备的工具,低速设备在D-上集成上拉电阻,全速和高速设备在D+上集成上拉电阻,还有一个额外的握手机制用于区分高速和全速设备。

USB协议类型
目前比较常见的USB有三类,主要区别是速率不同

USB数据格式
域:是USB数据的最小单位,由二进制的0,1组成
1.同步域(SYNC),
2.标识域(PID)
3.地址域(ADDR)
4.端点域(ENDP)
5.帧号域(FRAM)
6.数据域(DATA)
7.校验域(CRC)
包:是USB总线数据传输的最小单位,由域组成
1、令牌包
2、数据包
3、握手包
事务传输:每次传输一个事务,由若干数据包组成,不能跨帧。
- 控制传输
- 中断传输
- 批量传输
- 同步传输
帧:时间基准概念,每帧1ms,可以有多个事务
微帧:高速USB中的的时间概念,每个125us。
以上属于硬件层面的内容,一般由usb控制器实现,注意处理好对应中断即可。
USB抽象模型
端点(Endpoint):端点是USB软件层面可以见到的最低层接口,它是USB主机或设备上的一个数据缓存区,支持单向输入或输出,输入端点以0x80起头,输出以0x00起头, USB硬件可以为上层提供端到端的数据传输服务
- 输入端点(IN)
- 输出端点(OUT)
- 配置端点
- 批量传输端点(Bulk)
高速/全速设备最多支持15组端点。
接口(interface):接口用于完成特定传输功能,一个接口由若干端点组成(一般有输入端点和输出端点用于完成双向数据传输)
类(class): 一个类可以看作一个对象,是实现一个抽象设备的单位,一个类由一个或两个接口组成

设备(device):设备是一个实体单位,每个USB接口上插的就是一个设备,一个设备中可以有多个类,用于同时实现不同的功能。每种实体设备有自己的PID和VID。
配置:配置是设备的配置选项,一个设备可以有多种配置,用于设置该设备工作在不同工作模式下。
复合设备(Composite):复合设备把几个子设备汇集到一起,例如usb hub就是一个典型的复合设备。
软件层面的一些基本概念就讲完了,USB描述符和USB枚举过程涉及的东西也比较多,准备留到下篇文章再讲。
本文链接:https://blog.csdn.net/CSDN1344789841/article/details/115017680
转载需标明出处
参考文章:https://blog.csdn.net/u010142953/article/details/82627591
本文深入浅出地介绍了USB协议的基本原理和技术细节,包括物理层特性、数据格式、传输类型及软件层面的重要概念。

被折叠的 条评论
为什么被折叠?



