前言 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.**/computer00/或http://computer00.21ic.org。注意是电脑圈圈,是两个零,而不是字母欧。如果你记不住这些地址也没关系,直接去网上搜索搜索“电脑圈圈的USB专区”或者“电脑圈圈”,即可找到它们。 在此感谢北航出版社编辑部主任胡晓伯先生对出本书的邀请和支持;感谢同学以及网友对本书的建议和支持;感谢家人对我的支持和理解,尤其是要感谢老婆,为了写书,少了很多陪她的时间,谢谢她的支持、理解和爱;同时也要感谢购买本书的读者——你。 电脑圈圈 2008年6月18日 广州
|