《USB开发手册》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:傅志辉编著
  • 出 版 社:北京:中国铁道出版社
  • 出版年份:2014
  • ISBN:9787113186746
  • 页数:625 页
图书介绍:本书系统地介绍了当前最流行的USB总线接口的协议、工作原理以及驱动程序设计。本书中还全面详细地介绍了在各种应用场合下USB接口的设计实例。本书言简意赅、通俗易懂,知识点介绍详细,实例丰富,使读者能够更快、更好地掌握USB接口的原理及设计方法。

第一篇 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