《USB 2.0硬件设计 第2版》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:萧世文,宋延清编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302139792
  • 页数:431 页
图书介绍:本书讲述USB设备的开发方法。

第1章 USB简介 1

1.1 USB的发展史 2

1.1.1 规范的版本 3

1.1.2 USB 2.0 4

1.1.3 IEEE-1394 4

1.2 USB的优点 4

1.2.1 容易使用 4

1.2.2 传输速度快 5

1.2.3 低价位 6

1.2.4 低功耗 6

1.2.5 可靠性 6

1.2.6 操作系统的支持 7

1.2.7 外围设备的支持 7

1.2.8 灵活性 7

1.3.1 缺乏对旧硬件的支持 8

1.2.9 USB实施者论坛 8

1.3 USB的缺点 8

1.3.2 缺乏点对点的通信能力 9

1.3.3 速度的限制 9

1.3.4 距离的限制 9

1.3.5 硬件的错误或故障 9

1.3.6 协议的复杂性 9

1.3.7 费用 9

1.4 与其他接口的比较 10

1.5 PC的软硬件要求 11

1.5.1 主机控制器 11

1.5.2 操作系统 11

1.5.3 组件 12

1.5.4 总线拓扑 13

1.6 主机的责任 15

1.5.5 连接端口 15

1.7 外围设备的责任 16

1.8 传输速度 19

1.9 开发流程 20

1.9.1 所需的链路元件 20

1.9.2 开发工具 20

1.9.3 开发步骤 21

第2章 USB传输 23

2.1 传输的基础 23

2.1.1 配置通信 23

2.1.2 应用程序通信 23

2.1.3 管理总线的数据 24

2.1.4 主机速度和总线速度 25

2.2.1 设备的端点 26

2.2 传输要素 26

2.2.2 管道 27

2.2.3 传输类型 27

2.2.4 消息管道与流管道 29

2.2.5 传输的初始化 29

2.3 事务 30

2.3.1 事务的步骤 31

2.3.2 信息包的顺序 33

2.3.3 定时约束和保障 34

2.3.4 分割事务 34

2.4 联络信号 36

2.4.1 ACK 37

2.4.2 NAK 37

2.4.3 STALL 37

2.4.5 ERR 38

2.4.6 无响应 38

2.4.4 NYET 38

2.4.7 控制传输的状态 39

2.5 错误的检验 39

2.5.1 错误校验位 39

2.5.2 数据交替位 40

2.6 控制传输 41

2.6.1 结构 41

2.6.2 信息包的大小 44

2.6.3 传输速度 44

2.6.4 检测错误 45

2.7 批量传输 46

2.7.1 结构 46

2.7.4 检测错误 47

2.8 中断传输 47

2.7.2 信息包大小 47

2.7.3 传输速度 47

2.8.1 结构 48

2.8.2 信息包大小 48

2.8.3 传输速度 48

2.8.4 检测错误 49

2.9 等时传输 49

2.9.1 结构 49

2.10 时间关键的传输 51

2.10.1 总线的带宽 51

2.9.2 信息包大小 51

2.9.4 检测错误 51

2.9.3 传输速度 51

2.10.2 设备的能力 52

2.10.3 主机软件的能力 52

2.10.4 Windows的延迟 52

3.1 检测设备的过程 54

第3章 检测设备 54

3.1.1 检测的步骤 55

3.1.2 检测集线器 58

3.1.3 移除设备 58

3.2 描述符 59

3.2.1 类型 59

3.2.2 设备描述符 60

3.2.3 Device_Qualifier描述符 62

3.2.4 配置描述符 64

3.2.5 Other_Speed_Configuration描述符 65

3.2.6 接口描述符 66

3.2.7 端点描述符 68

3.2.8 字符串描述符 70

3.3 USB 2.0兼容设备的描述符 73

4.1 设置阶段 75

第4章 控制传输 75

4.1.1 令牌信息包 76

4.1.2 数据信息包 77

4.1.3 联络信息包 79

4.2 数据阶段 80

4.2.1 令牌信息包 81

4.2.2 数据信息包 81

4.2.3 联络信息包 81

4.3 状态阶段 81

4.3.1 令牌信息包 82

4.3.2 数据信息包 82

4.3.3 联络信息包 82

4.4 检测错误 83

4.5 请求 83

4.5.1 Clear_Feature 84

4.5.3 Get_Descriptor 85

4.5.2 Get_Configuration 85

4.5.4 Get_Interface 86

4.5.5 Get_Status 87

4.5.6 Set_Address 88

