第一章 USB概述及协议基础 1<br />1.1 USB是什么 1<br />1.2 USB的特点 1<br />1.3 USB的拓扑结构 2<br />1.4 USB的电气特性 5<br />1.5 USB的线缆以及插头、插座 5<br />1.6 USB的插入检测机制 7<br />1.7 USB的描述符及其之间的关系 9<br />1.8 USB设备的枚举过程 10<br />1.9 USB的包结构及传输过程 11<br />1.9.1 USB包的结构及包的分类 11<br />1.9.2 令牌包 13<br />1.9.3 数据包 14<br />1.9.4 握手包 14<br />1.9.5 特殊包 15<br />1.9.6 如何处理数据包 15<br />1.10 USB的四种传输类型 16<br />1.10.1 USB事务 16<br />1.10.2 批量传输 16<br />1.10.3 中断传输 18<br />1.10.4 等时传输(同步传输) 19<br />1.10.5 控制传输 20<br />1.10.6 端点类型与传输类型的关系 21<br />1.10.7 传输类型与端点支持的最大包长 21<br />1.11 本章小结 21<br /><br />第二章 硬件系统设计 1<br />2.1 方案以及芯片的选定 1<br />2.2 D12引脚功能说明 2<br />2.3 D12与89S52的连接 4<br />2.4 串口部分电路 6<br />2.5 按键部分 7<br />2.6 指示灯部分 7<br />2.7 IDE接口部分 8<br />2.8 单片机部分 8<br />2.9 元件安装 8<br />2.10 电路调试 11<br />2.11 测试程序的编写和调试 12<br />2.11.1 建立一个工程 12<br />2.11.2 为工程添加源文件 14<br />2.11.3 KEIL工具栏及仿真介绍 15<br />2.11.4 按键驱动的编写 18<br />2.11.5 串口驱动的编写 24<br />2.11.6 PDIUSBD12读写函数及读ID的实现 28<br />2.12 本章小结 33<br /><br />第三章 USB鼠标的实现 1<br />3.1 USB鼠标工程的建立 1<br />3.2 USB的断开与连接 1<br />3.3 USB中断的处理 4<br />3.4 读取从主机发送到端点0的数据 6<br />3.5 USB标准请求 12<br />3.5.1 USB标准设备请求的结构 13<br />3.5.2 GET_DESCRIPTOR请求 15<br />3.5.3 SET_ADDRESS请求 16<br />3.5.6 SET_CONFIGURATION请求 16<br />3.6 设备描述符的实现 17<br />3.7 设备描述符的返回 20<br />3.8 设置地址请求的处理 30<br />3.9 配置描述符集合的结构 32<br />3.9.1 配置描述符的结构 32<br />3.9.2 接口描述符的结构 33<br />3.9.3 端点描述符的结构 33<br />3.9.4 HID描述符的结构 34<br />3.10 配置描述符集合的实现以及返回 35<br />3.11 字符串及语言ID请求的实现 39<br />3.12 设置配置请求的实现 45<br />3.13 报告描述符的结构及实现 48<br />3.14 报告的返回 54<br />3.15 Bus Hound工具的简介 57<br />3.16 本章小结 59<br /><br />第四章 USB键盘的实现 1<br />4.1 USB键盘工程的建立 1<br />4.2 设备描述符的实现 1<br />4.4 配置描述符集合的实现 2<br />4.4.1 配置描述符 3<br />4.4.2 接口描述符 3<br />4.4.3 HID描述符 3<br />4.4.4 端点描述 3<br />4.5 字符串描述符 6<br />4.6 报告描述符 6<br />4.7 输入和输出报告的实现 10<br />4.8 USB键盘实例的测试 13<br />4.9 再谈USB HID的报告描述符 14<br />4.10 带鼠标功能的USB键盘(方法一) 16<br />4.11 带鼠标功能的键盘(方法二) 22<br />4.12 多媒体USB键盘 29<br />4.13 本章小结 34<br /><br />第五章 用户自定义的USB HID设备 1<br />5.1 MyUsbHid工程的建立 1<br />5.2 描述符的修改 1<br />5.3 报告的实现 3<br />5.4 对用户自定义的USB HID设备的访问 5<br />5.5 访问HID设备时所用到的相关函数 5<br />5.5.1 获取HID设备的接口类GUID的函数 5<br />5.5.2 获取指定类的所有设备信息集合的函数 6<br />5.5.3 从设备信息集合中获取一个设备接口信息的函数 6<br />5.5.4 获取指定设备接口详细信息的函数 7<br />5.5.5 打开设备的函数 8<br />5.5.6 获取HID设备属性的函数 8<br />5.5.7 从设备读取数据的函数 9<br />5.5.8 往设备写数据的函数 9<br />5.5.9 通过控制端点0读取报告的函数 10<br />5.5.10 通过控制端点0发送报告的函数 10<br />5.5.11 关闭设备的函数 10<br />5.5.12 需要包含的库文件 11<br />5.6 访问USB HID设备的上位机软件的实现 11<br />5.6.1 上位机程序编写的思路 11<br />5.6.2 查找及打开HID设备的代码 12<br />5.6.3 读输入报告线程的代码 17<br />5.6.4 写输出报告的代码(发送LED的状态) 20<br />5.6.5 写输出报告线程的代码 22<br />5.6.6 线程的创建以及设备插拔事件的注册 22<br />5.6.7 对设备状态改变事件的处理 24<br />5.7 软件界面以及使用方法 25<br />5.8 本章小结 26<br /><br />第六章 USB转串口 1<br />6.1 串口家族历史 1<br />6.2 串口接头的引脚分布及功能 1<br />6.3 USB转串口的实现方法 2<br />6.4 设备描述符 2<br />6.5 字符串描述符 4<br />6.6 配置描述符集合 4<br />6.6.1 配置描述符 4<br />6.6.2 CDC接口描述符 4<br />6.6.3 类特殊接口描述符——功能描述符 5<br />6.6.4 接口0(CDC接口)的端点描述符 8<br />6.6.5 数据类接口的接口描述符 8<br />6.6.6 接口1(数据类接口)的端点描述符 9<br />6.6.7 修改好描述符后的测试 10<br />6.7 类请求的实现 12<br />6.7.1 GET_LINE_CODING请求 12<br />6.7.2 SERIAL_STATE通知 13<br />6.7.3 SET_CONTROL_LINE_STATE请求 13<br />6.7.4 SET_LINE_CODING请求 13<br />6.7.5 实现类请求后的测试 15<br />6.8 对串口数据的处理 16<br />6.9 安装驱动用的inf文件 21<br />6.10 本章小结 25<br /><br />第七章 USB MIDI键盘 1<br />7.1 MIDI简介 1<br />7.2 MIDI的工作原理 2<br />7.3 USB MIDI设备的数据流模型 2<br />7.4 设备描述符 2<br />7.5 配置描述符集合 3<br />7.5.1 配置描述符 3<br />7.5.2 音频控制接口(AudioControl,AC)描述符 3<br />7.5.3 类特殊音频控制接口描述符 4<br />7.5.4 MIDI流接口描述符 4<br />7.5.5 类特殊MIDI流接口描述符 5<br />7.5.6 端点描述符和类特殊端点描述符 10<br />7.5.7 字符串描述符 12<br />7.6 修改好描述符后的测试 12<br />7.7 USB MIDI键盘的数据返回 13<br />7.8 USB MIDI键盘的使用 15<br />7.9 单片机自动弹奏的实现 17<br />7.10 本章小节 17<br /><br />第八章 U盘 1<br />8.1 USB大容量存储设备 1<br />8.2 设备描述符 1<br />8.3 字符串描述符 1<br />8.4 配置描述符集合 1<br />8.4.1 配置描述符 2<br />8.4.2 接口描述符 2<br />8.4.3 端点描述符 3<br />8.5 测试 3<br />8.6 类特殊请求 3<br />8.6.1 Get Max LUN请求 3<br />8.6.2 Bulk-Only Mass Storage Reset请求 4<br />8.7 仅批量传输协议的数据流模型 5<br />8.7.1 命令块封包(CBW)的结构 5<br />8.7.2 命令状态封包(CSW)的结构 6<br />8.7.3 对批量数据的处理 6<br />8.8 SCSI命令集和UFI命令集 7<br />8.8.1 INQUIRY(查询)命令 7<br />8.8.2 READ FORMAT CAPACITIES(读格式化容量)命令 8<br />8.8.3 READ CAPACITY(读容量)命令 9<br />8.8.4 READ(10)命令 10<br />8.8.5 WRITE(10)命令 11<br />8.8.6 REQUEST SENSE命令 12<br />8.8.7 TEST UNIT READY命令 12<br />8.9 FAT文件系统 13<br />8.9.1 关于DBR 13<br />8.9.2 关于FAT表 14<br />8.9.3 关于目录项 15<br />8.10 模拟一个FAT16文件系统 16<br />8.11 实验结果 17<br />8.12 IDE转USB的实现 19<br />8.13 本章小结 20<br /><br />第九章 自定义USB设备及驱动开发 1<br />9.1 用户自定义USB设备 1<br />9.1.1 设备描述符 1<br />9.1.2 配置描述符集合 1<br />9.1.3 字符串描述符 1<br />9.1.4 数据的处理 1<br />9.2 驱动程序开发简介 2<br />9.3 WDM驱动开发编程环境的建立 2<br />9.4 创建一个USB WDM驱动程序 4<br />9.5 对工程的编译 12<br />9.6 关于inf文件 14<br />9.7 驱动程序的修改 14<br />9.7.1 Read(KIrp I)函数 15<br />9.7.2 Write(KIrp I)函数 18<br />9.7.3 EP1_READ_Handler(KIrp I)函数 19<br />9.7.4 EP1_WRITE_Handler(KIrp I)函数 21<br />9.7.5 EP2_READ_Handler(KIrp I)函数 21<br />9.7.6 EP2_WRITE_Handler(KIrp I)函数 21<br />9.8 驱动的安装及安装后的信息 21<br />9.9 应用程序对驱动的访问 25<br />9.10 测试软件的使用 26<br />9.11 本章小结 28<br /><br />第十章 USB过滤驱动开发 1<br />10.1 过滤驱动简介 1<br />10.2 使用DS创建一个低层过滤驱动 1<br />10.3 过滤驱动代码的修改 6<br />10.4 过滤驱动的安装 11<br />10.5 过滤驱动的卸载 12<br />10.6 驱动程序测试 14<br />10.7 本章小结 17<br /> |
|