![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
USB
文章平均质量分 82
USB协议介绍,包括枚举过程,速度识别,字节序,编码格式,位填充,连接检测,断开检测,设备描述符,接口描述符,字符串描述符和配置描述符,以及鼠标实例分析,鼠标实现,键盘实现,复合设备,MSC 大容量设备等等
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
tyustli
不抛弃,不放弃
展开
-
U盘实现——U 盘枚举过程
U 盘需要两个端点,一个输入端点和一个输出端点,且端点类型为。设备描述符,字符串描述符及设备限定描述符与。,所以此时的配置描述符集合结构为。一致,这里仅介绍不同点。原创 2023-03-28 22:55:36 · 578 阅读 · 0 评论 -
U盘实现——MSC 介绍
BOT 即 bulk only transport ,在仅批量传输的结构和过程中,共分成三个阶段:命令阶段,数据阶段和状态阶段。原创 2023-03-28 22:53:40 · 1335 阅读 · 0 评论 -
USB组合设备——带鼠标功能的键盘
带鼠标功能的键盘实现原创 2023-03-27 22:50:46 · 1263 阅读 · 1 评论 -
USB键盘实现——带指示灯的键盘(九)
带指示灯的键盘原创 2023-03-27 21:29:26 · 1091 阅读 · 0 评论 -
USB键盘实现——报告的返回(八)
bit7 位表示数据方向,输入端点 D7 为 1。所以输入端点 1 的地址为 0x81。中设置的报告,返回 8 字节数据。将上述报告通过端点返回即可。USB 端点数据分析。原创 2023-03-27 12:50:45 · 321 阅读 · 0 评论 -
USB键盘实现——报告描述符(七)
在请求 HID 报告描述符之前,主机会有一些类特殊请求,例如。请求返回:设备返回一个 0 长度的数据状态包即可。不同的是,键盘的报告描述符和鼠标是不同的。至此,HID 键盘的所有描述符全部返回。键盘报告描述符的返回,参考。HID 键盘枚举日志。原创 2023-03-27 12:34:26 · 846 阅读 · 0 评论 -
USB键盘实现——设置配置和获取配置(六)
只有在收到非 0 的配置值之后才可以使能非 0 端点,否则要禁用非 0 端点。后,又单独获取了几次设备描述符和配置描述符等,描述符的返回这里不再赘述。在数据阶段返回 1 字节的。USB 控制端点收到的数据。USB 控制端点收到的数据。字符串描述符内容解析和。HID 键盘枚举日志。原创 2023-03-27 12:25:38 · 667 阅读 · 0 评论 -
USB键盘实现——设备限定描述符(五)
设备限定描述符(Device Qualifier Descriptor)说明了能进行高速操作的设备在其他速度时产生的变化信息。例如,如果设备当前在全速下操作,设备限定描述符返回它如何在高速运行的信息。如果设备既支持全速状态又支持高速状态,那么就必须含有设备限定描述符(Device Qualifier Descriptor)。设备限定描述符(Device Qualifier Descriptor)中含有当前没有使用的速度下这些字段的取值。原创 2023-03-27 12:24:15 · 448 阅读 · 0 评论 -
USB键盘实现——字符串描述符(四)
USB字符串描述符原创 2023-03-26 22:47:18 · 745 阅读 · 0 评论 -
USB键盘实现——配置描述符集合(三)
USB键盘原创 2023-03-26 22:41:03 · 1815 阅读 · 0 评论 -
USB键盘实现——设置地址(二)
USB键盘设置地址原创 2023-03-26 22:28:28 · 608 阅读 · 0 评论 -
USB键盘实现——设备描述符(一)
USB 键盘的设备描述符原创 2023-03-26 22:22:50 · 615 阅读 · 0 评论 -
USB鼠标实现——HID 报告的返回(八)
端点地址:bit7 位表示数据方向,输入端点 D7 为 1。所以输入端点 1 的地址为 0x81。原创 2023-03-26 19:14:51 · 738 阅读 · 0 评论 -
USB鼠标实现——报告描述符(七)
HID报告描述符的实现即返回原创 2023-03-26 17:35:26 · 1266 阅读 · 0 评论 -
USB鼠标实现——设置配置和获取配置(六)
主机在获取完后,又单独获取了几次设备描述符和配置描述符等,描述符的返回这里不再赘述。原创 2023-03-26 12:20:14 · 494 阅读 · 0 评论 -
USB鼠标实现——设备限定描述符(五)
设备限定描述符(Device Qualifier Descriptor)说明了能进行高速操作的设备在其他速度时产生的变化信息。例如,如果设备当前在全速下操作,设备限定描述符返回它如何在高速运行的信息。如果设备既支持全速状态又支持高速状态,那么就必须含有设备限定描述符(Device Qualifier Descriptor)。设备限定描述符(Device Qualifier Descriptor)中含有当前没有使用的速度下这些字段的取值。原创 2023-03-26 11:50:02 · 608 阅读 · 0 评论 -
USB鼠标实现——字符串描述符(四)
USB 字符串描述符:语言ID,产品字符串,厂商字符串和序列号字符串原创 2023-03-26 10:51:46 · 466 阅读 · 0 评论 -
USB鼠标实现——配置描述符集合(三)
配置描述符集合返回原创 2023-03-25 23:06:06 · 828 阅读 · 0 评论 -
USB鼠标实现——设置地址(二)
HID 鼠标枚举过程分析。原创 2023-03-25 22:30:28 · 708 阅读 · 0 评论 -
USB鼠标实现——设备描述符(一)
USB 鼠标实现之设备描述符原创 2023-03-25 22:20:36 · 1381 阅读 · 0 评论 -
USB鼠标分析——HID 报告的返回(九)
1、枚举2、设备描述符3、设置地址4、配置描述符5、接口描述符6、HID 描述符7、端点描述符8、字符串描述符9、HID 报告描述符10、HID 报告的返回原创 2020-01-17 11:30:53 · 664 阅读 · 1 评论 -
USB鼠标分析——HID 报告描述符(八)
USB 鼠标获取完字符串描述符之后,又请求了几次设备描述符和配置描述符,这些描述符在上面已经解析过了,这里就不再重复。在请求 HID 报告描述符之前,主机会有一些类特殊请求。下图为 HID 协议文档中的 HID 报告描述符的示例。关于报告描述符的详细解释参考 HID 协议文档。获取报告描述符的请求如下所示。原创 2020-01-17 11:29:56 · 1694 阅读 · 1 评论 -
USB鼠标分析——字符串描述符(七)
bLength:该描述符的长度bDescriptorType:描述符类型(字符串为 0x03)wLANGID[0]:语言 ID 号 0。原创 2020-01-16 18:11:03 · 1389 阅读 · 1 评论 -
USB鼠标分析——端点描述符(六)
USB鼠标详解阅读顺序1、枚举2、设备描述符3、设置地址4、配置描述符5、接口描述符6、HID 描述符7、端点描述符8、字符串描述符9、HID 报告描述符10、HID 报告的返回linux内核中对端点描述符的定义,目录:linux/include/uapi/linux/usb/ch9.h/* USB_DT_ENDPOINT:...原创 2020-01-16 16:58:43 · 2863 阅读 · 1 评论 -
USB鼠标分析——HID 描述符(五)
HID 类的设备在配置描述符中还需要一个 HID 描述符。它是一个类描述符,跟在接口描述符后面,HID描述符的结构如下所示bLength:该描述符的长度。它的大小与该描述符中下级描述符的个数有关。例如,只有一个下级描述符时,总长度为:1 + 1 +2 + 1 + 1 + 1 + 2 = 9 字节bDescriptorType:描述符的编号。HID 描述符的编号为 0x21bcdHID:2 字节,是该设备所使用的 HID 协议的版本号。原创 2020-01-16 16:40:27 · 1569 阅读 · 0 评论 -
USB鼠标分析——接口描述符(四)
USB鼠标详解阅读顺序1、枚举2、设备描述符3、设置地址4、配置描述符5、接口描述符6、HID 描述符7、端点描述符8、字符串描述符9、HID 报告描述符10、HID 报告的返回linux内核中对接口描述符的定义,目录:linux/include/uapi/linux/usb/ch9.h/* USB_DT_INTERFACE: ...原创 2020-01-16 16:09:53 · 2301 阅读 · 1 评论 -
USB鼠标分析——配置描述符(三)
bLength:配置描述符的长度。标准的 USB 配置描述符的长度为 9 字节bDescriptorType:描述符的类型。配置描述符的类型编码为 0x02wTotalLength:2 个字节,表示整个配置描述符集合的总长度,包括配置描述符,接口描述符,类特殊描述符(如果有)和端点描述符,注意低字节在前。bNumInterfaces:表示该配置所支持的接口数量。通常功能单一的设备只具有一个接口,而复合设备则具有多个接口bConfiguration:表示该配置的值。原创 2020-01-16 15:53:37 · 1505 阅读 · 0 评论 -
USB鼠标分析——设置地址(二)
章节我们知道,获取到 USB 的设备描述符之后就会对设备再次进行复位,然后进入设置地址阶段。从 USB 的枚举过程 可知,下一步是获取设备描述符(真心实意的获取),这一部分与。设置完地址之后,后面的通信主机与设备通信都是使用的 0x14 这个地址。设备描述符获取到之后,下一步就是获取配置描述符,数据过程如下。例如,一个 USB 鼠标的设备地址过程如下所示。设置地址的标准请求的代码为。类似,这里不再展开讲解。原创 2020-01-16 15:17:14 · 3171 阅读 · 4 评论 -
USB鼠标分析——设备描述符(一)
USB 设备描述符及各个字段的含义原创 2020-01-16 14:56:24 · 2321 阅读 · 0 评论 -
USB——硬件控制器分类(OHCI UHCI EHCI xHCI)))
OHCI 不仅仅用于 USB,也支持一些其他的接口,比如苹果的 Firewire 等,OHCI 由于硬件比较难,所以软件要求就降低了,软件相对来说比较简单。全称是 Kinetis Host Controller Interface,因在 NXP Kinetis 系列微控制器中被大量使用而得名,是一个设计简单但功能完整的 USB 控制器,可以工作在 单一的主机和设备模式下,配合一些其他的芯片也可以支持 OTG 工作模式,具有占用内存小并且驱动程序易于开发的特性。OHCI、UHCI都是USB1.1的接口标准。原创 2023-09-07 12:21:05 · 2529 阅读 · 0 评论 -
USB 端点停止
握手包中有一个 STALL 包,由 USB 设备方发出,用来表示某个端点不能发送或者接收数据,或者表示不支持控制传输的某种请求。端点一旦发出 STALL 包,表示其处于停止状态,在停止状态被清除前,该端点不能行使其功能。同时,只有 USB 设备可以返回 STALL 包,USB 主机在任何情况下都不能发送 STALL 包。针对 USB 设备的不同端点,STALL 包在两种不同的情况下使用:功能停止(function stall),和协议停止(protocol stall)。原创 2024-06-18 21:14:41 · 158 阅读 · 0 评论 -
USB 断开检测
当 USB 设备工作在高速模式时,D+ 和 D- 上的信号输出电压,如高速空闲状态电压(high-speed idle level),高速数字信号高电平电压(high-speed data signaling high)和全速设备是不一样的,所以在检测高速 USB 设备断开时,D+ 和 D- 的检测标准和全速设备是不一样的。由于高速主机是通过检测帧开始的包结束来判断设备是否断开,而帧开始的时间间隔是 125us,所以,当设备被断开后,最多在 125us 之内,主机就可以检测到设备已经断开。原创 2023-05-07 19:52:07 · 2247 阅读 · 0 评论 -
USB 连接检测
当 USB 设备连接到 USB 主机时,USB 设备就可以通过检测 Vbus 的变化来确定连接状态。对于 USB 设备或者 USB 主机,如果不能检测到对方的连接,USB 的功能也就无从谈起,所以 USB 设备检测是否连接到主机以及 USB 主机检测是否有 USB 设备是 USB 协议能够进行后续工作的前提。USB 协议支持热插拔的特性决定了 USB 主机必须能够动态地检测 USB 设备的连接和断开,这是 USB 设备和 USB 主机协同工作的前提。全速/高速设备的插入检测。原创 2023-05-07 19:46:52 · 4212 阅读 · 0 评论 -
USB 字节序,编码格式及位填充
字节序,NRZI,编码格式,位填充原创 2023-05-07 11:59:44 · 509 阅读 · 0 评论 -
USB 速度识别
在 USB host 或者 hub 的每个下行端口(downstream facing port)的 D+ 和 D- 上分别接了一个 15KΩ 的下拉电阻到地,这样,当端口空闲时 (没有设备插入),输入端就被两个下拉电阻拉到了低电平。而在 USB 设备端的上行接口 (upstream facing port),D+ 或者 D- 上接了一个 1.5KΩ 的上拉电阻到 3.3V 电源。原创 2023-04-11 23:02:04 · 2414 阅读 · 0 评论 -
USB-标准设备请求
USB标准设备请求linux内核中对标准设备请求的定义,目录:linux/include/uapi/linux/usb/ch9.hstruct usb_ctrlrequest { __u8 bRequestType; __u8 bRequest; __le16 wValue; __le16 wIndex; __le16 wLength;} __attribute...原创 2020-01-14 17:38:50 · 1258 阅读 · 0 评论 -
USB 枚举过程
枚举过程的详细介绍1、USB主机检测到 USB设备插入后,就会先对设备复位。USB设备在总线复位后其地址为 0 ,这样主机就可以通过地址 0和那些刚刚插入的设备通信。2、USB主机往地址为 0的设备的端点 0发送获取设备描述符的标准请求(这是一个控制传输的建立过程)。设备收到该请求后,会按照主机请求的参数,在数据过程将设备描述符返回给主机。主机在成功获取到一个数据包的设备描述......原创 2020-01-14 11:07:22 · 3060 阅读 · 1 评论 -
描述符之间的关系
设备描述符里决定了该设备具有多少种配置,每种配置都有一个配置描述符。每个配置描述符中又定义了该配置里有多少个接口,每个接口都有一个接口描述符。在接口描述符里又定义了该接口有多少个端点。每个端点都有一个端点描述符,端点描述符定义了端点的大小、类型等。如果有类特殊描述符的话,它跟在相应的接口描述符之后。注意:配置描述符号、接口描述符、类特殊描述符(如果有)和端点描述符是一起返回的,统称为配置描述符集合。当设备有多个接口,并且接口有多个端点时,数据返回配置描述符集合的格式如下。原创 2020-01-20 17:30:00 · 566 阅读 · 1 评论 -
描述符——端点描述符
端点描述符原创 2023-09-24 09:35:42 · 98 阅读 · 0 评论 -
描述符——接口描述符
接口描述符原创 2023-09-24 09:26:38 · 98 阅读 · 0 评论