首页 > 产品 > 微控制器 (MCU) 和处理器 > 使用 Linux 的 Sitara™ 设备中的 USB 系统设计 >

基于 Arm 的处理器

最新课程

热门课程

5 在主机模式下使用 USB

这是“使用 Linux 的 Sitara 器件 USB 系统设计” 系列的第五个视频。 在本视频中,我将会解释 如何在主机模式下使用 USB。 我不会展示如何 使用特定的 USB 设备, 而是会介绍如何 检查是否正确枚举了 USB 设备以及如何 获得设备枚举信息。 我将提供 USB 主机模式概述, 然后介绍一些 我们将在本视频中 使用的 USB 术语。 最后,我将给出 几个例子来说明 如何检查 USB 设备枚举 和如何读取枚举信息。 USB 主机模式用于将 USB 接口呈现为 USB 主机端口, 就像 PC 上的端口一样。 它会枚举 连接的 USB 设备, 并使设备做好 准备供应用使用。 枚举对最终 用户是透明的。 它会将枚举的 USB 设备的功能呈现为 与非 USB 设备一样。 例如,拇指驱动器 可以呈现为 /dev/sda, 与 SATA 硬盘一样。 USB 网络摄像头 可以呈现为 /dev/video0, 跟视频卡一样。 USB 以太网 软件狗可呈现为 eth0 网络接口, 跟 PCI 网卡一样。 USB 采用分层星形拓扑结构。 USB 设备通过 集线器连接到 USB 主机。 集线器位于 每个星形的中心。 它有多个下游端口 来连接多个 USB 设备, 以形成星形。 允许的最大层数是 七层,包括根层, 这一层是主机所在的位置。 第 7 层中不允许使用集线器。 USB 设备通过 ID 来进行标识, 它是一个 VID 和 PID 对。 每一个 ID 都是嵌入在 USB 产品中的 16 位数字, 然后在枚举期间 传送到 USB 主机。 VID 由 USB-IF 进行分配和管理, PID 则由制造商分配。 什么是枚举? 它是一种用于 检测 USB 设备的 连接和断开状态 以便应用使用这些 设备的 USB 活动。 枚举过程分为 电气枚举和软件枚举 这两个阶段。 电气枚举由硬件处理, 不涉及软件。 Linux 中的软件枚举 还可以进一步 分为两个阶段, 即由 USB 内核驱动 程序处理的过程和 由 USB 类驱动 程序处理的过程。 稍后我将在本视频中 对此进行更多的解释。 如何检查 USB 控制器是否已经 处于主机模式和 准备好枚举 USB 设备。 Linux 内核启动日志 将会提供一些信息。 这是 AM335x 内核 启动日志的一个片段。 它表明 MUSB 控制器驱动程序已加载, 然后创建了两条 USB 总线,正如以红色 突出显示的消息所示。 我们也可以使用 lsusb 命令来检查 USB 总线是否就绪。 如果就绪,lsusb 命令 会显示 USB 总线信息。 否则,它会报告 -99 错误消息。 这是 AM56x 内核 启动日志的一个片段。 它表明 xHCI 控制器 驱动程序已加载, 然后,创建了两条 USB 总线,正如以红色 突出显示的消息所示。 请注意这两条 USB 总线的 PID。 一个是 0002。 另一个是 0003。 第一条是 USB 2.0 总线, 第二条是 USB 3.0 总线。 在准备就绪后, USB 主机可以枚举 连接的任何 USB 设备。 这段日志表示 在 USB 总线 3 上 枚举了一个 USB 高速总线集线器。 它被分配到地址 2。 集线器有四个下游端口。 我们还可以随时 使用 lsusb-t 命令 查看树状拓扑中 枚举的 USB 设备。 这里表示在总线 3 上 枚举了一个四端口高速集线器。 它被分配到地址 2。 这是一段枚举日志, 它表示在总线 2 上 枚举了四端口 超速 USB 集线器。 根据 USB 规范的要求, 超速 USB 集线器 还应该支持高速, 因此该日志还表明, 一个集线器被枚举成了 总线 1 上的高速四端口集线器。 很明显,该日志还告诉 我们,总线 2 是超速总线, 而总线 1 是高速总线。 此日志显示了超速 拇指驱动器的枚举。 与前面所看到的 集线器枚举日志类似, 此日志表明 相应设备为超速, 在总线 2 上枚举 并被分配至地址 3。 但它提供 USB 大容量 存储、SCSI 和 SATA 的 更多信息。 它表示创建了 块设备 /dev/sda。 早先我们了解到 USB 软件枚举接口 有两个部分, USB 内核枚举 和 USB 类枚举。 在这段日志中, 红线上方的消息 来自 USB 内核枚举, 而红线下方的消息 来自大容量存储类枚举。 这段日志显示了一个 高速 USB 网络摄像头的枚举。 红线以上的消息 来自 USB 内核枚举, 它表示设备为高速, 在总线 1 上枚举 并被分配至地址 3。 红线下方的消息 来自 USB 视频类 枚举。 这段日志显示了超速 USB 以太网软件狗的 枚举。 红线以上的消息 来自 USB 内核枚举, 它表示设备为超高速, 在总线 2 上枚举 并被分配至地址 4。 红线下方的 消息来自 USB 网络 枚举。 它表示创建了 eth2 网络接口。 在插入并枚举所有 这些 USB 设备之后, lsusb 会显示这些 枚举的设备的信息。 它会提供总线号、设备 地址、设备 VID:PID 和 设备名称。 此外,lsusb -t 命令 会以树状拓扑显示枚举信息, 它会提供不同的信息, 例如集线器下游 端口号、设备速度 以及支持 USB 设备的驱动程序名称。 对于枚举的 特定 USB 设备, lsusb -v 命令 会显示设备 描述符的详情。 该输出可能会很长, 所以在这个例子中 我只显示了 输出的开始部分。 以上就是本视频的全部内容。 如果您有任何问题, 请在 TI E2E 论坛上发布。 谢谢观看。