4.5.7 Set_Configuration 88

4.5.8 Set_Descriptor 89

4.5.9 Set_Feature 89

4.5.10 Set_Interface 90

4.5.11 Synch_Frame 91

4.5.12 类别特定的请求 91

4.5.13 厂商特定的请求 92

第5章 USB控制器芯片 93

5.1 USB控制器的组成 93

5.1.1 USB连接端口 93

5.1.4 程序内存 94

5.1.2 数据缓冲区 94

5.1.3 CPU 94

5.1.5 数据存储器 95

5.1.6 寄存器 95

5.1.7 其他接口 95

5.1.8 其他特性 96

5.2 USB控制器芯片结构 96

5.2.1 专为USB设计的芯片 96

5.2.2 与现有的芯片兼容 98

5.2.3 需要外部微处理器接口的芯片 99

5.2.4 芯片的文件 102

5.2.5 固件示例程序 102

5.2.6 驱动程序 103

5.2.7 调试工具 103

5.2.8 开发计划的考虑 104

5.3 Cypress enCoRe 105

5.3.1 CPU结构 105

5.3.2 USB控制器 106

5.4 Cypress EZ-USB 106

5.4.1 CPU结构 107

5.4.2 USB控制器 109

5.5 Microchip PIC 16C7x5 109

5.5.1 结构 109

5.5.2 USB控制器 111

5.6 Netchip NET2888 111

5.6.1 结构 111

5.6.2 USB控制器 112

5.7.1 结构 113

5.7 National Semiconductor USBN9603 113

5.7.2 USB控制器 114

5.8 Philips Semiconductor PDIUSBD11/12 114

5.8.1 结构 115

5.8.2 USB控制器 115

第6章 Cypress enCoRe 116

控制器芯片 116

6.1 选择适合的芯片 116

6.2 汇编语言编译器 116

6.2.1 汇编程序的基础 118

6.2.2 汇编语言码 119

6.2.3 汇编语言编译器的用法 120

6.3 C编译器 122

6.3.1 C语言的优点 122

6.4.1 特性和限制 123

6.4.2 芯片内部 123

6.4 芯片的结构 123

6.3.2 C编译器的用法 123

6.4.3 内存 124

6.4.4 程序堆栈指针 127

6.4.5 数据堆栈指针 127

6.5 USB通信 127

6.5.1 设备地址 129

6.5.2 模式 129

6.5.3 端点状态及控制 131

6.5.4 USB状态及控制 131

6.6 其他I/O 133

6.6.1 一般用途的I/O 133

6.6.2 内部电路 133

6.6.3 中断 135

6.6.4 SPI连接端口 136

6.6.5 PS/2接口 137

6.7 定时器的功能 138

6.7.1 执行定时工作 138

6.7.2 测量时距 139

6.8 中断的处理 140

6.8.1 中断服务例程 140

6.8.2 GPIO中断 141

6.8.3 USB端点中断 142

6.8.4 定时器中断 142

6.8.5 中断状态 143

6.9 CPU的状态、控制及脉冲 144

6.9.1 暂停CPU 144

6.9.2 重置 144

6.9.4 电源的管理 146

6.10 硬件的工作 146

6.9.3 选择和控制脉冲 146

6.11 固件的工作 147

6.11.1 端点0中断 147

6.11.2 传送数据给主机 149

6.11.3 从主机接收数据 151

6.11.4 处理中断传输 153

6.11.5 其他的响应 153

6.12 硬件开发工具 154

6.12.1 平台板 154

6.12.2 监视/调试器 155

第7章 驱动程序 157

7.1 设备驱动程序 157

7.2 设备驱动程序的来源 158

7.2.1 标准设备类型 158

7.4 Win32驱动程序模型 159

7.3 设备驱动程序的执行模式 159

7.2.2 客户化设备 159

7.5 分层的驱动程序 161

7.5.1 USB驱动程序层 161

7.5.2 函数驱动程序 161

7.5.3 总线驱动程序 162

7.6 通信的流程 163

7.6.1 用户的角色 163

7.6.2 应用程序的角色 163

7.6.3 设备驱动程序的角色 165

7.6.4 集线器驱动程序的角色 166

7.6.5 总线类别驱动程序的角色 166

7.6.6 主机控制器驱动程序的角色 167

7.6.7 设备的角色 167

7.6.8 响应 167

7.8 编写客户化的驱动程序 168

7.7.2 厂商提供的驱动程序 168

7.7 驱动程序的类型 168

7.7.1 Windows提供的驱动程序 168

