圈圈教你玩USB
圈圈教你玩USB PDF版本,本人靠它完成了USB鼠标的学习,该书对USB的枚举过程和通信过程都有不错的讲解,是USB入门和实践的不错教材第2版前言wIN7下多点触摸屏功能的实现。而第12章和第13章,是考虑到很多朋友反映说书中所选的芯片太古老了,而且还要外加控制器,因此就专门增加了将代码移植到其它平台(分别是AVR和ARM7)的这两章内容。第14章的内容是在移植到ARM7到平台后进行的一些扩展,例如USB声卡的实现真U盘的实现等等。希望再版后的书对您更有帮助!非常感谢胡编不停地督促,没有胡编的给力和支持,就不会有《圈圈教你玩USB》,也更谈不上再版了。当然,光有还是不够的,还要卖得好,推广得好,这就要靠c/广大读者们的支持了,圈对此再次表示感谢!谢!圈圈2012年12月于广州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的驱c动程序,本书最后两章简单地介绍了 USB WDM驱动的开发,并给出一个简单的OUSB驱动和一个USB下层过滤驱动的实例。驱动程序开发更深层次的研究不属本·书范畴,留给读者自行深究。另外,本书也包括了一些圈圈在USB的学习和实际设计过程中总结的一些电路设计和程序设计的经验及方法,希望能够帮助大家更好地学习和设计USB系统。本书主要面向的读者是刚接触USB开发的电子设计人员,需要有一定的电子技术、计算机技术和C语言基础。对于已经熟悉USB的读者意义不大,应以官方的数2据手册和文档为主。本书为了让读者快速入门,可能会对一些模型做简化处理,也可能有一些地方是圈圈本身理解偏差或者错误的,当本书与官方的协议和文档不一致或者冲突时,以官方文档为准。书中的实例,都是基于圈圈设计的USB学习板之上的。本书附带的光盘中有该学习板的电路图(pdf格式)以及所有实验的完整源代码包,电路图和实验的代码包也可以到圈圈的USB小组或者博客中下载作为一个人或一本书,出错之处在所难免,如果大家发现有错误的地方,请告诉圈圈一声。你可以在圈圈的USB专区里给圈圈留言,也可以去个人博客里留言。圈圈的个人博客地址http://blog.ednchina.com/computer00/或http://computer00.2lic.org。注意是电脑圈圈,是两个数字0,而不是字母O。如果你记不住这些地址也没关系,直接去网上搜索“电脑圈圈的USB专区”或者“电脑圈圈”,也可找到它们在此感谢北京航空航天大学出版社嵌入式系统事业部主任胡晓柏先生对出版本书的关心和支持;感谢同学以及网友对本书的建议和支持;感谢家人对我的支持和理解,尤其是要感谢老婆,为了写书,少了很多陪她的时间,谢谢她的支持、理解和爱;同时也要感谢购买本书的读者—你电脑圈圈2009年1月于广州目录第1章USB概述及协议基础非主111.1USB是什么……++tt日a1a4.·+t+::a日中41.2USB的特点…量里1和国4中品请和_想道面福·曹日品日·排1.3USB的拓扑结构1.4USB的电气特性……普里重日a+“+中1.5USB的线缆、插头及插座…申·日4鲁日+拼分tmm如重上新1.6USB的插人检测机制………81.7USB的描述符及其之间的关系1.8USB设备的枚举过程…tt:日a44,日日日4日;;++“+中“*·"+··::1.9USB的包结构及传输过程………···图1串新++普··里·131.9.1USB的包结构及包的分类…131.9.2令牌包……………151.9.3数据包甲+:“·甲主“主…161.9.4握手包土a144,+,+11171.9.5特殊包………………………171.9.6如何处理数据包…………11a4“““4中+++++++……81.10USB的四种传输类型…………………………191.10.1USB事务191.10.2批量传输…191.10.3中断传输…211.10.4等时传输…二干栅世目康目丰率请,,由中,中,面221.10.5控制传输231.10.6端点类型与传输类型的关系………………………231.10.7传输类型与端点支持的最大包长241.11本章小结24目录第2章硬件系统设计……………………………………………………252.1方案及芯片的选定…………………………………252.2D12引脚功能说明…2:26酸2.3D2与AT8952的连接…“,…302.4串口部分电路……………………………………………………322.5按键部分………………………………………………………………………342.6指示灯部分…………………342.7IDE接口部分……………………352.8单片机部分352.9元件安装…………………………………1:::11:352.10电路调试……………………::11:111382.11测试程序的编写和调试…392.11.1建立一个工程2.11.2为工程添加源文件……412.11.3KEIL工具栏及仿真介绍432.11.4按键驱动的编写…………………………………………………462.11.5串口驱动的编写……522.11.6 PDIUSBD12读写函数及读ID的实现……………………………572.12本章小结61第3章USB鼠标的实现……623.1USB鼠标工程的建立…口国国国新国单623.2USB的断开与连接…::623.3USB中断的处理…………663.4读取从主机发送到端点0的数据………………………………673.5USB标准请求…………………………………………………………743.5.1USB标准设备请求的结构………………………………743.5.2 GET DESCRIPTOR请求………1763.5.3 SET ADDRESS请求………773.5.4 SET CONFIGURATION请求…783.6设备描述符的实现783.7设备描述符的返回………………………………………………823.8设置地址请求的处理……………………………1923.9配置描述符集合的结构……………………………………“…943.9.1配置描述符的结构………94目录3.9.2接口描述符的结构……………………………………………………953.9.3端点描述符的结构……………………………………………………963.9.4HID描述符的结构………963.10配置描述符集合的实现以及返回生度日道主B11B11日14a+“+973.11字符串及语言I请求的实现1013.12设置配置请求的实现…1073.13报告描述符的结构及实现1103.14报告的返回…1163.15 Bus hound工具的简介1203.16本章小结……………………………………………………122第4章USB键盘的实现1234.1USB键盘工程的建立版1234.2设备描述符的实现…1234.3配置描述符集合的实现1244.3.1配置描述符………1254.3.2接口描述符………………………………………………………1254.3.3HID描述符…………………::1254.3.4端点描述符+“+“……*…==…==:=+==*++#+++++++s1254.4字符串描述符…………1284.5报告描述符…1284.6输人和输出报告的实现1314.7USB键盘实例的测试…………1344.8再谈 USB HID的报告描述符…………………………………………1364.9带鼠标功能的USB键盘(方法一)……………1384.10带鼠标功能的USB键盘(方法二)4.11多媒体USB键盘…·售1524.12本章小结……………………………………………………………157第5章用户自定义的 USB HID设备…………………………………………1585.1 MyUsb Hid工程的建立………………………………………………………1585.2描述符的修改……………………1585.3报告的实现……1605.4对用户自定义的 USB HID设备的访问……………………………………1625.5访问HID设备时所用到的相关函数……1635.5.1获取HID设备的接口类GUID的函数……………………………163目录5.5.2获取指定类的所有设备信息集合的函数………………………1635.5.3从设备信息集合中获取一个设备接口信息的函数…………………1645.5.4·获取指定设备接口详细信息的函数………………………………1655.5.5打开设备的函数1665.5.6获取HID设备属性的函数…rE面非未日非丰非甲市日丰日丰167你5.5.7从设备读取数据的函数……………………………………………1675.5.8往设备写数据的函数…………1685.5.9通过控制端点0读取报告的函数…………………………1685.5.10通过控制端点0发送报告的函数………………………………1685.5.11关闭句柄的函数……………………………………………1695.5.12需要包含的库文件…1695.6访问 USB HID设备的上位机软件的实现国1国园罐169版5.6.1上位机程序编写的思路1695,6.2查找及打开HID设备的代码…………………1705.6.3读输入报告线程的代码…1755.6.4写输出报告的代码(发送LED的状态)………………1785.6.5写输出报告线程的代码………………………………………1805.6.6线程的创建以及设备插拔事件的注册…………………………1815.6.7对设备状态改变事件的处理……1825.7软件界面以及使用方法……1835.8本章小结…………………………………………………………184第6章USB转串口……11856.1串口家族历史………………1856.2串口接头的引脚分布及功能……1856.3USB转串口的实现方法…1866.4设备描述符………11876.5字符串描述符………1886.6配置描述符集合………1896.6.1配置描述符……………1896.6.2CDC接口描述符……………………………………………………1896.6.3类特殊接口描述符——功能描述符l906.6.4接口0(CDC接口)的端点描述符…………………………1926.6.5数据类接口的接口描述符……………““““”…“”“““““M、“和1926.6.6接口1(数据类接口)的端点描述符…1936.6.7修改好描述符后的测试……194目录6.7类请求的实现1966.7.1 GET LINE CODING请求…--1966.7.2 SERIAL_ STATE通知1976.7.3 SET CONTROL LINE STATE请求1986.7.4 SET LINE CODING请求1986.7.5实现类请求后的测试2006.8对串口数据的处理……2016.9安装驱动用的inf文件…2076.10本章小结………………………………………………………………210第7章 USB MIDI键盘2117.1MIDI简介211第2版7.2MIDI的工作原理…:::2127.3 USB MIDI设备的数据流模型……2127.4设备描述符………………………………2137.5配置描述符集合……2137.5.1配置描述符重重·虚重曹……:2137.5.2音频控制接口描述符曹由丰,自11日BB丰算国1日日日品2137.5.3类特殊音频控制接口描述符……:………….2147.5.4MIDI流接口描述符…2147.5.5类特殊MIDI流接口描述符………………………………………2157.5.6端点描述符和类特殊端点描述符……………………………………2197.5.7字符串描述符………………………………………………………2217.6修改好描述符后的测试2217.7 USB MIDI键盘的数据返回2227.8 USB MIDI键盘的使用…2257.9单片机自动弹奏的实现…2277.10本章小结…………………………………………………………227第8章U盘…2288.1USB大容量存储设备……12288.2设备描述符…2288.3字符串描述符…2298.4配置描述符集合……………………………11112298.4.1·配置描述符aa=54a4s44temttmittttBiti2298.4.2接口描述符…………………………………………229
用户评论