本书将着重讲解如何编写、设计一个USB外设并使之与PC通信所需的代码。本书分析透彻,易于理解,是一本关于USB的不可多得的技术参考书籍。它不仅对初学者有帮助,而且对熟练掌握USB的高级技术人员也受益匪浅。本书共分十九章,每一章针对一个核心问题进行阐述。\r\n\r\n 本书适合于所有从事计算机软硬件开发工程师、技术人员使用。\r\n
\r\n
本书简介 \r\n\r\n 第1章 新手上路 \r\n\r\n USB能做什么 \r\n\r\n 它还不完善 \r\n\r\n 第2章 USB是否适台我的工程 \r\n\r\n 快速参考 \r\n\r\n 开发过程 \r\n\r\n 第3章 进入USB传输阶段 \r\n\r\n 传输基础 \r\n\r\n 一个传输的元素 \r\n\r\n 设备终端 \r\n\r\n 确保传输是成功的 \r\n\r\n 第4章 各种用途的传输类型 \r\n\r\n 控制传输 \r\n\r\n 批量传输 \r\n\r\n 中断传输 \r\n\r\n 等时传输 \r\n\r\n 第5章 列举:主机是怎么知道设备的过程 \r\n\r\n 关于描述符 \r\n\r\n 第6章 控制传输:关键数据的结构化请求 \r\n\r\n 一个控制传输的要素 \r\n\r\n 11种标准请求 \r\n\r\n 其他控制请求 \r\n\r\n 第7章 芯片选择 \r\n\r\n 一个USB控制器的要素 \r\n\r\n 简化开发过程 \r\n\r\n 一些芯片的扫描 \r\n\r\n 第8章 进入一个USB控制器内部:Cypress CY7C63001 \r\n\r\n 选择一个芯片 \r\n\r\n 进入这个芯片 \r\n\r\n 第9章 写固件:CypressCY7C63001 \r\n\r\n 汇编器 \r\n\r\n 如果你更喜欢C语言 \r\n\r\n 硬件开发工具 \r\n\r\n 第10章 主机如何通信 \r\n\r\n 设备驱动基础 \r\n\r\n Win32驱动模式 \r\n\r\n 选择一个驱动类型 \r\n\r\n 写一个自定义驱动 \r\n\r\n 第11章 Windows如何选择驱动 \r\n\r\n 过程 \r\n\r\n INF文件的内部 \r\n\r\n 第12章 人机接口设备:固件基础 \r\n\r\n 什么是HID? \r\n\r\n 怎样识别一个设备为肥 \r\n\r\n 肋特定请求 \r\n\r\n 传输数据 \r\n\r\n 第13章 人机接口设备:报告 \r\n\r\n 报告结构 \r\n\r\n 主程序行类型 \r\n\r\n 全局行类型 \r\n\r\n 局部行类型 \r\n\r\n 第14章 人机接口设备:主机应用程序 \r\n\r\n 主机通信概述 \r\n\r\n 从Visual Basic中调用API函数 \r\n\r\n 查找设备 \r\n\r\n 读写数据 \r\n\r\n 关闭通信 \r\n\r\n 第15章设备测试 \r\n\r\n USBChek \r\n\r\n 协议分析器 \r\n\r\n 开发者论坛资源 \r\n\r\n 第16章 集线器:设备和主机之间的连接 \r\n\r\n 集线器基础 \r\n\r\n 集线器类 \r\n\r\n 第17章 管理电源 \r\n\r\n 电源选项 \r\n\r\n 集线器电源 \r\n\r\n 节省电能 \r\n\r\n 第18章 电接口 \r\n\r\n 信号电压 \r\n\r\n 电缆 \r\n\r\n 确保信号质量 \r\n\r\n 第19章 信号和编码 \r\n\r\n 总线状态 \r\n\r\n 数据编码 \r\n\r\n 包格式 \r\n\r\n 附录A \r\n\r\n 附录B CypressCY7C63001寄存器 \r\n
\r\n
把USB的优点用列你的设计中
通用串行总线被设计为从底层来给计算机外设提供一个单机. 易于使用的接口. 但用户易于使用的代价给开发者设计和编写USB设备程序增加了复杂性.
在这本手册中, Jan指出了USB设计的难点, 并给以下所有的问题都提供了答案:
我的工程可以使用VSB接口吗?
我的设计应该使用哪个外设控制器芯片7
我如何从VB应用程序访问USB外设?
我的外设需要什么固件代码才能与PC通信7
我的设计可以使用总线电源, 还是需要它自己的电源?
还有传输类型. 人机接口设备(HID)的接口. USB信号和编码, 还有更多!
“很多书的内容是很容易找到的, 有很多你必须自己去研究的难点. 我真正喜欢这本书的原因是Jan很显然已经认真研究过这些难点了. ”
Dave Wright
人事应用工程师
Cypress半导体公司
“我告诉所有我的学生, 他们的图书馆的确需要这本书. ”
Pau1E. Berg, 讲师 Annabooks USB Developers Workshop
“《HSB大全》这本书给任何与USB打交道的开发者提供了很好的基础, 不管是设计外设或创建主机软件. 任何刚开始使用USB的工作人员都应该读这本书. ”
Joshua Buergel BlueWater Systems
Jan Axelson是《并口大全》. 《串口大全》. 《The Microcontroller Idea Book》和《Making Printed Circuit Boards》等书的作者. PC杂志的Bill Machrone描述Jan的作品为“简捷明了的楷模. ”
我写的应用程序如何访问USB外设?
为USB外设设计硬件需要考虑什么?
这是在过去几年中我在电子邮件中经常被问到的两个问题. 每一个新的贮都有一些USB端口. 通用串行总线(UniverSal Serial Bus), 即USB, 是一种快速的灵活的连接各种外设的接口, 但是关于设计和访问USB外设的实践经验还很少.
我前面的两本书《并行接口大全》和《串行接口大全》讲述了如何使用PC机的原始端口, 因此, USB很自然地成为下一本书的主题.
当我开始研究USB究竟是什么时, 我首先学到的事情之一是USB的设计是基于易于使用出发的, 不用手工配置, 不用运行扩展槽或中断线. 而且, USB适合除最快速外的所有外设. 与主设备只有一个接口, 与任何外设类型没有区别, 总之, USB是很好的.
但是随着我对USB外设设计和通信涉及的问题研究的越深入, 另外一些问题变得越来越明显:用户希望降价, 但这却增加了开发者的复杂度. 接口本身比以前的接口更复杂, 因为它是新的, 而且文档不全, 或不普遍.
然而, 有两件事情很清楚:
USB会成功的, 因为计算机和外设生产厂商都支持它. 所有PC都带有USB端口, 外设厂商把USB端口集成在他们的产品上.
程序员在寻求一种简单的途径以与USB外设进行通信. 如果用户不需要经过很长的学习过程就可以使用USB的话, 那么开发者己准备利用它开发大小项目.
因此我开始探索USB外设的设计与运行涉及的问题. 我发现真的有可能不需要写设备驱动程序就可以设计USB设备并与之通信. 这本书讲述的就是我所学到的内容.
我不想说USB是一块蛋糕, 它不是. 这种接口的复杂性, 加上它是新事物和Windows操作系统对它的支持问题都将给你带来巨大的挑战, 而不管你有什么知识背景. 通过阅读这本书, 你可以利用我学到的这些内容, 少犯一些错误并且少走一些弯路.
这本书面向的读者是谁?
如果你想知道如何设计USB外设, 那这本书适合你;或者如果你想知道应用程序是如何与USB外设通信的, 这本书也是合适你的, 这本书回答了以下一些问题:
USB是什么, 外设如何用它和PC通信?USB接口有很多知识需要学习. 最初的学习过程会很困惑. 通过把一些主题拆分成块并说明他们是如何配合工作的, 从而使得它尽可能地简单. 我没有忽略细节. 虽然当你从底层开始设计时, 细节是关键的.
如何确定我的项目中是否要用USB接口?也许你的设计根本不适合USB, 我会告诉你如何决定是否用它. 如果答案是肯定的, 我会帮助你决定选用哪种速度和传输类型的USB.
如何为我的外设设计选择USB控制芯片?有几十种控制芯片供USB外设使用, 我会比较一些通用的芯片系列, 然后根据你的工程的需要和你自己的知识背景. 喜好等方面来帮助你做出决定.
如何利用VB程序与USB外设通信?要和USB外设通信, 贮需要两样东西:一个是知道如何与PC的USB驱动通信的设备驱动程序, 另一个是知道如何与设备驱动程序对话的应用程序. 一些外设可以利用Windows自带的驱动程序, 其他的则可能需要利用派生驱动程序或需要一种自定义驱动程序. 这本书将指导你何时采用Windows自带的驱动程序, 以及如何利用这些驱动程序从佃程序接收和发送数据. 你也可以从本书中找到在写设备驱动程序过程中需要注意什么, 以及什么工具可以帮助你加快处理速度.
USB外设与Windows软件通信时需要什么代码?USB外设需要程序代码, 这些代码可以便它们能与PC通信. 我还讲述了如何编写代码, 以便Windows能识别设备并调用合适的设备驱动程序, 还有与软件交换数据所需要的代码. 本书中的例子采用的Cypress半导体公司的CY7C63000系列控制器, 这是最简单的一种.
如何决定我的外设是否能用总线电源或者是否需要自己提供电源?USB的一大优点是很多外设完全可以从总线获得电源. 应找出如何保证你的设计可利用这个特点的内容.
为了理解本书的内容, 最后是需要你具有一些领域的基础知识. 我假设你在数字逻辑. PC软件编程和为外设写嵌入代码方面有一些经验. 你根本不需要知道任何有关USB的知识.
这本书真的很全吗?
虽然这本书名字为USB大全, 但请不要期望这本书包含USB所有的内容. 那是很庞大的. 题目中的“大全”代表这本书指导你从对USB一无所知到能编写与设计一个USB外设并使之与PC通信所需的代码.
有很多其他有价值的与USB相关的主题, 但由于时间和空间的限制, 我不能讲述所有这些内容.
我的重点在于与Win 98PC的通信上. 本书的大部分内容也适用Windows 2000. 虽然基本原理是一样的, 但我没讲述如何与苹果机(Macintosh)或一个运行Linux. DOS或Windows NT的PC通信.
这本书覆盖了设备驱动程序的基本任务及写驱动程序中涉及的内容, 但是这些细节就可以很容易写成一本书(并且事实上有些很厚的书是关于这个主题的). 我不是描述如何从零开始写设备驱动程序, 而是指导你如何利用现有的驱动程序, 包括那些Windows提供的以及你的设备提供的东西.
我的例子采用VB, 虽然它和其他语言相似, 但这本书不包括C. C++. PERL或其他语言的例子, 但我尽量用足够的注释, 使你可以很容易地转化为其他语言.
你如何学会所有的内容?
关于技术方面的书如USB是由专家编写的, 这些人的工作就是开发把技术引入生活的芯片和软件, 或者写那些定义技术本身的白皮书的. 这些书能提供有价值的内部信息. 缺点是作者对这门技术的研究已经很深入了, 他们会发现很难记住初学者需要知道什么.
我是带着接口和微控制器方面的背景知识来学习USB的, 对USB知道得很少. 我的重点是寻找实现USB通信的快速简单的途径. 我研究了从每一个能找到的供应商那里能找到的每一个产品, 然后抽取一些最好的写出来. 我还花费了相当多的时间来学习USB.
更正和更新
尽管我尽了最大的努力, 但根据经验我知道还会有错误出现. 当这些错误被发现时, 我会记录错误, 然后做一个列表放在Lakeview Research的网站上, 网址是http://www.lvr.com. 如果你在书中发现错误, 请给我写信, 我的电子邮件地址是jan@1vr. com, 我会把它添加到这个列表中去的. 在这个网址上, 你还可以找到这本书出版时还没有提供的更新和代码例子, 以及到其他厂商. 信息和工具的链接.
致谢
USB太复杂了, 以至于没有帮助是不能掌握它的. 我要感谢很多人. 我非常感谢我的技术评论员, 他们耐心地阅读了我那粗糙不堪的草稿并提供了反馈意见, 这些意见大大地提高了本书的质量(补充一句, 本书中任何一个错误都是我的, 我一个人的).
首先也是最重要的是PEB咨询公司的Paul E. Berg, 他多次阅读我的草稿, 发现并指出了从头到尾许多错误, 提供了很多技巧和观点, 并且从一开始就给我鼓励和支持.
其他每一位评论员都从独特的角度提供了宝贵的意见和鼓励. 我感谢:
B1ueWater系统公司的Joshua Bueregl;
Micron技术公司的GaryCrowell,
DaveDowler ;
B&B E1ectronics的Mike Fahrion和其他工程师:
John M. Gookman. 《Hard Disk secrets》. 《Peter Norton’s Inside the PC》. 《Memery Management for All of Us》和其他一些书的作者,
Cypress半导体公司的Lane Hauck. BijanKamaran和Dave Wright;
JohnHyde, HSB的权威, 《USBDesign by Example》的作者,
1Zero1技术公司的Da4d Janes,
HighTechHorizon的Christer Johansson,
Intel公司的Kosta Koeman,
J. GordornElectronic Design公司的Robert Severson,
福特电机公司R&VT部的Craig R. Smith.
我也要感谢其他一些在我研究和写作中给与帮助的人, 他们是:Walter Banks of Byte Craft Jason Bock ;INDesign LLC的BrdMarsohniDhn:Cyyess半导体公司的PebFo1g. Joseph McCarthy和Don Parkman; Belkin Components的Tawnee McMullen, PowerBasic的Dave Navarro以及QualityLogic and Founder American Concepts Consulting的USB产品销售经理 Amar Rajan.
我希望这本书对你有用. 欢迎批评指正!
Jan Axelson
jan@lvr.com