7.6.9 通信的终结 168

7.8.1 工具软件 169

7.8.2 WinRT for USB 169

7.8.3 WinDriver USB 171

7.8.4 提供函数库的工具软件 172

7.9 Windows如何选择驱动程序 173

7.9.1 .inf文件 173

7.9.2 注册表 174

7.9.3 检测特定的设备 175

7.9.4 检测通用的设备 176

7.10 .inf文件简介 176

7.10.1 语法 178

7.10.3 ClassInstall区段 179

7.10.2 Version区段 179

7.10.4 Manufacturer区段 180

7.10.5 DestinationDirs区段 180

7.10.6 Strings区段 182

7.10.7 HID的通用.inf文件 182

7.10.8 建立.inf文件的工具 182

7.10.9 使用.inf文件的技巧 183

第8章 设备类别 185

8.1 类别 185

8.1.1 类别规范 185

8.1.2 类别的定义 186

8.2 标准类型的设备 188

8.2.1 键盘、鼠标和游戏杆 188

8.2.2 大容量存储设备 188

8.2.3 打印机 192

8.2.4 数码相机和扫描仪 193

8.2.5 音频 195

8.2.6 调制解调器 196

8.3 非标准类型的设备 197

8.3.1 以中等速度传输数据的设备 197

8.3.2 更新RS-232设备 197

8.3.3 POS设备 199

8.3.4 取代非标准并行端口设备 199

8.3.5 PC到PC的连接 200

8.3.6 无线连接 200

第9章 设备测试 202

9.1 USB测试工具 202

9.1.1 测试 203

9.1.2 HIDView 207

9.2.1 协议分析器 208

9.2 测试仪器 208

9.2.2 USB Expert的硬件 209

9.2.3 USB Expert的软件 209

9.2.4 CATC Traffic Generator 211

9.2.5 Root 1测试适配器 212

9.3 测试和标记 212

9.3.1 USB实施者论坛的合格计划 213

9.3.2 USB标志 214

9.3.3 Windows硬件品质实验室测试 214

9.3.4 驱动程序签名 214

第10章 电源管理和信号编码 216

10.1 电源的管理 216

10.1.1 电压 216

10.1.2 可以使用总线电源的设备 216

10.1.3 电源要求 217

10.2 集线器电源 218

10.1.4 通知主机 218

10.2.1 电的来源 219

10.2.2 过流保护 221

10.2.3 电源开关 222

10.3 节省电能 222

10.3.1 全局挂起和选择挂起 222

10.3.2 挂起设备的限制 222

10.3.3 恢复通信 223

10.4 低速和中速的总线状态 223

10.4.1 Differential 1和Differential 0状态 224

10.4.5 闲置状态 225

10.4.8 信息包结束 225

10.4.7 信息包开始 225

10.4.6 恢复状态 225

10.4.4 Data J和Data K状态 225

10.4.3 Single-ended 1状态 225

10.4.2 Single-ended 0状态 225

10.4.9 未连接状态 226

10.4.10 连接状态 226

10.4.11 重置状态 226

10.5 高速的总线状态 226

10.5.1 高速Differential 1和Differential 0状态 227

10.5.2 高速Data J和Data K状态 228

10.5.3 Chirp J和Chirp K 228

10.5.4 高速Squelch 228

10.5.5 高速闲置 228

10.5.6 高速信息包开始 228

10.5.7 高速信息包结束 228

10.6 数据编码 229

10.6.1 维持同步 229

10.5.8 高速未连接状态 229

10.6.2 位填充 230

10.6.3 SYNC字段 230

10.6.4 信息包结尾 231

10.6.5 时序正确性 231

10.7 信息包格式 232

10.7.1 SYNC字段 232

10.7.2 PID字段 232

10.7.3 地址字段 233

10.7.4 端点字段 233

10.7.5 帧号码字段 233

10.7.6 数据字段 233

10.7.7 CRC字段 234

10.7.8 信息包间的延迟 234

10.8 测试模式 234

11.1 接收器与信号 237

第11章 电路接口 237

11.2 低速和中速接收器 238

11.3 高速接收器 240

11.3.1 电路 240

11.3.2 转换速度 241

11.3.3 检测高速设备的移除 242

11.3.4 高速的挂起和恢复 242

11.4 信号电压 243

11.4.1 低速和中速 243

11.4.2 高速 243

11.5 电缆 246

11.5.1 连接器 248

11.5.2 可拆分的与捕获性的电缆 249

11.6.2 平衡线 250

11.6.1 噪声 250

