computer00
驱动小牛
驱动小牛
  • 注册日期2004-09-27
  • 最后登录2009-08-22
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望120点
  • 贡献值0点
  • 好评度110点
  • 原创分0分
  • 专家分0分
阅读:2946回复:3

推荐大家购买我的新书——《圈圈教你玩USB》

楼主#
更多 发布于:2009-04-27 10:23
《圈圈教你玩USB》网上购买途径[table=90%][tr][td]当当网
中国互动出版社
卓越亚马逊
中国高校教材图书网
2688网店
时代网
嵌入式图书网
博库书城网
广西师范大学出版社大学书店
沈阳书业网
佛山市新华书店网
天下书城网
很搞笑的是淘宝里面的分类,包括文化、艺术、政治军事、教材、工业农业等等~~~~~~~~
看来俺一下子成了很多家,如技术家、艺术家、小说家、军事家、政治家等等……




[table=100%][tr][td=3,1][/td][/tr][tr][td=3,1][/td][/tr][tr][td=3,1]
[/td][/tr][tr][td=3,1][/td][/tr][tr][td=3,1][table=100%][tr][td] 内容简介
   通过U盘、USB鼠标、USB键盘、USB MIDI键盘、USB转串口、自定义的USB HID设备和自定义的USB设备等几个具体的USB例子,一步步讲解USB设备及驱动程序和应用程序开发的详细过程和步骤。最后两章介绍USB WDM驱动开发,并给出一个简单的USB驱动和USB上层过滤驱动的实例。

    本书附带的光盘中有USB学习板的电路图以及所有实验的完整源代码包(C/C++语言)。

    本书的读者对象主要是USB设备与驱动设计的初学者和提高者,以及所有对圈圈的支持者。
[/td][/tr][tr][td][/td][/tr][/table]

