第1章 USB基础及协议概述 1
1.1 简介 2
1.1.1 背景 2
1.1.2 USB的特点 2
1.2 系统架构 4
1.2.1 USB总线架构 4
1.2.2 USB主机和设备 5
1.2.3 USB分层结构 6
1.2.4 USB物理连接 7
1.2.5 USB2.0电气特性 9
1.2.6 USB2.0设备速度的识别 10
1.2.7 USB2.0电源 11
1.3 USB2.0事务处理及数据传输 12
1.3.1 包 13
1.3.2 事务 15
1.4 USB2.0数据传输类型 15
1.4.1 控制传输 16
1.4.2 批量传输 19
1.4.3 中断传输 21
1.4.4 同步传输 22
1.5 USB2.0设备 24
1.5.1 USB设备状态 24
1.5.2 USB总线枚举 27
1.5.3 描述符 27
1.5.4 设备请求 35
1.5.5 枚举过程 38
1.6 USB2.0主机 40
1.6.1 USB主机结构 40
1.6.2 USB主控制器功能 42
1.6.3 客户软件 45
1.6.4 系统软件 46
1.6.5 主控制器驱动程序 48
1.6.6 总线驱动程序 49
1.6.7 嵌入式USB主机控制器 51
1.7 USB调试辅助工具 51
1.7.1 Bus Hound 52
1.7.2 Ellisys的USB Explorer系列 52
1.7.3 LeCroy的Mercury系列 54
第2章 USB硬件设计 55
2.1 USB接口简介 56
2.2 USB电气特性 58
2.2.1 低速USB驱动器电气特性 59
2.2.2 全速USB驱动器电气特性 60
2.2.3 高速USB驱动器电气特性 63
2.2.4 低速和全速接收器特性 63
2.2.5 器件速度识别 64
2.2.6 信号电平 65
2.2.7 数据编码/解码 66
2.2.8 电源分布 68
2.2.9 电压跌落要求 71
2.2.10 信号质量的评定 72
2.3 USB电路设计 72
2.3.1 设备 73
2.3.2 主机 74
2.3.3 OTG应用 74
2.3.4 USB信号的防护 75
2.3.5 信号完整性电路设计 76
2.4 硬件电路常见的问题 77
第3章 基于SDK的USB协议栈 79
3.1 简介 80
3.2 Device协议栈 81
3.2.1 协议栈架构 81
3.2.2 协议栈初始化流程 82
3.2.3 协议栈工作流程 86
3.2.4 协议栈接口 90
3.2.5 控制器驱动接口 94
3.2.6 HID类接口 96
3.2.7 MSC类接口 97
3.2.8 CDC类接口 98
3.2.9 Audio类接口 99
3.2.10 Video类接口 100
3.3 Host协议栈 101
3.3.1 协议栈架构 101
3.3.2 协议栈初始化流程 102
3.3.3 协议栈工作流程 103
3.3.4 Host驱动接口 107
3.3.5 控制器驱动接口 112
3.3.6 HID类接口 114
3.3.7 MSC类接口 115
3.3.8 CDC类接口 116
3.3.9 Audio类接口 117
第4章 USB HID类应用开发 118
4.1 简介 119
4.1.1 什么是HID 119
4.1.2 HID类 119
4.1.3 子类及编码 120
4.1.4 协议编码 120
4.1.5 接口 121
4.2 描述符及请求 122
4.2.1 基础知识 122
4.2.2 描述符 126
4.2.3 请求 132
4.3 代码实例 138
4.3.1 工程关键文件及代码介绍 138
4.3.2 运行工程查看结果 143
4.3.3 枚举过程详细解析 143
4.3.4 报告过程详细解析 149
4.4 HID类的其他应用 150
第5章 USB MSC类应用开发 151
5.1 简介 152
5.1.1 MSC设备的一般工作流程 153
5.1.2 USB MSC协议简介 154
5.2 请求及描述符 155
5.2.1 MSC设备接口描述符 155
5.2.2 MSC设备端点描述符 156
5.2.3 MSC类标准请求 156
5.2.4 Buck-Only Transport协议的数据流模型 159
5.2.5 批量数据的传输具体细节 162
5.3 代码实例 172
5.3.1 MSC设备入门例程 172
5.3.2 SD卡读卡器例程 175
第6章 USB CDC类应用开发 177
6.1 简介 178
6.1.1 USB CDC类 179
6.1.2 CDC类设备的组成 179
6.2 请求及描述符 180
6.2.1 CDC设备配置描述符 180
6.2.2 通信接口描述符 181
6.2.3 数据接口描述符 185
6.2.4 CDC类请求 186
6.3 代码实例 188
第7章 USB Audio类应用开发 191
7.1 简介 192
7.1.1 音频接口集与音频接口关联 193
7.1.2 音频接口类、子类及协议 194
7.1.3 音频功能类别 195
7.1.4 音频同步类型 195
7.1.5 声道间同步 196
7.1.6 音频功能拓扑 197
7.1.7 编码与解码 205
7.1.8 复制保护 205
7.1.9 操作模型 205
7.2 描述符、请求与中断 207
7.2.1 描述符 207
7.2.2 请求 220
7.2.3 中断 229
7.3 代码实例 231
7.3.1 SDK USB音频类应用 231
7.3.2 SDK USB音频类的实现 232
第8章 USB组合类应用开发 234
8.1 简介 235
8.2 请求及描述符 236
8.2.1 设备描述符的修改 237
8.2.2 使用IAD时的用户编程模型 237
8.2.3 接口联合描述符 238
8.2.4 其他 239
8.3 代码实例 240
8.3.1 SDK中composite类例程 240
8.3.2 U盘+虚拟串口例程 240
第9章 USB Hub应用开发 243
9.1 简介 244
9.2 请求与描述符 245
9.2.1 标准描述符 245
9.2.2 Hub描述符 245
9.2.3 Hub请求 246
9.3 SDK的实现 248
9.3.1 主机识别Hub 248
9.3.2 主机识别Hub上设备连接 250
9.3.3 主机识别Hub上设备断开 251
9.3.4 Hub转发传输 252
第10章 USB兼容性测试 260
10.1 简介 261
10.2 测试要求 261
10.2.1 测试设备 262
10.2.2 测试软件 264
10.3 电气测试流程 265
10.3.1 低/全速USB测试 265
10.3.2 高速USB测试 271
10.3.3 主机高速信号测试 277
10.4 常见问题和解决办法 282
10.4.1 主设备信号质量测试 282
10.4.2 USB信号布线 283
10.4.3 ESD器件的影响 284
10.4.4 USB收发器电气特性 284
10.4.5 设备(全速)反向电压测试 285
10.4.6 设备(全速)浪涌电流测试 285
10.4.7 主机电压跌落测试 286
参考文献 288