USB协议有很多博主讲的很详细了,我这里就是按照我个人的理解总结下,本文章倾向于总结结构,关于结构中的每个字节的具体含义推荐大家还是去找手册,我这里只是一笔带过。
本文章借鉴了其他博主的一些内容,侵删!!!!
1 USB协议术语
首先来看下USB通信的简单框图
如上图所示,左边是主机(上位机),右边是USB设备,对于USB协议来说,整个通信链路上,只能有一个主机,剩下的都是从机,一个主机最多挂载127的设备,为什么是127个设备呢,这个是和协议中的一个指令参数有关,后续我们再说。
1.1配置(Configuration)
一个USB设备可以有多种配置,不同的配置对应于完全不同的功能,比如一会是作为U盘用,一会是作为网卡用,这就是两个不同的配置。
主机可以控制设备选择哪个具体的配置,但是设备当前只能选择一个配置。一般1个USB设备只包含一个配置。
1.2 接口(Interface)
配置下一级是接口
一个配置可以有多个接口,每个接口都是这个配置下的一个小的功能,比如UVC类USB,分为 控制通信 interface功能和数据interface功能,比如,一个打印机可以有一个接口用于打印,另一个接口用于管理。
1.3 End point (ep)端点
接口下一级是端点
一个接口完成一种功能,每种接口(功能)配有1个或者多个端点,多个端点共同完成某个接口的功能。
端点和主机之间的通信 线路 被称之为 pipes(管道)。
主机和USB设备通信,实际上是要指定和USB设备中的哪个端点通信,因为一个USB设备可以支持多个不同的端点,每个端点都可以传输不同的数据,这些端点共享USB的带宽,(因为物理链路上就只有那么几根,速率也是固定的)
每个USB设备最多支持16个端点同时每个USB设备都必须支持端点0,因此用户最多只能多加15个端点。注意除了控制端点0是双向的以外,其余的每个端点的方向是单向的,要么是IN,要么是OUT,不能同时IN OUT。
为什么是16个端点和127个USB设备呢,这个是由 USB通信协议规定的,USB通信协议的最基本单位是包(packet),一个包的基本格式如下图,下图中的ADDR中的7bit是USB设备地址,就是指是和哪个USB设备通信的,4bit ENDP是端点号,端点号是指和USB设备中的哪个端点通信的。
端点的分类
1 Control Endpoint: 端点0,最基本的控制通信指令传输。
2. Bulk Endpoint: 用于大批量数据传输的端点
3. Interrupt Endpoint: 用于低延迟的中断传输端点
4. Isochronous Endpoint: 同步端点,用于对延迟要求比较低的场景,比如同步视屏,这些场景可以丢数据,但是不能有延迟
上述术语结构可以如下图所示: