USB 入门教程大纲(v1)
第一阶段:建立直觉
第1讲:插上USB,电脑怎么知道你插了什么
- USB长什么样(接口类型、引脚定义,不展开电气细节)
- 插进去之后发生了什么(枚举的"故事版"叙述)
- 为什么电脑不需要装驱动就能认出U盘(标准类 vs 自定义类)
- 本讲目标:建立"USB是Host主导的问答式通信"这个核心直觉
第2讲:USB不是串口——通信机制的本质区别
- 主从架构:Host说了算,Device只能被问了才回答
- 差分信号(D+/D-)是什么、为什么要差分
- NRZI编码与位填充(不深入数学,讲"为什么需要")
- 令牌包/数据包/握手包:USB通信的"三句话"
- 对比UART:为什么USB不能像串口那样"想发就发"
第二阶段:协议骨架
第3讲:描述符——USB设备的身份证体系
- 为什么需要这么多层(设备→配置→接口→端点)
- 每一层描述符"管什么事"
- VID/PID是什么、谁分配的、有什么用
- 用实际抓包截图看一个真实设备的描述符
- 本讲目标:拿到一段描述符数据,能逐字节解释含义
第4讲:端点、管道与四种传输类型
- 端点就是"邮箱":有编号、有方向、有容量
- 四种传输类型各自解决什么问题
- 控制传输 → 枚举和管理
- 中断传输 → 键盘鼠标(确定性延迟)
- 批量传输 → U盘(可靠、尽力而为)
- 等时传输 → 摄像头/音频(实时、允许丢数据)
- 怎么选:给应用场景选对传输类型
第三阶段:类与标准
第5讲:USB类(Class)是什么,为什么要关心
- 标准类 vs 厂商自定义类
- 常见标准类简介:HID / CDC / MSC / Audio / Video
- 用标准类的好处:操作系统自带驱动
- 什么时候必须自定义类
- 本讲是"地图",告诉学生后面可以往哪走
第四阶段:动手实战
第6讲:CDC虚拟串口——第一个完整实验
- CDC类是什么、和真正串口的区别
- 配置流程(通用步骤,不绑定具体芯片)
- 发送和接收数据的代码逻辑
- 验证:用串口助手收发数据
- 常见问题排查思路
第7讲:HID设备——做一个键盘或鼠标
- HID为什么"即插即用"(操作系统内置驱动)
- Report Descriptor(报告描述符)怎么写
- 键盘的Report格式(哪个字节对应哪个键)
- 鼠标相对移动 vs 绝对定位
- 实验:按键触发电脑输入字符
第8讲:复合设备——一个设备身兼数职
- 一个设备可以有多个接口
- 复合设备 vs 组合设备(Composite vs Combined)
- 实例:键盘 + 鼠标 + CDC 三合一
- 描述符层级怎么组织
第五阶段:调试与进阶
第9讲:USB抓包与调试
- 抓包工具介绍与基本用法
- 看一次完整的枚举过程(从抓包视角)
- 常见失败场景:描述符错误、端点配置错误、STALL/NAK
- 怎么从抓包数据定位问题
第10讲:自定义USB设备——从零打通Host到Device
- Vendor Specific类的描述符怎么写
- Device端发送/接收数据的完整流程
- Host端用什么工具/库来通信(libusb / PyUSB)
- 一个简单的Host端程序示例
- 本讲是"毕业项目",证明你真正理解了USB
附录(后续填充)
- 开发板选型与硬件连接指南
- 开发环境搭建(CubeMX + IDE)
- 术语表
- 常见问题 FAQ
设计决策记录
| 决策 | 原因 |
|---|---|
| 不单独讲USB历史 | 初学者不关心1996年出了什么 |
| 不展开电气层 | 阻抗匹配留给硬件工程师 |
| 不深入协议栈源码 | 那是进阶课的事 |
| 不堆术语定义 | 用"邮箱"讲端点,用"三句话"讲包结构 |
| 先实战后理论(制作顺序) | 先看到能做到什么,才有动力理解为什么 |
| 发布顺序保持1→10 | 符合认知递进 |
版本记录
| 版本 | 日期 | 变更 |
|---|---|---|
| v1 | 2026-10-21 | 初始大纲,10讲结构确定 |