前言
   USB作为一种计算机总线技术,在如今的个人计算机上已经是必不可少的了。看看我们身边的计算机外部设备,有多少是通过USB口与计算机连接的?鼠标、键盘、游戏手柄、打印机、扫描仪、MP3、数码相机、U盘、移动硬盘及移动光驱等,另外,还有一些我们不太常见的USB设备,例如一些具有USB口的仪表仪器、开发用的调试器、烧录机、USB网卡、USB耳机、USB话筒及USB电话,甚至一些移动电话(手机)也具备USB口。总之,只要是与计算机通信的外部设备,似乎都可以用USB来连接,这足见USB之强大。

    USB之所以使用得如此广泛,是因为它具有连接简单、速度快、可扩展性强、支持热插拔操作和标准统一等特点。由于USB协议详细地规定了各种参数以及数据结构、格式,因而使得各厂生产出来的设备都能够很好地相互兼容。不过,这却给USB设备开发者带来了一些麻烦。USB设备开发者首先要很清楚USB协议才能开发出符合协议的USB设备,然而USB协议本身是一个比较复杂、庞大的系统,再加上众多的子类协议,使得很多设计者望而生畏,或者时间上不允许。所以有一些小公司将USB部分外包或者使用别人现成的USB模块来加快开发进度。如果你会开发USB相关设备的话,可能会获得不少机会哦。不过,虽然圈圈(就是笔者我啦,读者一定要牢记这点,不然把你弄晕了我可不负责)会一点USB,但目前还是穷光蛋一个。当然,你也可以学圈圈这样,写本书出来忽悠忽悠。

    虽然USB这么好用,但是教你如何设计USB设备的书在市面上却是少见,大部分都是对USB协议翻译,只有少量的内容是实际开发的内容和代码。圈圈从2003年年底(大二)开始学习USB,花了约一年的时间(主要是利用课余时间)阅读了一些USB书籍和文档后,才真正开始动手做自己的第一个USB设备:一个基于AT89C52+PDIUSBD12的假U盘。圈圈自认自己资质不差,却让一个小小的USB困扰了这么久,我想除了自己的原因之外,还跟USB协议本身的复杂性和没有一些好的书籍有很大关系。在整个USB学习过程中主要都是靠自己慢慢摸索,走了一些弯路。现在回过头再来看看,如果当初能有一个整体的认识,按照合理的步骤来操作,就不会走这么多弯路了。因此圈圈意识到,迫切需要写一本能让USB初学者少走弯路、快速入门和上手的书籍。圈圈写这本书,是真心地想要更多的人能够学会USB,会开发USB设备。本书并不是对USB协议简单地进行翻译,而是尽量用圈圈自己的语言来进行描述。所以,本书的一大特点就是语言有些口语化,逻辑不是太严密,有些语句也可能存在着错误。但我想这样读起来也许会更轻松些,太严谨、太严密的描述,可能会显得有些乏味。另外,有些地方可能会存在一些重复性描述,主要是想方便理解和加深印象。

    本书通过U盘、USB鼠标、USB键盘、USB MIDI键盘、USB转串口、自定义的USB HID设备和自定义的USB设备等几个具体的USB例子,来介绍USB设备设计的具体流程。提到自定义的USB设备,就不可避免地要提到自己开发USB的驱动程序。本书最后两章简单地介绍了USB WDM驱动的开发,并给出一个简单的USB驱动和一个USB下层过滤驱动的实例。驱动程序开发更深层次的研究不属本书范畴,留给读者自行深究。另外,本书也包括了一些圈圈在USB的学习和实际设计过程中总结的一些电路设计和程序设计的经验及方法,希望能够帮助大家更好地学习和设计USB系统。

    本书主要面向的读者是刚接触USB开发的电子设计人员,需要有一定的电子技术、计算机技术和C语言基础。对于已经熟悉USB的读者意义不大,应以官方的数据手册和文档为主。本书为了让读者快速入门,可能会对一些模型做简化处理,也可能有一些地方是圈圈本身理解偏差或者错误的,当本书与官方的协议和文档不一致或者冲突时,以官方文档为准。

    书中的实例,都是基于圈圈设计的USB学习板之上的。本书附带的光盘中有该学习板的电路图(pdf格式)以及所有实验的完整源代码包,电路图和实验的代码包也可以到圈圈的USB小组或者博客中下载。

    作为一个人或一本书,出错之处在所难免,如果大家发现有错误的地方,请告诉圈圈一声。你可以在圈圈的USB专区里给圈圈留言,也可以去个人博客里留言。圈圈的个人博客地址:http://blog.ednchina.com/computer00/http://computer00.21ic.org。注意是电脑圈圈,是两个数字0,而不是字母O。如果你记不住这些地址也没关系,直接去网上搜索“电脑圈圈的USB专区”或者“电脑圈圈”,也可找到它们。

    在此感谢北京航空航天大学出版社嵌入式系统事业部主任胡晓柏先生对出版本书的关心和支持;感谢同学以及网友对本书的建议和支持;感谢家人对我的支持和理解,尤其是要感谢老婆,为了写书,少了很多陪她的时间,谢谢她的支持、理解和爱;同时也要感谢购买本书的读者——你。

电脑圈圈

2009年1月

于广州

目录
第1章 USB概述及协议基础

1.1 USB是什么1

1.2 USB的特点1

1.3 USB的拓扑结构2

1.4 USB的电气特性5

1.5 USB的线缆、插头及插座6

1.6 USB的插入检测机制8

1.7 USB的描述符及其之间的关系10

1.8 USB设备的枚举过程11

1.9 USB的包结构及传输过程13

1.9.1 USB的包结构及包的分类13

1.9.2 令牌包15

1.9.3 数据包16

1.9.4 握手包17

1.9.5 特殊包17

1.9.6 如何处理数据包18

1.10 USB的四种传输类型19

1.10.1 USB事务19

1.10.2 批量传输19

1.10.3 中断传输21

1.10.4 等时传输22

1.10.5 控制传输22

1.10.6 端点类型与传输类型的关系24

1.10.7 传输类型与端点支持的最大包长24

1.11 本章小结24

第2章 硬件系统设计

2.1 方案及芯片的选定25

2.2 D12引脚功能说明26

2.3 D12与AT89S52的连接30

2.4 串口部分电路32

2.5 按键部分33

2.6 指示灯部分34

2.7 IDE接口部分34

2.8 单片机部分35

2.9 元件安装35

2.10 电路调试38

2.11 测试程序的编写和调试39

2.11.1 建立一个工程40