这是“使用 Linux 的 Sitara 器件 USB 系统设计”

系列的第五个视频。

在本视频中,我将会解释 如何在主机模式下使用 USB。

我不会展示如何 使用特定的 USB 设备,

而是会介绍如何 检查是否正确枚举了

USB 设备以及如何 获得设备枚举信息。

我将提供 USB 主机模式概述,

然后介绍一些 我们将在本视频中

使用的 USB 术语。

最后,我将给出 几个例子来说明

如何检查 USB 设备枚举

和如何读取枚举信息。

USB 主机模式用于将 USB 接口呈现为 USB 主机端口,

就像 PC 上的端口一样。

它会枚举 连接的 USB 设备,

并使设备做好 准备供应用使用。

枚举对最终 用户是透明的。

它会将枚举的 USB 设备的功能呈现为

与非 USB 设备一样。

例如,拇指驱动器 可以呈现为 /dev/sda,

与 SATA 硬盘一样。

USB 网络摄像头 可以呈现为 /dev/video0,

跟视频卡一样。

USB 以太网 软件狗可呈现为

eth0 网络接口, 跟 PCI 网卡一样。

USB 采用分层星形拓扑结构。

USB 设备通过 集线器连接到 USB 主机。

集线器位于 每个星形的中心。

它有多个下游端口 来连接多个 USB 设备,

以形成星形。

允许的最大层数是

七层,包括根层,

这一层是主机所在的位置。

第 7 层中不允许使用集线器。

USB 设备通过 ID 来进行标识,

它是一个 VID 和 PID 对。

每一个 ID 都是嵌入在 USB 产品中的 16 位数字,

然后在枚举期间 传送到 USB 主机。

VID 由 USB-IF 进行分配和管理,

PID 则由制造商分配。

什么是枚举?

它是一种用于 检测 USB 设备的

连接和断开状态 以便应用使用这些

设备的 USB 活动。

枚举过程分为 电气枚举和软件枚举

这两个阶段。

电气枚举由硬件处理,

不涉及软件。

Linux 中的软件枚举

还可以进一步 分为两个阶段,

即由 USB 内核驱动 程序处理的过程和

由 USB 类驱动 程序处理的过程。

