MATLAB编程-简介
USB 端口是一种串行端口。毕竟,它的全称是通用串行总线(Universal SERIAL Bus)。我之所以写了两遍,是因为我读过的所有关于 USB 的书籍似乎都对此概念含糊不清。虽然 USB 端口的使用方式存在一些细微和主要的差异,但其基本原理是大致相同的。这是我一段时间前做的,现在需要重新阅读一些资料。(我还计划要么创建一个关于 USB 的 Wiki 书籍,要么加入一个已经开始的项目——我需要对此进行更深入的研究)。
什么是 USB?
USB 是 “Universal Serial Bus”(通用串行总线)的缩写,是一种在 1990 年代中期开发的工业标准。它定义了用于连接、通信和供电的电缆、连接器及通信协议,主要在计算机与各种电子设备之间进行数据交换和供电。USB 的目标是标准化电脑外设(如键盘、鼠标、数码相机、打印机、移动播放器、硬盘、网络适配器等)与个人计算机之间的连接方式。如今,USB 也被广泛应用于智能手机、PDA、游戏机等设备上。它几乎取代了早期各种接口如串口和并口。
USB 闪存盘与读卡器
USB 闪存盘是一种插入 USB 接口即可供电的便携式存储设备,能保存需要快速访问的信息或数据。它体积小、使用方便,非常适合学生和商务人士使用。USB 闪存的容量范围从 1GB 到 64GB 甚至更高,足以存储相当于小型计算机的数据。
USB 的结构与工作机制
USB 通过一系列集线器(hubs)将多个设备连接到主控制器(host controller)。在 USB 术语中,设备被称为功能(functions),因为一个物理设备可能提供多个功能,比如带麦克风的摄像头。而集线器是一种特殊设备,不被归类为功能。所有 USB 总线都存在一个根集线器(root hub),它直接连接在主控制器上。
每个功能/集线器都包含若干管道(pipes),即逻辑通道,类似于 Unix 中的字节流。管道连接主控制器与设备上的一个端点(endpoint)。一个端点可以理解为一个特定的通信点,通常用来读或写数据。
-
每个方向最多有 16 个端点(编号 0~15),共计最多 32 个单向管道。
-
每个端点是单向通信的:要么数据进入设备,要么从设备发送出去。
-
端点 0 是用于 USB 总线管理的,必须支持双向通信,因此默认占用两个端点编号。
数据传输类型
USB 中的数据通过不同类型的管道进行传输,每类管道适用于不同场景:
-
控制传输(control transfers):用于传输短命令及其响应,如设备初始化,通常使用管道 0。
-
等时传输(isochronous transfers):用于需要保证速率但允许部分数据丢失的实时数据,如音频或视频。
-
中断传输(interrupt transfers):用于需要快速响应的设备,如键盘和鼠标。
-
批量传输(bulk transfers):用于大量但不需要实时性的传输,如文件传输,利用剩余带宽。
设备连接到总线时,由主控制器为其分配一个唯一的 7 位地址。所有通信都由主控制器主动轮询进行(轮询方式类似轮流询问每个设备)。
设备配置与描述符层级
访问设备端点前,主机需要获取其描述符配置(Descriptors),结构如下:
-
设备描述符(Device Descriptor):一个设备仅有一个,包含厂商、产品等基本信息。
-
配置描述符(Configuration Descriptor):一个或多个,代表设备的不同工作模式(如低功耗与活动状态)。
-
接口描述符(Interface Descriptor):一个配置下可包含多个接口(如摄像头的音频与视频接口)。
-
端点描述符(Endpoint Descriptor):接口中用于数据传输的具体端点定义。
一个端点可能会被多个接口共享。
主控制器(Host Controllers)
Host Controller Device(HCD) 是面向程序员的接口,由主控制器硬件实现。实质上,它是计算机中的一组硬件寄存器。
USB 1.0/1.1 时期存在两个主控制器接口标准:
-
OHCI(Open Host Controller Interface):由 Compaq 提出,被 USB-IF 采纳为标准。
-
UHCI(Universal Host Controller Interface):由 Intel 提出,需支付授权费用,VIA 公司使用该标准。
两种实现方式导致开发者需要兼容双版本,增加了操作系统和硬件厂商的成本。
USB 2.0 推出后,USB-IF 强制使用统一的 HCD 实现:EHCI(Enhanced Host Controller Interface)。
-
只有 EHCI 支持高速传输(Hi-Speed)。
-
EHCI 控制器包含 4 个虚拟 HCD,以兼容低速和全速设备。Intel 和 VIA 使用虚拟 UHCI,其他厂商使用虚拟 OHCI。
USB 设备类别代码(Class Codes)
每个 USB 设备的描述符都带有一个设备类签名,由类代码(Class Code)、子类代码(SubClass Code)、**协议字段(Protocol)**组成,用于指示系统应加载哪种驱动。
-
同一个设备也可能有多个接口,每个接口有自己的类签名,允许多个驱动同时操作该设备(如音视频设备)。
-
操作系统可通过这些类代码加载通用驱动,避免每个设备都需要定制驱动。
类代码分配方式:
-
若类适用于整个设备,则写入
bDeviceClass
-
若类适用于某个接口,则写入
bInterfaceClass
-
若多个接口组成一个功能,可通过 接口关联描述符(IAD) 使用
bFunctionClass
统一分配
类代码是一个字节,最多可定义 254 种设备类(0x00 和 0xFF 为保留值)
常见 USB 类别代码汇总:
类别代码 | 类别说明 |
---|---|
0x00 |
未指定类别,需通过接口类识别 |
0x01 |
音频类,例如声卡设备 |
0x02 |
通信设备类,例如调制解调器、网卡 |
0x03 |
人机接口类(HID),如键盘、鼠标 |
0x05 |
物理设备类(较少见) |
0x06 |
静态图像类,符合图片传输协议 |
0x07 |
打印机类 |
0x08 |
大容量存储类,如U盘、硬盘、读卡器、相机 |
0x09 |
USB 集线器(Hub) |
0x0A |
通信数据类(CDC-Data) |
0x0B |
智能卡读卡器 |
0x0D |
内容安全类(如DRM设备) |
0x0E |
视频类,如网络摄像头 |
0xDC |
诊断类(用于 USB 2.0 合规测试) |
0xE0 |
无线控制器类,如蓝牙适配器(仅蓝牙支持设为设备类) |
0xEF |
杂项类(不常用) |
0xFE |
应用专用类(如固件更新器) |
0xFF |
厂商自定义类(需要专用驱动) |
以上就是 USB 接口结构、通信机制、设备分类与驱动加载的全面介绍。是否还需要我进一步讲解如何在 MATLAB 或系统层面与 USB 设备通信?
USB 信号传输(USB Signaling)
引脚分配(以插座为视角)
引脚 | 功能 |
---|---|
1 | VBUS(4.01–5.25 V) |
2 | D− |
3 | D+ |
4 | GND(地) |
外壳 | 屏蔽层(Shield) |
助记符:Victor Dashes Across Ground-Zero(Vbus, D−, D+, GND, Shield)
USB 信号通过一对扭绞的数据线 D+ 和 D− 进行传输,采用半双工差分信号,以抵抗电磁干扰。
D+ 和 D− 必须配对使用,它们不是两个单独通道。
信号电平:
-
低电平:0.0–0.3 V
-
高电平:2.8–3.6 V
USB 传输模式
USB 支持四种传输模式:
-
控制传输(Control):用于发送简单命令和状态信息,通常由端点 0 使用。
-
中断传输(Interrupt):用于需要低延迟的设备(如键盘、鼠标)。
-
批量传输(Bulk):用于大批量、无实时要求的数据(如文件传输)。
-
等时传输(Isochronous):用于音视频等实时传输,带宽可保证但可能丢包。
USB 数据速率
USB 定义了三种数据速率:
速率 | 最大带宽 | 典型用途 |
---|---|---|
低速(Low) | 1.5 Mbit/s (~187.5 KB/s) | 人机接口(HID):键盘、鼠标等 |
全速(Full) | 12 Mbit/s (~1.5 MB/s) | 默认速率,用于多数 USB 1.x 设备 |
高速(High) | 480 Mbit/s (~60 MB/s) | USB 2.0 高速设备 |
-
高速设备常被称作“USB 2.0”,但并非所有 USB 2.0 设备都支持高速。
-
实际应用中,大多数高速设备传输速率为 3–20 MB/s,远低于理论上限。
-
Transaction Translator(事务转换器):用于高速 HUB 中分离高速与低速流量,防止低速设备拖慢整条链路。
数据编码
USB 使用 NRZI 编码(Non-Return to Zero Inverted):
-
逻辑 1:电平不变;
-
逻辑 0:电平翻转。
-
位填充(Bit stuffing):连续 6 个 1 后自动插入一个 0。
Mini-USB 接口信号定义
引脚 | 功能 |
---|---|
1 | VBUS(4.4–5.25 V) |
2 | D− |
3 | D+ |
4 | ID(用于 OTG 识别) |
5 | 地(Ground) |
-
Mini-A 的引脚 4(ID)接地 → 表示为主机;
-
Mini-B 的引脚 4 不接地 → 表示为从设备。
USB 接口类型
标准接口:
-
Standard-A Plug/Receptacle:主机端接口(如电脑)
-
Standard-B Plug/Receptacle:设备端接口(如打印机)
新增接口:
-
Mini-B Plug:较小型设备(手机、相机)
-
Micro-A / Micro-B / Micro-AB Plug:用于 OTG 和移动设备
-
Micro-A(白色塑料)
-
Micro-B(黑色)
-
Micro-AB(灰色)
-
转接器:
-
允许的转接器:Standard-A 母 → Micro-A 公(最长 150 mm)
非标准的双 A 或双 B 插头不被 USB 规范支持。
USB 电缆类型
固定电缆(Captive)
-
一端为 Standard-A / Micro-A 插头,另一端为设备专用接口或不可拆卸。
可拆电缆(Detachable)
-
Standard-A → Standard-B
-
Standard-A → Mini-B
-
Standard-A → Micro-B
-
Micro-A → Micro-B
-
Micro-A → Standard-A 母口(OTG)
低速设备只能使用固定电缆,高速/全速设备支持可拆电缆。
USB 连接器设计优势
-
坚固耐用:金属外壳+塑料保护舌,防止损坏;
-
防呆插入:不可反插,插入方向明显;
-
成本低廉:便于批量制造;
-
防 EMI 干扰:先接地、后接电源、最后接数据信号;
-
热插拔安全:有分阶段接触顺序,避免静电和损伤;
-
大小限制:避免大尺寸设备挡住邻接接口。
USB On-The-Go(OTG)
允许单一端口根据插头判断角色(主机或设备),支持动态切换。
典型用途:PDA 既可接电脑也可连接键盘等外设。
无线 USB(Wireless USB)
在保留 USB 协议兼容性的基础上进行无线扩展。
USB 电缆最大长度
-
最长为 5 米,超过需使用 USB HUB;
-
使用 CAT5 可扩展至 50 米;
-
光纤 USB 延长器可达 10 公里(特制设备)。
USB 供电规范
-
默认电压:5V
-
电压范围:4.35–5.25V
-
默认电流限制:100mA,可申请提升至 500mA
-
若总电流超标,主机将断电保护
-
挂起状态(Suspend):
-
默认限制:500μA
-
如果已申请唤醒权限并超出100mA配置,可达 2.5mA
-
多端口与电流限制
-
总线供电 HUB 最多只能为设备提供 4×100mA = 400mA;
-
需要超过 500mA 电流或超过 4 端口的 HUB,必须外接电源;
-
操作系统可监控电力负载并提示用户。
进一步阅读推荐
-
USB in a Nutshell:简明实用的 USB 教程
-
USBlyzer:USB 协议分析工具
-
《USB Complete》by Jan Axelson(USB 经典图书)