2.11.2 为工程添加源文件41

2.11.3 KEIL工具栏及仿真介绍43

2.11.4 按键驱动的编写46

2.11.5 串口驱动的编写52

2.11.6 PDIUSBD12读写函数及读ID的实现57

2.12 本章小结62

第3章 USB鼠标的实现

3.1 USB鼠标工程的建立63

3.2 USB的断开与连接63

3.3 USB中断的处理67

3.4 读取从主机发送到端点0的数据68

3.5 USB标准请求75

3.5.1 USB标准设备请求的结构75

3.5.2 GET_DESCRIPTOR请求77

3.5.3 SET_ADDRESS请求78

3.5.4 SET_CONFIGURATION请求78

3.6 设备描述符的实现79

3.7 设备描述符的返回83

3.8 设置地址请求的处理93

3.9 配置描述符集合的结构95

3.9.1 配置描述符的结构95

3.9.2 接口描述符的结构96

3.9.3 端点描述符的结构97

3.9.4 HID描述符的结构98

3.10 配置描述符集合的实现以及返回99

3.11 字符串及语言ID请求的实现103

3.12 设置配置请求的实现109

3.13 报告描述符的结构及实现112

3.14 报告的返回118

3.15 Bus Hound工具的简介122

3.16 本章小结124

第4章 USB键盘的实现

4.1 USB键盘工程的建立125

4.2 设备描述符的实现125

4.3 配置描述符集合的实现126

4.3.1 配置描述符126

4.3.2 接口描述符127

4.3.3 HID描述符127

4.3.4 端点描述符127

4.4 字符串描述符130

4.5 报告描述符130

4.6 输入和输出报告的实现133

4.7 USB键盘实例的测试136

4.8 再谈USB HID的报告描述符138

4.9 带鼠标功能的USB键盘(方法一)140

4.10 带鼠标功能的USB键盘(方法二)146

4.11 多媒体USB键盘154

4.12 本章小结160

第5章 用户自定义的USB HID设备

5.1 MyUsbHid工程的建立161

5.2 描述符的修改161

5.3 报告的实现163

5.4 对用户自定义的USB HID设备的访问165

5.5 访问HID设备时所用到的相关函数166

5.5.1 获取HID设备的接口类GUID的函数166

5.5.2 获取指定类的所有设备信息集合的函数166

5.5.3 从设备信息集合中获取一个设备接口信息的函数167

5.5.4 获取指定设备接口详细信息的函数168

5.5.5 打开设备的函数169

5.5.6 获取HID设备属性的函数170

5.5.7 从设备读取数据的函数170

5.5.8 往设备写数据的函数171

5.5.9 通过控制端点0读取报告的函数171

5.5.10 通过控制端点0发送报告的函数171

5.5.11 关闭句柄的函数172

5.5.12 需要包含的库文件172

5.6 访问USB HID设备的上位机软件的实现172

5.6.1 上位机程序编写的思路172

5.6.2 查找及打开HID设备的代码173

5.6.3 读输入报告线程的代码178

5.6.4 写输出报告的代码(发送LED的状态)181

5.6.5 写输出报告线程的代码183

5.6.6 线程的创建以及设备插拔事件的注册184

5.6.7 对设备状态改变事件的处理186

5.7 软件界面以及使用方法187

5.8 本章小结188

第6章 USB转串口

6.1 串口家族历史189

6.2 串口接头的引脚分布及功能189

6.3 USB转串口的实现方法190

6.4 设备描述符191

6.5 字符串描述符192

6.6 配置描述符集合192

6.6.1 配置描述符193

6.6.2 CDC接口描述符193

6.6.3 类特殊接口描述符——功能描述符193

6.6.4 接口0(CDC接口)的端点描述符196

6.6.5 数据类接口的接口描述符196

6.6.6 接口1(数据类接口)的端点描述符197

6.6.7 修改好描述符后的测试198

6.7 类请求的实现200

6.7.1 GET_LINE_CODING请求200

6.7.2 SERIAL_STATE通知201

6.7.3 SET_CONTROL_LINE_STATE请求202

6.7.4 SET_LINE_CODING请求202

6.7.5 实现类请求后的测试204

6.8 对串口数据的处理205