稍后我将在本视频中 对此进行更多的解释。

如何检查 USB 控制器是否已经

处于主机模式和 准备好枚举 USB 设备。

Linux 内核启动日志 将会提供一些信息。

这是 AM335x 内核 启动日志的一个片段。

它表明 MUSB 控制器驱动程序已加载,

然后创建了两条 USB 总线,正如以红色

突出显示的消息所示。

我们也可以使用 lsusb 命令来检查

USB 总线是否就绪。

如果就绪,lsusb 命令 会显示 USB 总线信息。

否则,它会报告 -99 错误消息。

这是 AM56x 内核 启动日志的一个片段。

它表明 xHCI 控制器 驱动程序已加载,

然后,创建了两条 USB 总线,正如以红色

突出显示的消息所示。

请注意这两条 USB 总线的 PID。

一个是 0002。

另一个是 0003。

第一条是 USB 2.0 总线,

第二条是 USB 3.0 总线。

在准备就绪后, USB 主机可以枚举

连接的任何 USB 设备。

这段日志表示 在 USB 总线 3 上

枚举了一个 USB 高速总线集线器。

它被分配到地址 2。

集线器有四个下游端口。

我们还可以随时 使用 lsusb-t 命令

查看树状拓扑中 枚举的 USB 设备。

这里表示在总线 3 上

枚举了一个四端口高速集线器。

它被分配到地址 2。

这是一段枚举日志, 它表示在总线 2 上

枚举了四端口 超速 USB 集线器。

根据 USB 规范的要求,

超速 USB 集线器 还应该支持高速,

因此该日志还表明,

一个集线器被枚举成了 总线 1 上的高速四端口集线器。

很明显,该日志还告诉 我们,总线 2 是超速总线,

而总线 1 是高速总线。

此日志显示了超速 拇指驱动器的枚举。

与前面所看到的 集线器枚举日志类似,

此日志表明 相应设备为超速,

在总线 2 上枚举 并被分配至地址 3。

但它提供 USB 大容量 存储、SCSI 和 SATA 的

更多信息。

它表示创建了 块设备 /dev/sda。

早先我们了解到 USB 软件枚举接口

有两个部分, USB 内核枚举

和 USB 类枚举。

在这段日志中, 红线上方的消息

来自 USB 内核枚举,

而红线下方的消息

来自大容量存储类枚举。

这段日志显示了一个 高速 USB 网络摄像头的枚举。

红线以上的消息 来自 USB 内核枚举,

它表示设备为高速,

在总线 1 上枚举 并被分配至地址 3。

红线下方的消息 来自 USB 视频类

枚举。

这段日志显示了超速 USB 以太网软件狗的

枚举。

红线以上的消息 来自 USB 内核枚举,

它表示设备为超高速,

在总线 2 上枚举 并被分配至地址 4。

红线下方的 消息来自 USB 网络

枚举。

它表示创建了 eth2 网络接口。

在插入并枚举所有 这些 USB 设备之后,

lsusb 会显示这些 枚举的设备的信息。

它会提供总线号、设备 地址、设备 VID:PID 和

设备名称。

此外,lsusb -t 命令 会以树状拓扑显示枚举信息,

它会提供不同的信息,

例如集线器下游 端口号、设备速度

以及支持 USB 设备的驱动程序名称。

对于枚举的 特定 USB 设备,

lsusb -v 命令 会显示设备

描述符的详情。

该输出可能会很长, 所以在这个例子中

我只显示了 输出的开始部分。

以上就是本视频的全部内容。

如果您有任何问题, 请在 TI E2E 论坛上发布。

谢谢观看。

视频报错
手机看
扫码用手机观看
收藏本课程

视频简介

5 在主机模式下使用 USB

所属课程:使用 Linux 的 Sitara™ 设备中的 USB 系统设计 发布时间:2022.04.12 视频集数:7 本节视频时长:00:07:57

本培训概述了 Sitara 嵌入式处理器(AM335x、AM437x 和 AM57x)中的 USB 子系统。它还介绍了仅以数字为重点的 USB 硬件设计。包括参考设计、硬件设计清单和常见的设计错误。

TI培训小程序