第1篇USB开发基础篇 3
第1章USB概述 3
1.1 USB的产生 3
1.2 USB总线特点 4
1.3 USB的总线结构 6
1.3.1 USB主机和设备 6
1.3.2 USB的连接 7
1.3.3 USB系统的分层结构 8
1.4 USB的开发流程 9
1.5小结 10
第2章USB电源管理 11
2.1 USB的供电 11
2.1.1 USB接口的电源指标 11
2.1.2电源分配 12
2.2 USB电源管理 13
2.2.1供电保持 13
2.2.2 USB设备的挂起 13
2.2.3 USB集线器的挂起 14
2.3小结 14
第3章USB的设备配置 15
3.1 USB标准设备的描述符 15
3.1.1设备描述符 16
3.1.2配置描述符 18
3.1.3字符串描述符 20
3.1.4接口描述符 21
3.1.5端点描述符 22
3.1.6设备限定描述符 24
3.1.7其他速率配置描述符 26
3.2 USB集线器的描述符 28
3.2.1集线器设备描述符 28
3.2.2集线器配置描述符 30
3.2.3集线器接口描述符 32
3.2.4集线器端点描述符 33
3.2.5集线器类描述符 34
3.3 HID设备的描述符 36
3.3.1 HID设备简介 36
3.3.2 HID基本描述符 38
3.3.3 HID类描述符 40
3.4小结 42
第4章USB的数据传输 44
4.1 USB数据传输简介 44
4.1.1 USB数据传输流程 44
4.1.2 USB事务处理 45
4.1.3 USB数据传输类型 46
4.2 USB控制传输 46
4.2.1数据包长度 47
4.2.2事务处理 47
4.3 USB块传输 49
4.3.1数据包长度 49
4.3.2事务处理 49
4.4 USB中断传输 50
4.4.1数据包长度 50
4.4.2事务处理 51
4.5 USB同步传输 51
4.5.1数据包长度 51
4.5.2事务处理 52
4.6小结 52
第5章USB设备请求 53
5.1标准USB设备请求 53
5.1.1读取状态请求GetStatus 54
5.1.2清除特性请求ClearFeature 56
5.1.3设置特性请求SetFeature 56
5.1.4设置地址请求SetAddress 57
5.1.5读取描述符请求GetDescription 57
5.1.6设置描述符请求SetDescriptor 57
5.1.7读取配置请求GetConfiiguration 58
5.1.8设置配置请求SetConfiiguration 58
5.1.9读取接口请求GetInterface 59
5.1.10设置接口请求SetInterface 59
5.1.11同步帧请求SynchFrame 59
5.2 USB集线器类请求 60
5.2.1读取集线器状态请求GetHubStatus 60
5.2.2读取下行端口状态请求GetPortStatus 61
5.2.3禁止集线器的特性请求ClearHubFeature 61
5.2.4禁止下行端口特性请求ClearPortFeature 62
5.2.5使能集线器特性请求SetHubFeature 63
5.2.6使能下行端口特性请求SetPortFeature 63
5.2.7读取集线器描述符请求GetHubDescriptor 64
5.2.8设置集线器描述符请求SetHubDescriptor 64
5.2.9清除TT块请求ClearTTBuffer 65
5.2.10复位TT块请求ResetTT 65
5.2.11读取TT内部状态请求GetTTState 66
5.2.12停止TT正常工作请求StopTT 66
5.3 HID设备类请求 67
5.3.1获取报告请求GetReport 67
5.3.2获取空闲速率请求GetIdle 68
5.3.3获取HID协议请求GetProtocol 69
5.3.4设置报告请求SetReport 69
5.3.5设置空闲速率请求SetIdle 70
5.3.6设置HID协议请求SetProtocol 71
5.4 USB设备请求示例 71
5.4.1声明设备请求 71
5.4.2设备请求的响应 72
5.5小结 77
第6章 元器件的识别和加工 78
6.1元器件的封装 78
6.1.1元器件封装的发展 78
6.1.2元器件封装小结 79
6.2元器件的焊接 88
6.2.1双列直插器件的焊接 88
6.2.2表面贴元器件的焊接 88
6.3常用的USB接口芯片 89
6.3.1 Cypress公司的USB接口芯片 90
6.3.2 Philips公司的USB接口芯片 95
6.3.3南京沁恒公司的USB接口芯片 97
6.4小结 100
第7章 电路制板布局 101
7.1印制电路板基础 101
7.1.1印制电路板的分类 101
7.1.2印制电路板的基本概念 102
7.2印制电路板设计规则 104
7.2.1电路板的选择 105
7.2.2电路板布局 105
7.2.3电路板布线 106
7.2.4其他设计规则 107
7.3高速USB接口的PCB设计 109
7.3.1差分阻抗 109
7.3.2 USB信号 110
7.3.3电源和地 112
7.3.4晶体振荡器 113
7.4小结 113
第2篇USB编程篇 117
第8章 构建USB接口开发环境 117
8.1 USB固件开发环境 117
8.1.1 Keil μVision3简介 117
8.1.2 Keil μVision3集成开发环境 118
8.1.3 Cypress开发包 119
8.2上位机开发环境 120
8.2.1 Visual Studio开发平台 120
8.2.2 LabVIEW开发平台 121
8.3 USB驱动开发环境 121
8.3.1 DriverStudio软件简介 121
8.3.2配置DriverSutdi o编译环境 123
8.3.3 NI-VISA开发平台 124
8.3.4 USB通用驱动程序 125
8.4 USB最小开发系统 125
8.5 USB软硬件开发环境 127
8.6小结 127
第9章USB固件编程 128
9.1 USB设备配置描述符 128
9.1.1变量声明 128
9.1.2设备描述 129
9.1.3设备配置 130
9.1.4字符串描述 133
9.2 USB设备请求 134
9.2.1自定义设备请求声明 134
9.2.2自定义设备请求的响应 135
9.3 USB重列举 139
9.4小结 142
第10章USB驱动开发 143
10.1 Windows下的USB驱动开发 143
10.1.1 USB驱动程序建立 144
10.1.2 USB驱动程序设计 146
10.2 LabVIEW环境下的USB驱动开发 147
10.2.1 NI-VISA的USB驱动简介 147
10.2.2创建USB驱动 148
10.3通用USB驱动概述 149
10.4 INF文件简介 149
10.4.1 INF文件处理过程 150
10.4.2 INF文件的结构 150
10.4.3版本节[Version] 151
10.4.4源文件盘符节[SourceDisksNames] 153
10.4.5源文件节[SourceDisksFiles] 153
10.4.6目标磁盘节[DestinationDirs] 153
10.4.7供应商节[Manufacturer] 154
10.4.8默认安装节[DefaultInstall] 154
10.4.9字符串节[String] 155
10.5 Visual Studio 6.0环境下的通用USB驱动 155
10.5.1 CyLoad.inf文件 155
10.5.2 CyUSB.inf文件 158
10.6 Visual Studio 2005环境下的通用USB驱动 161
10.7驱动程序的安装 163
10.8小结 165
第11章 上位机程序开发 166
11.1 Visual C++读写USB设备 166
11.1.1 CYIOCTL控制函数类 166
11.1.2 CyAPI控制函数类 173
11.2 Visual C#读写USB设备 194
11.2.1 CyHidDevice类 194
11.2.2 CyIsocEndPoint类 200
11.2.3 CyUSBStorDevice类 204
11.3 LabVIEW读写USB设备 206
11.3.1 USB设备测试 207
11.3.2 VISA控制函数 209
11.4小结 211
第3篇USB应用实例篇 215
第12章 使用EEPROM进行USB列举 215
12.1 EZ-USB FX2LP的启动模式概述 215
12.1.1 EZ-USB FX2LP的启动模式 216
12.1.2无EEPROM启动 216
12.1.3首字节为0xC0的EEPROM启动 217
12.1.4首字节为0xC2的EEPROM启动 217
12.1.5启动配置 218
12.2 EEPROM引导USB启动电路 221
12.3 USB固件程序设计 222
12.3.1建立USB项目 223
12.3.2主程序文件 224
12.3.3请求响应函数 226
12.3.4数据读写子程序 232
12.3.5 USB描述符 233
12.4驱动程序设计 237
12.4.1 USB固件下载驱动程序 237
12.4.2 USB通信驱动程序 239
12.5主机程序设计 241
12.5.1建立工程 241
12.5.2用户界面设计 243
12.5.3程序代码设计 243
12.6小结 246
第13章USB控制LED显示实例 247
13.1 LED数码管简介 247
13.1.1共阳极7段LED数码管 247
13.1.2共阴极7段LED数码管 249
13.2 USB控制LED显示实例 250
13.3 USB固件程序设计 251
13.3.1建立USB项目 251
13.3.2主函数程序设计 253
13.3.3设备请求响应函数 255
13.3.4 LED控制子函数 261
13.3.5 USB固件描述符 261
13.4 USB主机程序设计 266
13.4.1建立项目 267
13.4.2程序设计 268
13.5小结 273
第14章USB控制LCD液晶显示模块 274
14.1液晶显示模块概述 274
14.1.1液晶显示模块的分类 275
14.1.2液晶显示模块的特点 276
14.2液晶显示控制驱动器 276
14.2.1液晶显示控制驱动器概述 276
14.2.2液晶显示控制驱动器功能 277
14.3液晶显示控制器指令集 280
14.3.1基本指令集 280
14.3.2扩充指令集 283
14.3.3控制器指令操作方式 285
14.4液晶显示电路原理图 287
14.5固件程序设计 289
14.5.1建立USB项目 289
14.5.2主程序文件 290
14.5.3请求响应函数 293
14.5.4初始化子程序 298
14.5.5液晶汉字显示子程序 298
14.5.6点阵图形型液晶控制子函数 299
14.5.7 USB描述符 303
14.6主机程序设计 308
14.6.1建立工程 308
14.6.2用户界面设计 310
14.6.3程序代码设计 311
14.7小结 313
第15章USB键盘程序设计 314
15.1 HID设备概述 314
15.2 USB键盘设计实例 315
15.2.1电路原理图 315
15.2.2建立USB项目 316
15.2.3主程序文件 317
15.2.4标准设备请求响应函数 320
15.2.5 USB键盘功能实现 325
15.2.6 USB键盘描述符 328
15.3小结 333
第16章USB鼠标程序设计 334
16.1 USB鼠标硬件概述 334
16.2电路原理图 335
16.3固件程序设计 336
16.3.1接口定义 337
16.3.2主函数 338
16.3.3初始化函数 338
16.4功能实现代码 339
16.4.1主循环函数usbmain 339
16.4.2鼠标事务函数MouseTask 340
16.4.3挂起函数Suspend 340
16.4.4数据包处理函数HandleSetup 342
16.4.5输入数据包处理函数HandleIn 343
16.4.6读数据函数USB_control_read 343
16.4.7装载FIFO函数LoadEPOFifo 344
16.4.8停止端点函数USB_Stall_In_Out 344
16.4.9总线空闲函数BusInactive 344
16.4.10光学测量函数ProcessOptics 345
16.4.11读按键函数GetButtons 346
16.4.12鼠标移动函数MouseMoved 346
16.5 HID设备请求处理 347
16.5.1设置配置请求SetConfiguration 347
16.5.2设置地址请求SetAddress 347
16.5.3清标志请求ClearFeature 348
16.5.4设置标志请求SetFeature 349
16.5.5读取描述符请求GetDescriptor 349
16.5.6读取状态请求GetStatus 351
16.5.7设置空闲请求SetIdle 352
16.5.8设置协议请求SetProtocol 353
16.5.9读取报告请求GetReport 353
16.5.10读取空闲请求GetIdle 354
16.5.11读取协议请求GetProtocol 354
16.5.12读取配置请求GetConfiiguration 354
16.6 USB鼠标描述符 355
16.6.1设备描述符 355
16.6.2配置描述符 355
16.6.3接口描述符 356
16.6.4端点描述符 356
16.6.5 HID类描述符 357
16.6.6报告描述符 357
16.6.7字符串描述符 358
16.7小结 359
第17章USB控制D/A转换输出实例 360
17.1 D/A转换概述 360
17.1.1 D/A转换原理 360
17.1.2 D/A转换器的类型 361
17.1.3 D/A转换器的性能参数 363
17.2高速D/A转换芯片AD558 364
17.2.1 AD558简介 364
17.2.2 AD558输出模式 365
17.2.3 AD558的数据锁存 366
17.3电路原理图 367
17.4固件程序设计 369
17.4.1建立USB项目 369
17.4.2主程序文件 370
17.4.3请求响应函数 373
17.4.4 D/A转换子函数 378
17.4.5 USB设备配置描述符 378
17.5主机程序设计 384
17.5.1建立工程 384
17.5.2用户界面设计 386
17.5.3程序代码设计 386
17.6小结 391
第18章USB控制A/D转换数据采集实例 392
18.1 A/D转换器概述 392
18.1.1 A/D转换原理 393
18.1.2 A/D转换器的技术参数 395
18.1.3 A/D转换器的选择原则 396
18.2 8通道电压型A/D转换器MAX197 397
18.2.1 MAX197的引脚接口 397
18.2.2 MAX197的控制字节 398
18.2.3 MAX 197的控制时序 400
18.3 USB模拟电压采集实例 401
18.3.1系统电路原理图 401
18.3.2稳压电路 403
18.4 USB固件程序设计 403
18.4.1建立USB项目 404
18.4.2主函数程序设计 404
18.4.3设备请求处理 407
18.4.4 A/D转换控制子函数 413
18.4.5 USB描述符 413
18.5上位机程序设计 418
18.5.1建立项目 418
18.5.2程序设计 420
18.6小结 424
第19章USB的RAM测试实例 425
19.1 EZ-USB FX2LP的存储器 425
19.1.1内部数据RAM 425
19.1.2外部程序和数据存储空间 428
19.2 USB的RAM测试电路原理图 432
19.3固件程序设计 433
19.3.1建立USB项目 433
19.3.2主程序文件 434
19.3.3测试RAM区域函数test_mem 437
19.3.4错误码分析函数status 439
19.3.5特定字符串输出函数statString 439
19.4小结 440
第20章USB读写I2C总线EEPROM 441
20.1 I2C总线概述 441
20.1.1 I2C总线的工作原理 442
20.1.2 I2C总线的负载能力 442
20.1.3 I2C总线的寻址方式 442
20.1.4 I2C总线数据传输协议 443
20.2电路原理图 445
20.3固件程序设计 447
20.3.1建立USB项目 447
20.3.2主程序文件 448
20.3.3请求响应处理 451
20.3.4 EEPROM读写 456
20.3.5 I2C接口子函数 457
20.3.6 USB设备配置描述符 462
20.4主程序设计 467
20.4.1建立工程 467
20.4.2用户界面设计 468
20.4.3程序代码设计 469
20.5小结 472
第21章USB读写Microware串行EEPROM 473
21.1 Microware串行总线概述 473
21.2 Microware串行总线接口的EEPROM存储器 474
21.2.1 Microware串行总线接口EEPROM概述 474
21.2.2 Microware串行总线接口EEPROM的指令 475
21.2.3 Microware串行总线接口EEPROM的指令时序 476
21.3电路原理图 479
21.4固件程序设计 480
21.4.1建立USB项目 481
21.4.2主程序文件 482
21.4.3请求响应函数 485
21.4.4 Microware读写子函数 489
21.4.5三线制Microware串行总线读写子函数 490
21.4.6 USB设备配置描述符 493
21.5主程序设计 498
21.5.1建立工程 499
21.5.2用户界面设计 500
21.5.3程序代码设计 501
21.6小结 503
第22章USB控制实时时钟芯片DS1302 504
22.1实时时钟芯片DS1302概述 504
22.1.1实时时钟芯片DS 1302概述 504
22.1.2实时时钟芯片DS 1302命令字节 505
22.1.3实时时钟芯片DS1302数据格式 505
22.1.4实时时钟芯片DS1302数据传输方式 507
22.2电路原理图 508
22.3固件程序设计 510
22.3.1建立USB项目 510
22.3.2主程序文件 511
22.3.3请求响应处理 514
22.3.4实时时钟操作 519
22.3.5 DS1302控制子函数 521
22.3.6 USB设备配置描述符 524
22.4上位机程序设计 529
22.4.1建立工程 530
22.4.2用户界面设计 531
22.4.3程序代码设计 532
22.5小结 535
第23章USB采集单总线温度传感器DS18S20 536
23.1单总线概述 536
23.2单总线温度传感器DS18S20 537
23.2.1温度传感器DS 18S20概述 538
23.2.2 DS18S20的供电方式 538
23.2.3 DS18S20的数据操作 539
23.2.4 DS18S20的温度转换操作 541
23.3电路原理图 542
23.4固件程序设计 543
23.4.1建立USB项目 543
23.4.2主程序文件 544
23.4.3请求响应处理 547
23.4.4读取温度操作 552
23.4.5 DS18S20控制子函数 553
23.4.6 USB设备配置描述符 555
23.5上位机程序设计 560
23.5.1建立工程 561
23.5.2用户界面设计 562
23.5.3程序代码设计 563
23.6小结 566
第24章USB打印机控制实例 567
24.1 CH375A接口芯片 567
24.1.1 CH375A概述 568
24.1.2 CH375A内部结构 570
24.2 CH375A指令 570
24.2.1 CH375A基本指令 571
24.2.2 USB存储设备类指令 574
24.3 CH375A接口方式 580
24.3.1并行接口 581
24.3.2串行接口 581
24.4 USB打印机控制实例 582
24.4.1电路原理图 582
24.4.2 USB打印机控制方式 586
24.5程序设计 586
24.5.1项目建立 586
24.5.2头文件 587
24.5.3参数及结构定义 591
24.5.4主函数 593
24.5.5基本操作子函数 594
24.5.6数据同步及读写子函数 596
24.5.7 CH375A主机操作子函数 597
24.6小结 602
第25章USB接口充电器实例 603
25.1锂电池及其充电概述 603
25.1.1锂电池概述 603
25.1.2锂电池充电概述 604
25.2智能充电管理芯片MAX 1898 604
25.2.1智能充电管理芯片选型 605
25.2.2智能充电管理芯片MAX 1898概述 605
25.2.3 MAX1898充电工作原理 606
25.3 USB接口充电器实例 607
25.3.1电路原理图 608
25.3.2 USB接口充电器功能 610
25.4固件程序设计 611
25.4.1建立USB项目 611
25.4.2主程序文件 612
25.4.3请求响应处理 615
25.4.4智能充电管理 620
25.4.5 USB设备配置描述符 621
25.5小结 626
第26章USB转RS-232串口实例 627
26.1 CH341简介 627
26.2 CH341串口工作方式 628
26.2.1异步串口方式 628
26.2.2同步串口方式 631
26.3 CH341打印口工作方式 631
26.4 CH341并口工作方式 633
26.4.1 EPP并口方式 634
26.4.2 MEM并口方式 635
26.5 CH341功能配置 635
26.5.1直接组合配置 635
26.5.2外部芯片配置 635
26.6 USB转RS-232串口实例 636
26.6.1电路原理图 636
26.6.2硬件接口介绍 637
26.6.3连接使用 638
26.7小结 639
第27章U盘设计实例 640
27.1 Nand-Flash存储器 640
27.1.1 Nor-Flash和Nand-Flash 640
27.1.2 Nand-Flash存储器K9F2G08U0M 641
27.1.3 Nand-Flash存储器的组织结构 642
27.1.4 Nand-Flash存储器的指令集 643
27.1.5 Nand-Flash存储器的操作 643
27.2基于Nand-Flash的文件系统 644
27.2.1分区格式简介 644
27.2.2基于Nand-Flash的文件系统 645
27.2.3 Nand-Flash存储器上的FAT结构 649
27.3 Nand-Flash控制器 649
27.3.1 CY7C68023简介 649
27.3.2兼容Nand-Flash存储器 651
27.4 U盘设计实例 652
27.4.1电路原理图 652
27.4.2 PCB设计要求 653
27.4.3配置格式化 654
27.5小结 655
第28章LabVIEW下的USB数据采集实例 656
28.1 Slave FIFO模式简介 656
28.1.1 Slave FIFO模式的引脚及功能 657
28.1.2典型的数据传输 661
28.2 Slave FIFO的固件设计 662
28.2.1 Slave FIFO固件基础 662
28.2.2 Auto In/Auto Out模式 663
28.2.3 Auto In/Auto Out模式初始化 664
28.2.4 CPU访问OUT数据包 667
28.2.5 CPU访问IN数据包 669
28.3电路原理图 671
28.4固件程序设计 672
28.4.1建立USB项目 672
28.4.2主程序文件 673
28.4.3请求响应函数 676
28.4.4初始化子函数 680
28.4.5自定义请求子函数 681
28.4.6块传输处理 682
28.4.7 USB设备配置描述符 683
28.5 LabVIEW程序设计 688
28.5.1 USB驱动程序 688
28.5.2前面板程序设计 690
28.5.3程序框图设计 690
28.6小结 691
第4篇USB3.0展望篇 695
第29章USB 3.0概述 695
29.1 USB 3.0的产生和基本特性 695
29.1.1 USB 3.0的产生 695
29.1.2 USB 3.0的基本特性 696
29.1.3 USB 3.0的标志 697
29.2 USB 3.0技术解析 698
29.2.1 USB 3.0针脚定义 698
29.2.2 USB 3.0接头标准 699
29.2.3 USB 3.0线缆结构 701
29.3 USB 3.0工作原理 703
29.3.1 USB 3.0总线结构预览 703
29.3.2 USB 3.0总线编码 704
29.3.3 USB 3.0超速数据流模型 705
29.3.4 USB 3.0的典型眼图 706
29.3.5 USB 3.0超高速数据传输 708
29.3.6 USB 3.0的供电管理 708
29.4 USB 3.0的技术改进 709
29.5 USB 3.0产品及操作系统支持 711
29.5.1 USB 3.0的实现 711
29.5.2 USB 3.0的应用前景和产品 713
29.5.3 USB 3.0的操作系统支持 714
29.6 USB 3.0的竞争对手 714
29.6.1 Firewire技术 714
29.6.2 eSATA技术 715
29.6.3 ExpressCard 2.0技术 715
29.6.4 USB PLUS技术 715
29.7小结 716
第30章USB 3.0的开发 717
30.1 USB 3.0开发概述 717
30.1.1 USB 3.0的开发流程 717
30.1.2开发USB 3.0的准备工作 718
30.2 USB 3.0对设计的挑战 719
30.2.1对开发人员的挑战 719
30.2.2对厂商的挑战 721
30.3常用的USB 3.0芯片 722
30.3.1 NEC USB 3.0芯片μPD720200 722
30.3.2富士通MB86C30A桥接芯片 725
30.3.3 USB 3.0 Hub控制器VL810 728
30.3.4 USB 3.0-SATA控制器VL700 729
30.4 USB 3.0的测试测量工具 730
30.4.1泰克(Tektronix)的 USB 3.0工具 730
30.4.2安捷伦(Agilent)的USB 3.0工具 733
30.4.3力科(LeCroy)的USB 3.0工具 734
30.5 USB 3.0电路保护方案 734
30.5.1过流保护 735
30.5.2过压保护 736
30.5.3 ESD保护 737
30.5.4综合电路保护方案 737
30.6小结 738