USB 已成为设备与 PC 通信的标准方法。从闪存驱动器和鼠标等通用设备到特定应用的专用设备,这种流行的标准几乎完全取代了其他串行通信协议。
在USB标准下,USB设备之间不能直接通信。它们只能与控制一个或多个设备通信的总线的 USB 主机通信。常见的 USB 主机是 PC。本应用笔记讨论了 USB 嵌入式主机,它可以使嵌入式应用程序在各种 USB 设备中使用。它介绍了 Microship 带有 USB On-The-Go (OTG) 模块的微控制器。
USB概述
有许多关于 USB 的参考资料,包括 USB 2.0 规范本身,提供了有关 USB 操作的详细信息。本节仅旨在提供本应用笔记中引用的术语或理解堆栈操作所需的术语的简要定义。
USB 主机和外围设备
典型的 USB 系统由一台主机和一个或多个外围设备(通常简称为“设备”)组成。每个设备只能与主机通信;设备之间可能无法直接通信。主机发起总线上的所有通信。仅当主机请求时,设备才可以向主机发送数据,并且它必须能够接收主机发送的数据。设备通常使用 B 型插座或具有固定电缆。
大多数 USB 外围设备都分为几类,称为类。每个类别对其通信格式都有特殊要求。主机必须能够识别设备的类别并满足该类别的要求,否则主机无法与设备通信。两个示例类是 HID(人机接口设备)(例如在鼠标上)和大容量存储(例如在闪存驱动器上)。客户端驱动程序为类提供应用程序级支持。某些 USB 外围设备是特定于供应商的,不属于预定义的类别之一。客户端驱动程序必须专门为这些设备编写。
可以通过使用集线器来扩展可以连接到主机的设备数量。USB是一个分层的星形网络。通常,集线器允许四个或七个设备连接到单个端口。多可以将五个集线器链接在一起,多可创建五层。总线上多可连接 127 个设备(包括集线器)。
完整的 USB 主机使用 A 型插座,并且必须能够与任何设备通信。这种支持可以通过在连接设备之前必须安装在主机上的特殊驱动程序来提供。必须支持集线器,并且每个端口必须能够提供至少 100 mA 的电流。
主机与嵌入式主机
USB 嵌入式主机与 USB 主机在几个小但重要的方面有所不同。USB嵌入式主机:
仅支持特定的外围设备和/或设备类别。
仅支持受支持设备所需的传输类型。
集线器支持是可选的。
放宽了电源要求。
这些限制允许嵌入式主机在具有固定、有限内存的设备上实现。
主机模式操作
在USB系统中,主机控制总线上的所有流量。设备只能响应来自主机的请求;它可能不会启动数据传输。USB OTG 模块可用于主机或设备模式。两种模式的具体操作方法有所不同。
USB 传输可以包含多个事务,而事务可以包含多个数据包。此外,单次传输可以包含多个数据阶段事务。图 1 显示了单个 USB 传输的通用格式。
图 2 通用传输结构
控制权转移通常需要所有三个事务。读取 8 个数据字节的控制传输的结构如图 2 所示。
图 2 控制传输结构
批量、中断和同步传输不使用 SETUP 令牌或状态事务。对于批量传输,在单个数据阶段事务中多可以传输 64 个字节。写入 128 个数据字节的批量传输需要两个数据级事务,其结构如图 3 所示。
图 3 批量传输结构
USB 嵌入式主机堆栈在数据包级别的主机模式下与 USB OTG 模块连接,但 ACK 数据包由模块自动处理。当嵌入式主机发出图 3 所示的批量传输时,它必须明确发出命令来传输两个 OUT 和两个 DATA0/1 数据包。当嵌入式主机发出图 2 所示的控制传输时,它必须明确发出命令来传输所有 SETUP、DATA0/1、IN 和 OUT 数据包,总共 6 个数据包。