11.6 信号的品质 250

11.5.3 电缆长度 250

11.6.3 双绞线 251

11.6.4 边缘速率 251

第12章 集线器 252

12.1 集线器的基础 252

12.1.1 避免设备进入挂起状态 253

12.1.2 可串联的集线器数目 253

12.2 集线器中继器 254

12.2.1 低速和中速的中继器 254

12.2.2 高速的中继器 254

12.3 事务转换器 255

12.4 集线器控制器 256

12.5 速度 257

12.6 集线器类别 257

12.6.1 标准描述符 258

12.6.2 集线器描述符 260

12.6.3 标准请求 261

12.6.4 集线器类别请求 262

12.6.5 连接端口指示器 265

第13章 HID设备 266

13.1 HID简介 266

13.1.1 硬件要求 267

13.1.2 固件要求 268

13.2 HID的描述符 269

13.2.1 描述符的内容 272

13.2.2 HID类别描述符 272

13.2.3 报表描述符 274

13.3 HID特定请求 278

13.3.3 Get_Idle 279

13.3.1 Get_Report 279

13.3.2 Set_Report 279

13.3.4 Set_Idle 280

13.3.5 Get_Protocol 281

13.3.6 Set_Protocol 281

13.4 传输数据 281

13.4.1 发送数据给主机 282

13.4.2 从主机接收数据 283

13.5 报表的结构 285

13.5.1 HID Descriptor Tool 286

13.5.2 短项目 287

13.5.3 长项目 287

13.6 Main项目类型 288

13.6.1 Input、Output和Feature项目 288

13.7 Global项目类型 291

13.6.2 Collection与End Collection标记 291

13.7.1 识别报表 292

13.7.2 数据的使用 293

13.7.3 转换原始数据 294

13.7.4 数据的大小与格式 296

13.7.5 Global项目的储存与恢复 296

13.8 Local项目类型 296

13.9 填充 298

13.10 实体描述符 298

第14章 HID程序设计 300

14.1 主机的通信 300

14.1.1 说明文件 301

14.1.2 HID函数 301

14.1.3 DirectX 302

14.2.1 使用Visual C++ 303

14.2 调用API函数 303

14.2.2 使用Visual Basic 304

14.3 取得HID类别的GUID 305

14.3.1 使用Visual C++ 306

14.3.2 使用Visual Basic 306

14.4 取得HID信息的结构数组 307

14.4.1 使用Visual C++ 307

14.4.2 使用Visual Basic 307

14.4.3 详解 307

14.5 识别HID接口 308

14.5.1 使用Visual C++ 308

14.5.2 使用Visual Basic 308

14.5.3 详解 309

14.6 取得设备的路径 309

14.6.1 使用Visual C++ 310

14.6.2 使用Visual Basic 311

14.7 取得设备的代号 312

14.7.1 使用Visual C++ 312

14.7.2 使用Visual Basic 313

14.8 取得厂商与产品ID 314

14.8.1 使用Visual C++ 314

14.8.2 使用Visual Basic 314

14.8.3 详解 315

14.9 取得包含设备能力的缓冲区指针 315

14.9.1 使用Visual C++ 315

14.9.2 使用Visual Basic 315

14.9.3 详解 316

14.10 取得设备的能力 316

14.10.1 使用Visual C++ 316

14.11 取得数值的能力 317

14.10.2 使用Visual Basic 317

14.10.3 详解 317

14.12 发送输出报表给设备 318

14.12.1 使用Visual C++ 318

14.12.2 使用Visual Basic 318

14.12.3 详解 319

14.13 从设备读取输入报表 319

14.13.1 使用Visual C++ 320

14.13.2 使用Visual Basic 320

14.13.3 详解 321

14.14 使用重叠ReadFile读取报表 321

14.14.1 使用Visual C++ 322

14.14.2 使用Visual Basic 323

14.15 使用多线程的ReadFile读取报表 324

14.15.1 使用Visual C++ 324

14.16.1 使用Visual C++ 326

14.16.2 使用Visual Basic 326

14.15.2 使用Visual Basic 326

14.16 发送特征报表给设备 326

14.17 从设备读取特征报表 327

14.17.1 使用Visual C++ 327

14.17.2 使用Visual Basic 327

14.18 关闭通信 327

14.18.1 使用Visual C++ 328

14.18.2 使用Visual Basic 328

第15章 HID设备开发实例 330

15.1 HID设备开发综述 330

15.2 HID温度计开发示例 333

15.3 用C语言来设计固件 400

附录 USB参考资料 430