
usb
文章平均质量分 96
Liuqz2009
不念过去不畏将来,全心活在当下!
寒窗二十载,人生再出发!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SCSI 简述
SCSI 协议主要是在主机和存储设备之间传送命令、状态和块数据。操作系统对外部设备(如磁盘、磁带、光存储、打印机和扫描仪)的I/O操作,可以通过SCSI协议来实现,一般情况下SCSI协议都嵌入到设备驱动器或者主机适配器的板载逻辑中。因为SCSI协议层位于操作系统和外部资源之间,它具有不同的功能组件。例如,应用程序一般将数据作为文件或者记录来访问。尽管数据最终都将在磁盘或者磁带介质上以数据块的方式存放,但是文件的检索需要一系列功能将未加工的块数据装配成应用程序能够操作的连续文件。原创 2025-01-09 10:04:28 · 497 阅读 · 0 评论 -
USB Hub 检测设备
第二个函数,usb_set_device_state(),这个函数用来设置设备的状态,在 struct usb_device 结构体中,有一个成员 enum usb_device_state state,这一刻会把这个设备的状态设置为 USB_STATE_POWERED,即上电状态。第五个函数,usb_get_status(),这个函数是专门为 Hub 准备的,不是为当前的这个 Hub,而是说当前 Hub 的这个端口上连接的如果又是 Hub,那么和连接普通设备就不一样。后面会用实例来查看效果。原创 2024-12-25 17:19:28 · 2591 阅读 · 0 评论 -
USB Root Hub 分析
会向主机控制器返回一些信息,或者说 Data,这个 Data 被称作 “Hub and Port Status Change Bitmap”,而从软件角度来看,主机控制器的驱动程序接下来会在处理好这个过程的 urb 之后,调用该 urb 的 complete 函数,对于 Hub 来说,这个函数就是。这里是 Root Hub,所以相应的 hub 驱动会识别这些 device。在这里我们匹配的刚才的接口设备,所以其会调用 hub 驱动的。我们知道,每当驱动注册到总线上,其会识别挂载在总线上的设备。原创 2024-12-25 11:53:51 · 680 阅读 · 0 评论 -
xHCI 简单分析
struct bus_type 是 Linux 内核中用于表示一种特定类型总线的数据结构。在内核中,每种总线类型(如 USB、PCI、I2C 等)都有自己的 bus_type 实例,用于定义和管理该总线上设备的注册、枚举和驱动程序绑定等操作。// 总线名称,如:usb, pci等字符串;// 总线属性列表// 驱动程序列表// 设备列表// ... 其他字段 ...原创 2024-12-20 16:46:57 · 1390 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(15)
如果要将设备模拟到 VM,则 VMM 应加载一个可以在多个 VM 之间共享设备资源的“主”驱动程序,并且对于将与之共享设备的每个 VF,模拟设备到 VM 的连接事件,建立模拟的设备槽,并将该槽映射到相应 VM 拥有的 VF。VF 生成的后续工作项将由 VMM 的设备主驱动程序处理,并转发到 VMM 拥有的物理 USB 设备。如上所述,当设备连接时,VMM 将对其进行评估并有选择地将其分配给 VM,但在这种情况下,VMM 将在 VM 的模拟外部集线器实例上模拟连接事件,而不是在 VM 事件环上生成。原创 2024-11-11 18:15:12 · 1289 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(14)
当中断器分配给 VF 时,PF0 可用的中断器数量会相应减少。那么 PF0 将拥有中断器 0-3、VF 1 中断器 4-7、VF 2 中断器 8-11 和 VF 3 中断器 12-15。VM 中断器范围寄存器 0 在逻辑上将引用物理功能 0 (PF0),但 PF0 提供所有中断器分配的池。硬件重置后,所有 VF 中断器范围寄存器 = “0”,即 VF 不拥有任何中断器。软件使用这些寄存器来管理 VF 的状态和中断器资源。应使用此寄存器的中断器计数和中断器偏移字段将 PF0 中断器分配给关联的 VF。原创 2024-11-08 17:49:12 · 1080 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(13)
由于调试功能为 USB 提供了一个“设备端”接口,用于管理设备的上游端口,而不是根集线器的下游端口,因此调试功能中的某些寄存器定义可能看起来与 xHCI 中的非常相似,但它们可能存在细微的差异以支持“设备端”操作。例如,调试功能事件环管理寄存器块的操作和定义与第 5.5.2.3 节中定义的 xHCI 事件环寄存器相同,只是它提供了专用于调试功能的事件环。调试功能会自动分配给第一个 xHCI 根集线器端口,该端口可检测到具有增强型超高速功能的根集线器或外部集线器的下游端口的连接。原创 2024-11-07 18:12:53 · 1318 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(12)
有关端口状态更改事件的使用和生成的更多信息,请参阅第 4.19.2 节。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。有关设置阶段 TRB 和控制端点操作的更多信息,请参阅第 3.2.9 节。另请参阅 USB2 规范中的第 8.5.3 节,了解有关 “控制传输” 的描述。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。有关 Isoch TRB 和同步端点操作的更多信息,请参阅第 3.2.11 节。的使用和操作的更多信息,请参阅第 4.11.3.1 节。原创 2024-11-06 18:21:49 · 1053 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(11)
注意:控制端点上下文 0 的最大数据包大小字段应由系统软件设置为端点的默认最大数据包大小,该值取决于设备的速度。对于高速等时和中断端点,此字段应设置为每微帧的额外事务机会数,即 USB2 端点描述符 wMaxPacketSize 字段的位 12:11 中定义的值。字段内的字节/字符应采用小端顺序,即,字符串的第一个字符在最低有效字节,第二个字符在下一个有效字节,依此类推。注意:添加上下文和删除上下文标志索引的计算方式与第 4.5.1 节中描述的输入上下文的设备上下文部分的设备上下文索引 (原创 2024-11-05 16:40:20 · 1168 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(十)
USB3 端口电源管理状态()和控制(Control)寄存器控制增强型超高速(USB链路U-State超时。有关链路电源管理的更多信息,请参阅 USB3 规范的第 11 节。。USB2 端口电源管理状态和控制寄存器提供xHC生成LPM令牌给下游设备所需的USB2 LPM参数。有关xHCI链路电源管理功能的更多信息,请参阅第 4.23.5.1 节。有关USB2链路电源管理的更多信息,请参阅 USB2 LPM ECR。。USB3端口链路信息()寄存器报告链路错误计数。原创 2024-11-04 11:48:49 · 1330 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(九)
字段内的字节/字符应采用小端顺序,即,字符串的第一个字符在最低有效字节,第二个字符在下一个有效字节,依此类推。基于 PCI 的 xHC 需要实现 PCI,即 0 类 PCI 设备标头,如下所示。有关电源管理寄存器块的定义,请参阅 PCI PM 规范中的第 3.2 节。,该寄存器与 PCI PM 规范中定义的结构几乎相同,但有一些额外的要求。这些 registers 的偏移量都是相对于主机控制器的 MMIO 地址空间的开头的。请参阅 PCIe 规范的第 7.8 节,了解有关此结构实现的详细信息。原创 2024-11-01 18:14:21 · 1209 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(八)
在“轻度”硬件复位(通过 USBCMD 寄存器中的轻度主机控制器复位 (LHCRST) 位)后,只有辅助电源井中未包含的操作和运行时寄存器应保持其默认值。本规范中有关电源传输的任何讨论的主要目的是提高各种实现之间的互操作性,而不指定特定的电源传输方法。或对为支持主机控制器的电源管理功能而明确定义的配置、命令和状态寄存器的引用将帮助读者识别需要特别注意的那些构造。注意:本节提供的规范和白皮书参考资料并非详尽的清单,鼓励读者参考可能与设计人员的具体实现相关的其他规范。,辅助)井的预期功能。原创 2024-10-31 18:14:50 · 1210 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(七)
在正常模式下,xHCI 的设计使所有 USB 设备(设备插槽 0-n)都出现在单个功能中。在虚拟化模式下,xHCI 设计为不同的虚拟功能,其中每个 USB 设备(设备插槽 0-n)都可以专门映射到特定的虚拟功能。在正常情况下, xHCI 除其他寄存器外,还实现了 PCIe 设备头空间,如第 5.2 节所述。xHCI 根集线器端口的初始状态应为 Disconnected 状态,即端口电源 (PP) 已断言,并且端口正在等待 USB 上的信号,指示设备已连接。支持的协议功能结构标识,请参阅第 7.2 节。原创 2024-10-29 18:13:17 · 1453 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(六)
此功能对于PCIe实现是可选的。如果设置了 PCI Express 功能结构 (5.2.8) 设备控制寄存器 (PCIe 规范第 7.8.4 节) 中的启用无监听位 (位位置 11,表 7-12),则允许 xHC 在其发起的不需要硬件强制缓存一致性的 PCIe 事务的请求者属性中设置无监听位 (请参阅 PCIe 规范第 2.2.6.5 节)。请注意,将此位设置为“1”不会导致 xHC 在其发起的所有 PCIe 事务上设置无监听属性。原创 2024-10-28 18:05:56 · 1291 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(五)
xHC供应商可以使用表 6-91 中标识的供应商定义的TRB类型代码来定义专有的TRB类型。供应商定义的 TRB 类型可用于定义命令、事件或传输 TRB。原创 2024-10-23 17:47:27 · 1389 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(四)
此错误仅适用于 USB2 协议端点,用于报告拆分事务上的错误,例如,xHC 无法调度 HS 拆分中断 IN 事务所需的完全拆分事务。请注意,切换周期 (TC) 位是在 B 段的链路 TRB 中设置的,而不是在段 A 的链路 TRB 中设置的, 因此,每次通过 Transfer Ring 后,Cycle 位的状态都会被切换。)标识创建者将环上的下一个工作项排入队列的位置,以及使用者将从环中取消下一个工作项排队的位置。工作已发布到设备的两个单独的传输环,系统软件应将两次写入发布到关联的门铃寄存器(原创 2024-10-17 18:29:16 · 1302 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(三)
xHC供应商可以使用表 6-91 中标识的供应商定义的TRB类型代码来定义专有的TRB类型。供应商定义的 TRB 类型可用于定义命令、事件或传输 TRB。。。。。。USB2 Port Link Info 寄存器是保留的,应被软件视为 RsvdP。。。。。原创 2024-10-14 13:53:48 · 1219 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(二)
xHC供应商可以使用表 6-91 中标识的供应商定义的TRB类型代码来定义专有的TRB类型。供应商定义的 TRB 类型可用于定义命令、事件或传输 TRB。。。。。。USB2 Port Link Info 寄存器是保留的,应被软件视为 RsvdP。。。。。原创 2024-10-12 13:39:18 · 1597 阅读 · 0 评论 -
XHCI 1.2b 规范摘要(一)
可扩展主机控制器接口的开发由 3 个关键因素驱动;速度、能效和虚拟化。USB 主机系统由许多硬件和软件层组成。图 3-1 说明了主机系统中协同工作以支持 USB 3.x 的构建块层的概念框图。原创 2024-09-29 16:59:29 · 2237 阅读 · 0 评论 -
USB 2.0 详解
当一个USB设备连接至USB主机,就要对设备进行枚举,所谓枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息加载合适的驱动程序,并且知道设备是什么样的设备。原创 2024-09-12 11:09:11 · 2033 阅读 · 0 评论 -
USB3.2 摘录(13)
进行连接时表现出正确的外围设备行为。图 10-26 是外围设备上行端口状态机的示意图。集线器的上行端口具有类似的功能要求。本节总结了哪些要求也适用于外围设备的。状态是外围设备的默认状态。以下部分提供了状态机的功能说明,该状态机在何时通过。外围设备应遵循第 10.5 节中关于面向上游的。子状态中首次未检测到远端接收器终端时发生。在此状态下,端口的链路应处于。端口,并确定了任何附加或不同的要求。),则应进行此转换。上的连接才能进入此状态。之外的任何状态进入打开。外围设备的上行端口与。1. 外围设备必须在。原创 2024-08-29 11:17:03 · 1237 阅读 · 0 评论 -
USB3.2 摘录(12)
如果功能选择器与状态更改相关联,则清除该状态更改将确认该更改。状态时,当此端口为接收方时,唯一有效的请求是获取端口状态 (请参阅 第 10.16.2.6 节) 和设置端口功能 (集线器对请求处理时间的限制比 Section 9.2.6 中规定的标准设备更严格,因为它们对于连接到。由于集线器在总线计数中起着如此关键的作用,因此建议所有请求的集线器平均响应时间小于 5 毫秒。如果功能选择器与状态更改相关联,则清除该状态更改将确认该更改。状态,并且可能会根据集线器的电源切换方法的限制,导致端口的电源断开。原创 2024-08-28 16:13:06 · 1029 阅读 · 0 评论 -
USB3.2 摘录(11)
总线供电的集线器应能够将所选配置的集线器电子设备或永久连接设备未使用的任何电源提供给公开的下游端口。集线器应能够在暴露的下游端口之间提供任意分割的电源(即,如果集线器可以为两个暴露的下游端口提供。电源拓扑,则不打开集线器的端口。如果集线器具有每端口的电源切换和每端口的电流限制,则一个端口上的过流情况仍可能导致另一个端口的功率低于指定的最小值。系统软件通过清除与集线器报告的状态更改相对应的更改状态来确认端口更改。系统软件知道集线器上的端口数(这在集线器描述符中报告),并相应地解码集线器和端口状态更改位图。原创 2024-08-27 18:02:33 · 1123 阅读 · 0 评论 -
USB3.2 摘录(10)
注意:如果相应下游端口的队列已满,则只要相应下游端口队列中有可用空间,标头数据包就会排队。如果下游端口队列已满,如果后续标头数据包被定向到不同的下游端口,则集线器应在下游端口队列已满时处理这些数据包。注意:如果相应下游端口的队列已满,则只要相应下游端口队列中有可用空间,标头数据包就会排队。如果下游端口队列已满,如果后续标头数据包被定向到不同的下游端口,则集线器应在下游端口队列已满时处理这些数据包。如果后续标头数据包被定向到不同的下游端口,则集线器应在下游端口缓冲区已满时处理这些数据包。原创 2024-08-27 16:27:36 · 922 阅读 · 0 评论 -
USB3.2 摘录(九)
图 10-16 显示了每个下游端口的 4 报头数据包 Rx 缓冲区和上行端口的 4 报头数据包 Tx 缓冲区。以下部分提供了状态机的功能描述,该状态机对面向集线器的上游端口表现出正确的行为。在此状态下,端口的链接应处于 eSS.Disabled 状态,相应的集线器 USB 状态应为 Attached。必须满足第 10.7.3 节中的要求,即从上游端口转发到下游端口的报头数据包的传播延迟的最大变化。以下部分提供了状态机的功能说明,该状态机为面向集线器的上游端口提供正确的链路电源管理行为。原创 2024-08-26 17:25:27 · 1018 阅读 · 0 评论 -
USB3.2 摘录(八)
表 10-2 显示了集线器下游 USB 标准 A 端口的 VBUS 允许状态,以及集线器上游端口的可能状态以及下游 USB 标准 A 端口的逻辑端口电源。对于未实现每端口功率控制的 Hub,在 Hub 移除 VBUS 之前,所有受移除 VBUS 影响的下行端口都应处于可能关闭电源的状态(参见表 10-2)。状态不同,终端在此状态下保持不变,并避免链路训练失败,这将允许下游设备进入合规模式或 USB 2.0 操作,应在 tReset 持续时间内驱动热复位信号。在这种情况下,端口应在下游端口链路上启动热重置。原创 2024-08-26 10:41:13 · 765 阅读 · 0 评论 -
USB3.2 摘录(七)
集线器提供USB设备和主机之间的电气接口。集线器直接负责支持许多属性,这些属性使 USB 对用户友好并向用户隐藏其复杂性。下面列出了集线器支持的USB连接行为电源管理设备连接/断开检测总线故障检测和恢复增强的SuperSpeed和 USB 2.0(高速、全速和低速)设备支持当USB集线器以 Gen 1x1 速度连接到其上游端口时,它应作为SuperSpeed集线器运行。当USB集线器以高于 Gen 1x1 的速度在其面向上游的port上连接时,它应作为集线器运行。原创 2024-08-26 10:28:39 · 1133 阅读 · 0 评论 -
USB3.2 摘录(六)
本章介绍同时支持增强型SuperSpeed和 USB 2.0(称为“USB 集线器”)的集线器的体系结构要求。本章还介绍了主机下行端口和集线器下行端口的功能要求之间的差异,以及外设上行端口和集线器上行端口之间的差异。本章包含对增强型 SuperSpeed 集线器的说明。增强型 SuperSpeed 集线器支持所有 Gen X x Y 速度。本章包括对SuperSpeed子模块(SuperSpeed中继器/转发器和SuperSpeedHub控制器)以及子模块(上行控制器、下行控制器和控制器)的描述。原创 2024-08-22 14:25:03 · 781 阅读 · 0 评论 -
USB3.2 摘录(五)
主机与端点传输所有的DPS可以作为一次单个同步突发事务处理或者它可以将传输分为更小的突发,像2,4,或8个DPs服务间隔中最后的同步突发带有剩下的数据包DP。Host 发送 DP给 Device,每个 DP 使用递增的包序号(0-31),Device 向每个 DP 回 ACK TP.同样的,Host 不必等待收到 ACKTP就可以继续发送下一个DP,如果 Device 回复了一个retry位被置位的 ACKTP,Host需要从该ACKTP指示的包序号开始重传 DP。它支持在保证的界限延迟下可靠的数据传输。原创 2024-08-21 15:46:47 · 1266 阅读 · 0 评论 -
USB3.2 摘录(四)
如果设备或者主机发送一个NumP域值减少的ACKTP包,那么减少的值不能比1大.例如,如果前一个ACKTP包NumP域值为5,那么对下一个收到的包的 ACK TP的NumP域值不应该比4小,只有下面的情况除外:-----如果设备能够接受数据但是不能再接收更多的数据了,则它应该发送一个NumP域值设为 0的 ACKTP 包。SETUP DP是一种特别的DP,它通过Setup域被设置为1来认证,可被寻址到任意端点SETUP是一种主机到设备的特别的数据事务处理,它允许主机初始化设备一条要执行的命令。原创 2024-08-20 12:08:40 · 993 阅读 · 0 评论 -
USB3.2 摘录(三)
应该用来配置没有停留在活动(U0)状态中能被改变的功能在接收到带 Force_LinkPM_Accept 位声称的 LMP 时,端口应该接受所有的 LGO_U1 和LGO_U2链路命令,除非端口收到一个带有 Force_LinkPM_Accept 位撤销声称的LMP注意:Force_LinkPM_Accept功能不正确的使用会严重影响链路的使用性能。添加到串流上的符号有影响(即帧包,控制或修改链路),像位编码,链路层帧,为了精简讲述,已经被移除了它们对协议层是不可见的)。较低值(0)的端口为上端口。原创 2024-08-19 11:46:45 · 1110 阅读 · 0 评论 -
USB3.2 摘录(二)
此外,错误检测功能还集成到数据包和链接命令中,以验证数据包和链接命令的完整性。操作中,链路控制字应包含一个 3 位头序列号、3 位保留、一个 3 位集线器深度索引、一个延迟位 (DL,Delayed)、一个延迟位 (DF,Deferred) 和一个 5 位 CRC-5。操作中,链路控制字应包含一个 4 位头序列号、2 位保留值、一个 3 位集线器深度索引、一个延迟位 (DL)、一个延迟位 (DF) 和一个 5 位 CRC-5。超速使用包来传输信息。头包由三个部分组成,一个头包帧,一个包头,一个链路控制字。原创 2024-08-19 11:44:09 · 1137 阅读 · 0 评论 -
USB3.2 摘录(一)
USB3.2 系统架构(图3-1)由两个同时活动的总线组成:一个 USB2.0 总线和一个增强型超高速总线。USB3.2 互连USB3.2 设备USB3.2 主机USB 3.2 集线器是一种特殊的 USB 设备,其目的是为超出由主机提供的总线提供额外的连接点。在本规范中,非集线器设备被称为外围设备,以区分它们与集线器设备。此外,在 USB 2.0 中,术语 “功能” 有时可以与设备互换使用。在此规范中,一个函数是设备中的一个逻辑实体。原创 2024-08-13 18:19:59 · 770 阅读 · 0 评论 -
USB 2.0 规范摘录
USB是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度可达 480Mb/S。USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下,设备最多可以获得 500mA 的电流。USB2.0 被设计成为向下兼容的模式,当有全速(USB 1.1)或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它们。一条 USB 总线上,可达到的最高传输速度等级由该总线上最慢的“设备”决定,该设备包括主机、HUB 以及 USB 功能设备。原创 2024-08-03 22:14:28 · 1356 阅读 · 0 评论 -
基于libusb的无驱设计(一)
这篇文章是引用他人的,^-^。驱动研发向来是内核研发中工作量最多的一块,随着USB设备的普及,大量的USB设备的驱动研发也成为驱动研发者手头上做的最多的事情。本文主要介绍Linux平台下基于libusb的驱动研发,希望能够给从事Linux驱动研发的朋友带来些帮助,更希望能够给其他平台上的无驱设计带来些帮助。文章是我在工作中使用libusb的一些总结,难免有错误,如有不当的地方,还请指正。转载 2012-08-20 18:15:45 · 1944 阅读 · 0 评论 -
linux下类似Bus Hound的工具
linux下类似Bus Hound的工具0推荐在linux大家有时候需要调试usb接口的串口消息,但是没有类似于windows下的bus hound工具,感觉比较痛苦,其实linux内核提供了usbmon这个工具,可以收集串口信息。1.准备:挂接debugfs (这个可以在内核配置中使能),加载usbmon模块(如果usbmon编译成模块). 如果usbmon编译到内核中的转载 2012-08-20 14:38:43 · 9852 阅读 · 1 评论