ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

第5讲:USB 类(Class)是什么,为什么要关心

第5讲:USB 类(Class)是什么,为什么要关心

USB 教程合集 - 总目录

本讲目标

理解标准设备类与厂商自定义类的区别,认识 HID、CDC、MSC、Audio 和 Video 等常见类别。

一、如果每家厂商都自己定义协议,会发生什么?

假设有十家厂商生产 USB 键盘,每家都使用完全不同的数据格式。

那么操作系统就可能需要针对每一家厂商开发一套驱动,用户使用和维护起来都会非常麻烦。

USB 类规范就是为了解决这类问题而设计的。

它通过统一设备的行为、请求和数据格式,让操作系统可以使用通用驱动支持符合规范的设备。

因此,USB Class 不只是一个编号,而是一套通信约定。

二、常见的 USB 设备类

2.1 HID:人机接口设备

HID(Human Interface Device)常见于键盘、鼠标和许多游戏手柄。

HID 的一个重要特点是使用报告描述符(Report Descriptor)描述数据格式。操作系统根据这些信息理解设备上报的数据。

2.2 CDC:通信设备类

CDC(Communication Device Class)包含多种通信设备子类。

其中,CDC ACM 常用于实现 USB 虚拟串口。电脑上可能出现 COM 端口,应用程序可以通过串口 API 收发数据。

不过,虚拟串口并不意味着 USB 线上真的存在 UART 的 TX/RX 信号。

2.3 MSC:大容量存储类

MSC(Mass Storage Class)用于 U 盘等存储设备。

这类设备通常使用批量端点,并配合相应的存储命令协议,让操作系统能够读取和写入存储介质。

2.4 Audio:音频类

USB Audio 用于声卡、麦克风、扬声器等设备,涉及音频数据格式、采样率和相关控制机制。

2.5 Video:视频类

USB Video Class,通常简称 UVC,是 USB 摄像头常见的标准类别之一。

它定义了设备如何描述视频功能、协商格式以及传输视频数据。

三、标准类与厂商自定义类有什么区别?

标准类的优势是兼容性。

只要设备遵守相应类规范,并且目标操作系统具有合适的驱动支持,通常就可以利用系统提供的通用驱动。

厂商自定义类则不同。

当接口类代码声明为FFh时,通常表示厂商自定义接口。此时,厂商可以定义自己的命令和数据格式,但 Host 端也需要有能够理解这些协议的软件或驱动。

这里必须强调:

仅仅把接口类代码设置为FFh,并不会自动产生一套可用的通信协议。

你仍然需要定义数据格式、命令、响应、错误处理和 Host 端的访问方式。

四、一个设备可以同时使用不同的类吗?

可以。

例如,一个 USB 设备可能包含:

USB Device | └── Configuration | ├── HID Interface | └── CDC Interface

HID 接口负责按键和状态上报,CDC 接口负责调试信息或命令通信。

这类设备涉及多个接口的组织方式,我们将在第8讲中详细介绍。

五、单片机开发中应该怎么选?

如果目标是实现键盘或鼠标,通常优先考虑 HID。

如果目标是让电脑通过串口助手收发数据,CDC ACM 往往比较方便。

如果目标是实现 U 盘功能,需要考虑 MSC 以及相应的存储协议。

如果标准类无法满足需求,才进一步评估厂商自定义接口是否合适。

选择之前,最好确认目标操作系统、驱动绑定方式、开发 SDK 和后续维护成本。

六、本讲小结

USB Class 是 Host 与 Device 之间的一套标准化约定。

标准类通常能够减少驱动开发工作量;厂商自定义类则提供更大的灵活性,但也需要自行维护两端的通信协议。

留给下一讲的问题

能不能亲手实现一个 USB 虚拟串口,让开发板插入电脑后出现 COM 端口,并通过串口助手完成数据收发?

下一讲,我们开始第一个实战项目:CDC 虚拟串口。


返回列表