第一篇 USB总线基础 1
第1章 USB总线开发基础 1
1.1 USB总线的发展 1
1.1.1 USB 1.0版本 2
1.1.2 USB 1.1版本 2
1.1.3 USB 2.0版本 2
1.1.4 USB 3.0版本 3
1.2 USB总线对比其他计算机总线 4
1.2.1早期计算机总线接口的缺点 4
1.2.2 USB总线接口的优势 5
1.2.3 USB总线对比其他计算机总线 6
1.3认识USB总线 7
1.3.1 USB主机 7
1.3.2 USB集线器设备 8
1.3.3 USB功能设备 8
1.3.4 USB电缆 8
1.3.5 USB连接器 9
1.4认识USB总线规范 13
1.4.1 USB总线设备类规范 14
1.4.2 USB系统的结构 14
1.4.3 USB总线的供电 15
1.4.4 USB总线电源分配 16
1.4.5 USB总线电源管理 17
1.5认识USB接口开发 18
1.5.1 USB硬件开发 18
1.5.2 USB驱动开发 18
1.5.3 USB软件开发 19
第2章 USB总线数据流结构 20
2.1 USB总线数据流概述 20
2.2USB数据流单元:字段 21
2.2.1同步字段:SYNC 21
2.2.2包标识字段:PID 23
2.2.3地址字段:ADDR 23
2.2.4端点字段:ENDP 23
2.2.5帧号字段:NUM 23
2.2.6数据字段:DATA 23
2.2.7校验字段:CRC 24
2.3 USB数据流构成:信息包 24
2.3.1令牌包:USB传输类型 24
2.3.2数据包:USB传输数据 28
2.3.3握手包:USB传输状态 28
第3章 USB总线数据流管理 30
3.1 USB总线数据流分类 30
3.2 USB IN数据流管理 30
3.2.1 USB设备响应 31
3.2.2 US B主机响应 31
3.3 USB OUT数据流管理 31
3.4 USB SETUP数据流管理 32
3.5 USB PING数据流管理 33
3.6 USB SOF数据流管理 34
3.7 USB SPLIT数据流管理 34
3.7.1 SSPLIT数据流管理 34
3.7.2 CSPLIT数据流管理 34
3.8 USB PRE数据流管理 35
3.9USB设备列举状态 35
3.9.1典型的USB设备状态 35
3.9.2 USB设备的连接 37
3.9.3 US B设备的断开 37
第4章 USB总线数据流类型 38
4.1 USB总线数据流传输类型概述 38
4.2 USB控制数据流传输:Control 39
4.2.1控制传输数据包 40
4.2.2控制数据流管理 40
4.3USB中断数据流传输:Interrupt 42
4.3.1中断传输的数据包 42
4.3.2中断数据流管理 42
4.4USB块数据流传输:Bulk 43
4.4.1块传输的数据包 43
4.4.2块数据流管理 43
4.5USB同步数据流传输:Isochronous 44
4.5.1同步传输的数据包 44
4.5.2同步数据流管理 44
4.6USB 3.0与USB 2.0数据传输的区别 45
4.6.1数据传输方式 46
4.6.2编码方式 46
4.7USB总线容错管理 47
4.7.1超时管理机制 48
4.7.2信息包错误管理机制 49
4.7.3数据触发管理机制 49
4.7.4 EOP错误管理机制 51
4.7.5总线活动丢失管理机制 51
第5章 USB标准设备管理 53
5.1 USB标准设备管理:描述符 53
5.1.1 USB设备描述符 54
5.1.2 USB配置描述符 56
5.1.3 USB接口描述符 57
5.1.4 USB端点描述符 58
5.1.5 USB字符串描述符 60
5.1.6 USB设备限定描述符 61
5.1.7 USB其他速率配置描述符 62
5.2 USB标准设备管理:设备请求 63
5.2.1读取状态请求GetStatus 64
5.2.2清除特性请求ClearFeature 65
5.2.3设置特性请求SetF eature 66
5.2.4设置地址请求SetAddress 66
5.2.5读取描述符请求GetDescription 67
5.2.6设置描述符请求SetDescriptor 67
5.2.7读取配置请求GetConfiiguration 67
5.2.8设置配置请求SetConfiiguration 68
5.2.9读取接口请求GetInterface 68
5.2.10设置接口请求SetInterface 68
5.2.11同步帧请求SynchFrame 69
5.3 USB标准设备管理示例 69
5.3.1声明设备请求 69
5.3.2设备请求的响应 70
第6章 USB HID设备管理 74
6.1 USB HID设备类 74
6.1.1 HID设备的特点 74
6.1.2 HID设备的定义 74
6.2 USB HID设备管理:描述符 76
6.2.1设备描述符 76
6.2.2配置描述符 76
6.2.3接口描述符 77
6.2.4端点描述符 77
6.2.5字符串描述符 77
6.2.6 HID类描述符 78
6.3 USB HID设备管理:HID设备类请求 80
6.3.1 GetReport请求(获取报告请求) 80
6.3.2 GetIdle请求(获取空闲速率请求) 81
6.3.3 GetProtocol请求(获取HID协议请求) 81
6.3.4 SetReport请求(设置报告请求) 82
6.3.5 S etIdle请求(设置空闲速率请求) 82
6.3.6 S etProtocol请求(设置HID协议请求) 83
第7章 USB集线器设备管理 84
7.1 USB集线器配置原理 84
7.1.1集线器设备类 85
7.1.2集线器的配置过程 85
7.1.3 US B集线器的状态 86
7.2 USB集线器设备管理:描述符 86
7.2.1集线器设备描述符 86
7.2.2集线器配置描述符 88
7.2.3集线器接口描述符 89
7.2.4集线器端点描述符 90
7.2.5集线器类描述符 91
7.3 USB集线器设备管理:集线器类请求 91
7.3.1读取集线器状态请求GetHubStatus 93
7.3.2读取下行端口状态请求GetPortStatus 93
7.3.3禁止集线器的特性请求ClearHubFeature 94
7.3.4禁止下行端口特性请求ClearPortFeature 94
7.3.5使能集线器特性请求SetHubF eature 95
7.3.6使能下行端口特性请求SetPortFeature 95
7.3.7读取描述符请求GetHubDescriptor 96
7.3.8设置描述符请求SetHubDescriptor 96
7.3.9清除TT块请求ClearTTBuffer 97
7.3.10复位TT块请求ResetTT 97
7.3.11读取TT内部状态请求GetTTState 98
7.3.12停止TT正常工作请求StopTT 99
第二篇 USB程序开发 100
第8章 Windows驱动程序管理 100
8.1 Windows驱动管理模型:WDM 100
8.1.1 WDM驱动程序特征 101
8.1.2 WD M驱动程序结构 102
8.1.3 WD M驱动程序模型 102
8.1.4 WDM驱动程序构成 103
8.2入口例程的实现 104
8.3即插即用例程的实现 105
8.4分发例程的实现 108
8.5卸载例程的实现 109
8.6电源管理例程的实现 109
8.7设备的即插即用管理 111
8.7.1 WDM PnP IRP的处理规则 111
8.7.2 WDM即插即用的管理 113
8.7.3 US B设备的即插即用 114
第9章 DriverStudio驱动开发工具 117
9.1 DriverStudio驱动开发工具简介 117
9.1.1 DriverStudio软件工具 117
9.1.2 DriverStudio软件的安装及配置 119
9.1.3配置DriverStudio编译环境 124
9.2 DriverStudio环境下WDM驱动结构 125
9.2.1基类KDriver 125
9.2.2即插即用类KPnPDevice 127
9.2.3物理对象类KPnpLowerDevice 131
9.3 DriverStudio环境下WDM驱动程序实例 131
9.3.1简单的驱动程序的建立 131
9.3.2驱动程序设计 138
9.3.3驱动的安装 141
9.3.4驱动程序测试 145
第10章 基于DriverStudio的USB接口编程类 147
10.1 USB编程类函数概述 147
10.2 USB设备编程类KUsbLowerDevice 147
10.2.1激活USB设备配置函数ActivateConfiiguration 147
10.2.2终止USB设备配置函数DeActivateConfiiguration 148
10.2.3初始化厂商请求函数BuildVendorRequest 148
10.2.4分配类请求函数BuildClassRequest 149
10.2.5清除特征标志函数ClearFeature 149
10.2.6设置特征标志函数SetFeature 149
10.2.7获取状态函数GetStatus 150
10.2.8获取USB帧号函数GetCurrentFrameNumber 150
10.2.9未配置状态函数Unconfiigure 150
10.2.10配置状态函数Confiigure 150
10.2.11配置接口函数PreconfiigureInterface 150
10.2.12接口描述符函数LocateInterface 150
10.2.13配置描述符函数Preconfigure 151
10.2.14删除USB资源函数ReleaseResources 151
10.2.15 字符串描述符函数GetStringDescriptor 151
10.2.16设备描述符函数GetDeviceDescriptor 151
10.2.17初始化函数Initialize 152
10.2.18发送URB函数SubmitUrb 152
10.3USB接口编程类KUsbInterface 152
10.3.1使能接口函数SelectAlternate 152
10.3.2清除特征标志函数ClearFeature 152
10.3.3设置特征标志函数SetFeature 153
10.3.4获取状态函数GetStatus 153
10.3.5初始化厂商请求函数BuildVendorRequest 153
10.3.6分配类请求函数BuildCIassRequest 154
10.3.7管道函数Pipes 154
10.3.8管道数量函数NumberOfPipes 154
10.3.9接口协议函数Protocol 154
10.3.10接口子类函数Subclass 155
10.3.11接口类函数Class 155
10.3.12使能接口号函数AltemateSetting 155
10.3.13接口数量函数InterfaceNumber 155
10.3.14初始化函数Initialize 155
10.3.15关闭接口函数Close 155
10.3.16是否打开函数IsOpen 155
10.3.17打开实例函数Open 155
10.3.18发送URB函数SubmitUrb 156
10.3.19是否可用函数IsValid 156
10.4USB管道编程类KUsbPipe 156
10.4.1初始化函数Initialize 156
10.4.2打开接口函数Open 156
10.4.3是否打开函数IsOpen 156
10.4.4关闭管道函数Close 157
10.4.5中断传输函数BuildInterruptTransfer 157
10.4.6控制传输函数Bui IdControlTransfer 157
10.4.7块传输函数BuildBulkTransfer 157
10.4.8同步传输函数BuildIsochronousTransfer 158
10.4.9清除特征标志函数ClearF eature 158
10.4.10设置特征标志函数SetFeature 158
10.4.11获取状态函数GetStatus 159
10.4.12复位管道函数Reset 159
10.4.13丢弃函数Abort 159
10.4.14初始化厂商请求函数BuildVendorRequest 159
10.4.15 初始化类请求函数BuildClassRequest 160
10.4.16最大帧字节数函数MaximumPacketSize 160
10.4.17最大传输字节数函数MaximumTransferSize 160
10.4.18管道句柄函数Handle 160
10.4.19中断检查间隔函数PollInterval 160
10.4.20管道端点地址函数EndpointAddress 161
10.4.21设置最大传输字节数函数SetMaximumTransferSize 161
10.4.22发送URB函数SubmitUrb 161
10.4.23传输类型函数Type 161
10.5 USB驱动创建实例 161
10.5.1 USB驱动程序建立 161
10.5.2 USB驱动程序设计 167
第11章 Cypress通用USB驱动程序 169
11.1驱动程序INF文件简介 169
11.2驱动程序INF文件处理过程 169
11.3驱动程序IN F文件的结构 170
11.3.1版本节[Version] 170
11.3.2源文件盘符节[Source Di sksN arnes] 172
11.3.3 源文件节[SourceDisksFiles] 172
11.3.4目标磁盘节[DestinationDirs] 173
11.3.5供应商节[Manufacturer] 173
11.3.6默认安装节[DefaultInstall] 174
11.3.7字符串节[String] 174
11.4 Cypress的通用USB驱动程序概述 174
11.5 CyLoad.inf文件解析 175
11.5.1 CyLoad.inf文件 175
11.5.2修改设备的VID/PID 177
11.5.3修改字符串 177
11.5.4修改GUID 178
11.5.5修改驱动名称 178
11.6 CyUSB.inf文件解析 178
11.6.1 CyUSB.inf文件 178
11.6.2修改设备的VID/PID 180
11.6.3修改字符串 181
11.6.4修改驱动名称 181
11.7 EZ-USB驱动程序的安装 181
第12章 Cypress的USB接口控制函数 185
12.1 cyioctl控制数类 185
12.1.1头文件cyioctl.h 185
12.1.2获取设备句柄 191
12.1.3中止i/O端点的请求接口IOCTL ADAPT ABORT PIPE 191
12.1.4断开USB设备接口IOCTL ADAPT CYCLE PORT 191
12.1.5获得设备地址接口IOCTL ADAPT GET ADDRESS 191
12.1.6获取替换接口IOCTL ADAPT GET ALT INTERFACE SETTING 192
12.1.7获取字符串接口IOCTL_ADAPT_GET_DEVICE_NAME 192
12.1.8获取电源接口IOCTL_ADAPT_GET_DEVICE_POWER_STATE 192
12.1.9获取版本接口IOCTL_ADAPT_GET_DRIVER_VERSION 193
12.1.10获取替换名称接口IOCTL_ADAPT_GET_FRIENDLY_NAME 193
12.1.11获取端点数接口IOCTL_ADAPT_GET_NUMBER_ENDPOINTS 193
12.1.12获取传输大小接口IOCTL_ADAPT_GET_TRANSFER_SIZE 194
12.1.13获取USBDI接口IOCTL_ADAPT_GET_USBDI_VERSION 194
12.1.14复位设备接口IOCTL_ADAPT_RESET_PARENT_PORT 194
12.1.15复位端点接口IOCTL_ADAPT_RESET_PIPE 195
12.1.16设置替换接口IOCTL_ADAPT_SELECT_INTERFACE 195
12.1.17发送控制请求接口IOCTL_ADAPT_SEND_EPO_CONTROL_TRANSFER 195
12.1.18数据传输接口IOCTL_ADAPT_SEND_NON_EPO_TRANSFER 196
12.1.19设置电源接口IOCTL_ADAPT_SET_DEVICE_POWER_STATE 197
12.1.20设置传输字节接口IOCTL_ADAPT_SET_TRANSFER_SIZE 197
12.2 CyAPI控制函数类 198
12.2.1头文件CyAPI.h 198
12.2.2块传输端点控制类CCyBulkEndPoint 208
12.2.3控制传输端点类CCyControlEndPoint 208
12.2.4中断传输端点控制类CCyInterruptEndPoint 210
12.2.5同步传输端点控制类CCylsocEndPoint 211
12.2.6设备控制类CCyUSBDevice 213
12.2.7配置信息类CCyUSBConfiig 223
12.2.8端点控制类CCyUSBEndPoint 225
12.2.9接口控制类CCyUSBInterface 229
12.3 USB控制函数示例 232
第13章 Cypress EZ-USB接口芯片 234
13.1 EZ-USB芯片简介 234
13.2增强型8051 CPU结构 235
13.3特殊功能寄存器 236
13.4中断系统 237
13.5 I/O端口 238
13.5.1普通I/O功能 240
13.5.2第二扩展功能 243
13.5.3从属FIFO接口模式 246
13.5.4 GPIF模式 247
13.6指令系统 248
第14章 Cypress EZ-USB寄存器详解 254
14.1特殊功能寄存器 254
14.1.1端口PA读/写寄存器IOA 254
14.1.2端口PB读/写寄存器IOB 255
14.1.3自动指针1地址高字节寄存器AUTOPTRH 1 255
14.1.4自动指针1地址低字节寄存器AUTOPTRLI 255
14.1.5自动指针2地址高字节寄存器AUTOPTRH2 255
14.1.6自动指针2地址低字节寄存器AUTOPTRL2 256
14.1.7端口PC读/写寄存器IOC 256
14.1.8中断请求INT2清除寄存器INT2CLR 256
14.1.9中断请求INT4清除寄存器INT4CLR 257
14.1.10端点状态标志寄存器EP2468STAT 257
14.1.11数据传输状态标志寄存器EP24FIFOFLGS 258
14.1.12数据传输状态标志寄存器EP68FIFOFLGS 258
14.1.13自动指针设置寄存器AUTOPTRSETUP 259
14.1.14端口PD读/写寄存器IOD 259
14.1.15 端口PE读/写寄存器IOE 259
14.1.16端口使能寄存器OEA~OEE 260
14.1.17端点0和1的状态寄存器EPO 1 STAT 261
14.1.18触发GPIF寄存器GPIFTRIG 261
14.1.19 GPIF数据寄存器GPIFSGLDATH 261
14.1.20 GPIF数据寄存器GPIFSGLDATLX 262
14.1.21 GPIF数据寄存器GPIFSGLDATLNOX 262
14.2GPIF波形描述寄存器 262
14.3通用配置寄存器 263
14.3.1 CPU控制和状态寄存器 263
14.3.2接口配置 263
14.3.3 Slave FIFO引脚配置 264
14.3.4 FIFO复位 266
14.3.5断点 266
14.3.6串行时钟 267
14.3.7 Slave FIFO接口引脚的极性 267
14.3.8芯片版本ID 268
14.3.9芯片版本控制 269
14.3.10 GPIF保持时间 269
14.4端点配置寄存器 269
14.4.1端点1IN和端点1OUT配置 270
14.4.2端点2、 4、 6、 8配置 270
14.4.3端点2、 4、 6、 8的Slave FIFO配置 271
14.4.4端点2、 4、 6、 8的 AUTO IN包长度 272
14.4.5端点的ISO IN包 273
14.4.6 IN数据包强制结束 273
14.4.7 OUT数据包强制结束 273
14.5中断寄存器 275
14.5.1端点Slave FIFO中断 275
14.5.2 Bulk In中断 276
14.5.3端点握手中断 276
14.5.4 USB中断 277
14.5.5端点中断 278
14.5.6 GPIF中断 279
14.5.7 USB错误中断 279
14.5.8 USB错误计数限制 280
14.5.9清除错误计数 281
14.5.10 IN T2自动向量 281
14.5.11 INT4自动向量 281
14.5.12INT2和INT4的SETUP 281
14.6输入/输出寄存器 282
14.6.1端口A的替换配置 282
14.6.2端口C的替换配置 282
14.6.3端口E的替换配置 283
14.6.4 XTALIN时钟源源 283
14.6.5 I2C总线控制和状态 284
14.6.6 I2C总线数据 284
14.6.7 I2C总线控制 284
14.6.8自动指针的 MOVX操作 285
14.7 USB控制寄存器 285
14.7.1 USB控制和状态 285
14.7.2进入挂起状态 286
14.7.3唤醒控制及状态 286
14.7.4数据触发控制 287
14.7.5 USB帧计数 287
14.7.6 USB微帧计数 288
14.7.7 USB功能地址 288
14.8端点操作寄存器 288
14.8.1端点0计数 288
14.8.2端点1计数 289
14.8.3端点2和端点6的Byte计数高位 289
14.8.4端点4和端点8的Byte计数高位 289
14.8.5端点2.4.6.8计数的低位 290
14.8.6端点0控制和状态 290
14.8.7端点1控制和状态 291
14.8.8端点2控制和状态 292
14.8.9端点4控制和状态 292
14.8.10端点6控制和状态 293
14.8.11端点8控制和状态 293
14.8.12端点2和端点4的FIFO标志 294
14.8.13端点6和端点8的FIFO标志 294
14.8.14端点2的Slave FIFO字节计数高位 294
14.8.15 端点6的Slave FIFO字节计数高位 295
14.8.16端点4和端点8的Slave FIFO字节计数高位 295
14.8.17端点2、 4、 6和端点8 Slave FIFO字节计数低位 295
14.8.18 Setup数据指针地址 296
14.8.19 Setup指针自动模式 296
14.8.20 8字节Setup数据 297
14.9 GPIF/FIFOs寄存器 297
14.9.1 GPIF波形选择 298
14.9.2 GPIF完成和空闲 298
14.9.3 CTL的输出状态 299
14.9.4 GPIF地址 300
14.9.5 GPIF流动状态 300
14.9.6 GPIF处理字节计数 301
14.9.7端点2、 4、 6和端点8的GPIF标志选择 303
14.9.8端点2、 4、 6和端点8的GPIF停止事务 303
14.9.9端点2、 4、 6和端点8的GPIF触发 303
14.9.10 GPIF数据 304
14.9.11 GPIF RDY引脚的配置 305
14.9.12 GPIF RDY引脚状态 306
14.9.13终止GPIF循环 306
14.10端点缓冲寄存器 306
14.10.1端点0 306
14.10.2端点1IN 307
14.10.3端点1 OUT 307
14.10.4端点2 307
14.10.5端点4 308
14.10.6端点6 309
14.10.7端点8 309
第15章 Cypress EZ-USB固件设计 310
15.1 EZ-USB开发工具包 310
15.1.1安装开发工具包 310
15.1.2开发包工具简介 314
15.2 EZ-USB基本固件框架 316
15.2.1基本固件框架的建立 316
15.2.2基本电路图 317
15.2.3固件设计和运行 318
15.3 EZ-USB固件程序设计 323
15.3.1 USB端口读/写的程序设计 323
15.3.2 USB端口读/写的固件仿真调试 327
15.3.3 USB端点的数据发送和采集 328
15.3.4数据发送和采集仿真调试 332
第三篇 USB开发实例 334
第16章 USB接口LED数码管显示器实例 334
16.1 USB控制端点0请求 334
16.1.1 USB控制传输流程 334
16.1.2 USB设备请求及固件响应 335
16.1.3自定义请求 346
16.2 LED数码管显示器 346
16.2.1共阳极7段LED 347
16.2.2共阴极7段LED 348
16.3电路原理图 349
16.3.1电源部分电路 350
16.3.2 USB部分电路 351
16.4 USB固件程序设计 351
16.4.1主程序文件 352
16.4.2功能实现代码 360
16.4.3自定义请求的定义 362
16.4.4 USB描述符 369
16.4.5固件程序安装及调试 375
16.5 USB主机程序设计 378
16.5.1控制函数 379
16.5.2建立项目 380
16.5.3程序设计 384
16.5.4编译程序并运行 388
第17章 USB自定义设备实例 389
17.1 EZ-USB的启动模式 389
17.1.1 EZ-USB的启动模式 389
17.1.2默认USB设备状态 390
17.2 EZ-USB的EEPROM引导启动 391
17.2.1没有EEPROM,或者EEPROM的首字节不合法 391
17.2.2首字节为0xC0的EEPROM启动 392
17.2.3首字节为0xC2的EEPROM启动 392
17.2.4配置字节 393
17.2.5设备请求控制位RENUM 394
17.2.6固件下载和重列举 395
17.3 USB自定义设备实例 396
17.3.1硬件选型的写入 396
17.3.2 EEPROM读/写电路设计 396
17.4 EEPROM读/写程序 397
17.4.1宏定义 398
17.4.2延时函数 398
17.4.3基本操作函数 399
17.4.4 12C读/写函数 400
17.4.5主程序 402
17.4.6编译工程 403
17.5 USB自定义设备电路设计 403
17.6 USB自定义设备固件程序设计 404
17.6.1主程序文件 405
17.6.2请求响应函数 407
17.6.3初始化子程序 410
17.6.4功能子程序 411
17.6.5自定义请求的定义 411
17.7 USB描述符 412
17.7.1设备描述符 412
17.7.2高速配置描述符 412
17.7.3全速配置描述符 414
17.7.4字符串描述符 416
17.8驱动程序设计 417
17.8.1编辑PMDriverLoad.inf文件 417
17.8.2编辑QKDPMDriver.inf文件 419
17.9驱动程序的安装 422
17.9.1安装驱动 422
17.9.2测试设备 425
17.10固件仿真调试 426
17.11主机程序设计 426
17.11.1建立工程 426
17.11.2用户界面设计 429
17.11.3程序代码设计 430
17.11.4编译执行 432
第18章 USB的RAM读1写实例 434
18.1 EZ-USB FX2LP的存储器 434
18.1.1内部数据RAM 434
18.1.2外部程序和数据存储空间 437
18.1.3 EZ-USB FX2LP的内存映射 438
18.1.4 Von-Neumanni zing片外程序和数据存储器 439
18.1.5 0xE000~0xFFFF之间的片内数据存储器 440
18.2 USB的RAM读/写电路设计 441
18.2.1电路原理图 441
18.2.2 USB接口说明 442
18.2.3 I2C总线接口芯片PCF8574 442
18.3建立USB固件程序项目 443
18.4主程序文件 444
18.4.1宏定义和函数变量声明 444
18.4.2读/写RAM区域函数 446
18.4.3错误码分析函数 447
18.4.4字符串输出函数 448
18.4.5主函数 448
18.5头文件简介 450
18.5.1常量定义 451
18.5.2宏定义 453
18.5.3数据类型 454
18.5.4全局声明 457
18.5.5函数声明 458
第19章 USB自动数据传输实例 459
19.1 Slave FIFO模式简介 459
19.1.1 Slave FIFO模式的引脚 460
19.1.2典型的数据传输时序 464
19.2Slave FIFO模式的固件设计 470
19.2.1 Slave FIFO固件基础 471
19.2.2 AUTO IN/AUTO OUT方式 471
19.2.3 CPU访问OUT数据包 473
19.2.4 CPU访问IN数据包 475
19.2.5 AUTO IN/AUTO OUT方式初始化 477
19.3 USB自动数据传输实例 479
19.3.1电路设计 479
19.3.2外部控制逻辑程序设计 481
19.3.3 USB固件程序设计 483
19.3.4固件仿真调试 494
19.3.5主机控制函数简介 495
19.3.6上位机程序设计 496
19.3.7程序运行 506
第20章 USB高速数据采集实例 508
20.1 EZ-USB的GPIF模式 508
20.1.1 GPIF模式简介 508
20.1.2 GPIF的硬件组成 509
20.1.3 GPIF硬件配置 512
20.2 GPIF波形图编辑 512
20.2.1 GPIF寄存器 512
20.2.2可编程GPIF波形 512
20.2.3波形图设计工具 513
20.2.4波形图设计实例 514
20.3 GPIF固件编程 514
20.3.1单字节读数据传输 516
20.3.2单字节写数据传输 519
20.3.3 FIFO读数据传输 522
20.3.4 FIFO写数据传输 526
20.4基于GPIF模式的高速数据采集电路 530
20.4.1数据采集电路图 530
20.4.2外部FIFO接口 531
20.5数据采集波形图编辑 533
20.5.1接口设计 533
20.5.2数据读/写设计 535
20.5.3波形描述符文件 536
20.6固件程序设计 539
20.6.1 USB描述符 539
20.6.2主程序 545
20.6.3功能实现文件 547
20.6.4初始化代码 548
20.6.5数据传输函数 550
20.6.6调度函数 550
20.6.7自定义请求 552
20.7 USB主机程序设计 554
20.7.1创建主机程序 554
20.7.2界面设计 557
20.7.3主机程序初始化 558
20.7.4按钮功能实现 559
20.7.5线程处理 561
第21章 USB HID设备设计实例 565
21.1简易USB HID键盘原理图 565
21.2 USB固件程序开发 566
21.2.1建立USB固件程序 566
21.2.2键盘描述符 567
21.2.3主程序文件 573
21.2.4功能实现代码 575
21.3设备测试 578
第22章 USB转串口实例 579
22.1CH341芯片简介 579
22.1.1 CH341芯片的特点 579
22.1.2异步串口方式 580
22.1.3打印口 582
22.1.4并口 584
22.1.5同步串口 586
22.1.6功能配置 586
22.2 USB转串口实例 587
22.2.1电路图 587
22.2.2硬件介绍 588
22.2.3连接使用 589
第23章 控制UsB接口打印机实例 590
23.1 CH375A接口芯片 590
23.1.1 CH375A概述 591
23.1.2CH375A内部结构 592
23.2 CH375A基本指令 593
23.2.1设置设备地址命令SET_USB_ADDR 594
23.2.2设置端点接收器命令SET_ENDP6 594
23.2.3设置端点发送器命令SET_ENDP7 594
23.2.4设置重试次数命令SET_RETRY 595
23.2.5事务执行命令ISSUE_TOKEN 595
23.2.6清除端点错误命令CLR_STALL 595
23.2.7设置地址命令SET_ADDRESS 596
23.2.8获取描述符命令GET_DESCR 596
23.2.9设置USB配置命令SET_CONFIG 596
23.2.10读取数据块命令RD_USB_DATA0 596
23.2.11延时100μS命令DELAY_100US 596
23.2.12查询连接状态命令TEST_CONNECT 596
23.2.13同步令牌事务命令ISSUE_TKN_X 597
23.2.14自动配置设备命令AUTO_SETUP 597
23.3 USB存储设备类指令 597
23.3.1硬件复位命令RESET_ALL 598
23.3.2测试工作状态命令CHECK_EXIST 598
23.3.3设置工作模式命令SET_USB_MODE 598
23.3.4获取中断状态命令GET_STATUS 599
23.3.5设置串口波特率命令SET_BAUDRATE 599
23.3.6读取数据块命令RD_USB_DATA 600
23.3.7写入数据块命令WR_USB_DATA7 600
23.3.8终止命令ABORT NAK 600
23.3.9初始化存储设备命令DISK_INIT 600
23.3.10获取物理容量命令DISK_SIZE 601
23.3.11读取数据块命令DISK_READ 601
23.3.12读操作命令DISK_RD_GO 601
23.3.13写入数据块命令DISK_WRITE 601
23.3.14写操作命令DISK_WR_GO 602
23.3.15获取版本命令GET_IC_VER 602
23.3.16低功耗状态命令ENTER_SLEEP 602
23.3.17设置逻辑单元号命令SET_DISK_LUN 602
23.3.18查询特性命令DISK_INQUIRY 602
23.3.19检查存储设备是否就绪命令DISK_READY 603
23.3.20检查错误命令DISK_R_SENSE 603
23.3.21获取最大逻辑单元号命令DISK_MAX_LUN 603
23.4接口方式 603
23.4.1并行接口 603
23.4.2串行接口 604
23.5USB打印机控制实例 605
23.5.1 USB打印机控制方式 605
23.5.2电路图 605
23.5.3项目建立 608
23.6头文件 609
23.6.1指令声明 609
23.6.2操作状态及中断状态 613
23.6.3请求类型 614
23.7程序设计 615
23.7.1头文件 615
23.7.2参数及结构定义 615
23.7.3基本操作函数 617
23.7.4数据同步及读/写 619
23.7.5主机操作 620
23.7.6主函数 625