6.9 安装驱动用的inf文件211

6.10 本章小结214

第7章 USB MIDI键盘

7.1 MIDI简介216

7.2 MIDI的工作原理217

7.3 USB MIDI设备的数据流模型217

7.4 设备描述符218

7.5 配置描述符集合218

7.5.1 配置描述符218

7.5.2 音频控制接口描述符218

7.5.3 类特殊音频控制接口描述符219

7.5.4 MIDI流接口描述符220

7.5.5 类特殊MIDI流接口描述符220

7.5.6 端点描述符和类特殊端点描述符225

7.5.7 字符串描述符227

7.6 修改好描述符后的测试227

7.7 USB MIDI键盘的数据返回228

7.8 USB MIDI键盘的使用230

7.9 单片机自动弹奏的实现232

7.10 本章小结233

第8章 U盘

8.1 USB大容量存储设备234

8.2 设备描述符234

8.3 字符串描述符235

8.4 配置描述符集合235

8.4.1 配置描述符235

8.4.2 接口描述符235

8.4.3 端点描述符236

8.5 测试236

8.6 类特殊请求237

8.6.1 Get Max LUN请求237

8.6.2 Bulk?Only Mass Storage Reset请求238

8.7 仅批量传输协议的数据流模型239

8.7.1 命令块封包CBW的结构239

8.7.2 命令状态封包CSW的结构240

8.7.3 对批量数据的处理240

8.8 SCSI命令集和UFI命令集241

8.8.1 查询命令INQUIRY241

8.8.2 读格式化容量命令READ FORMAT CAPACITIES243

8.8.3 读容量命令READ CAPACITY244

8.8.4 READ(10)命令245

8.8.5 WRITE(10)命令246

8.8.6 REQUEST SENSE命令247

8.8.7 TEST UNIT READY命令248

8.9 FAT文件系统248

8.9.1 关于DBR249

8.9.2 关于FAT表251

8.9.3 关于目录项252

8.10 模拟一个FAT16文件系统253

8.11 实验结果254

8.12 IDE转USB的实现256

8.13 本章小结257

第9章 自定义USB设备及驱动开发

9.1 用户自定义USB设备258

9.1.1 设备描述符258

9.1.2 配置描述符集合258

9.1.3 字符串描述符259

9.1.4 数据的处理259

9.2 驱动程序开发简介259

9.3 WDM驱动开发编程环境的建立259

9.4 创建一个USB WDM驱动程序262

9.5 对工程的编译270

9.6 关于inf文件272

9.7 驱动程序的修改272

9.7.1 Read(KIrp I)函数273

9.7.2 Write(KIrp I)函数276

9.7.3 EP1_READ_Handler(KIrp I)函数277

9.7.4 EP1_WRITE_Handler(KIrp I)函数279

9.7.5 EP2_READ_Handler(KIrp I)函数280

9.7.6 EP2_WRITE_Handler(KIrp I)函数280

9.8 驱动的安装及安装后的信息280

9.9 应用程序对驱动的访问284

9.10 测试软件的使用286

9.11 本章小结287

第10章 USB过滤驱动开发

10.1 过滤驱动简介289

10.2 使用DS创建一个下层过滤驱动290

10.3 过滤驱动代码的修改294

10.4 过滤驱动的安装300

10.5 过滤驱动的卸载302

10.6 驱动程序测试303

10.7 本章小结306

附录 第3章实例的完整调试信息307

参考文献314

后记315
[/td][/tr][/table][/td][/tr][tr][td][/td][/tr][/table]
博客Http://computer00.21ic.org
jordanpz
驱动牛犊
驱动牛犊
  • 注册日期2008-09-08
  • 最后登录2011-05-27
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望372点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-05-13 23:47
早就听说您的大名了,书店能有的话一定要买的
jordanpz
驱动牛犊
驱动牛犊
  • 注册日期2008-09-08
  • 最后登录2011-05-27
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望372点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-05-13 23:48
不要太贵哦。最好先去拿版权
hungerlee
驱动牛犊
驱动牛犊
  • 注册日期2007-07-11
  • 最后登录2009-11-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-06-03 22:54
看目录貌似不错,准备入手中。。。。。。
游客

返回顶部