原创 我学习USB设计的历程[转载]

2006-12-31 08:46 3238 5 8 分类: 通信

我学习USB设计的历程








  -献给即将学习USB和对此感兴趣的朋友


作者:duoduo


http://www.ifelec.com



    最初想学习USB的原因在于当时非常非常想有一台通用编程器,商用的编程器虽然功能好,但是价格昂贵,仅仅为了编程几种芯片就去买一个似乎很可惜(我现在已经买了编程器了:))。于是想自己做一个很简单的,用串口?并口?一想到要加个又大又笨的外置电源就不喜欢,用USB,不错,有总线供电,这点很吸引人,就是当时我对USB一窍不通,那就找资料看看吧。


    当时USB技术刚刚兴起,USB器件在电子市场上还是很少见,在网上逛了很多天,最后决定用Philips公司的PDIUSBD12作为USB控制器,主要原因是Philips提供的技术文档比较详细。看了Philips公司的相关资料,似乎硬件电路并不难,于是自己画了原理图,检查了N遍,应该没问题了,然后制PCB,初步硬件调试,一切都很顺利。接下来就是考虑软件怎么写。一提到软件,这下头大了。看了几天PDIUSBD12的数据手册,天啊,这么多稀奇古怪的寄存器都是些什么呀,见鬼。看来不了解USB的协议根本就无法去对PDIUSBD12进行程序设计。于是只好去翻USB1.1规范,那可是200多页的英文哪,又不是74系列的手册那样几个参数一看就OK了,好在我的专业英语还不算太差,硬着头皮看吧。当时看了近一个月,简直象进了迷宫一样,根本搞不清东西南北。当时书店关于USB的书只有一本国防科大的USB总线接口开发指南,买回来回来仔细一看,天,简直是英文USB1.1规范的中文简化版,有些英文的术语一翻译过来怎么着看都不舒服,而且省略了很多部分,一样看的不得其门而入,于是扔掉了书(冤枉国防科大的这本书了,后来讲USB的书满天飞,我都翻过,不敢说它们都是垃圾,但是我认为国大的书的编者言语之间对USB确实还是了解很深的,其他大多数书的编者/译者,有的竟然能把pullup resistor of collector翻译成“向上电阻收集器”,嘿嘿,我就不多说了),继续研究E文。当时另外一个朋友在我的极力鼓吹下也跟我一起没日没夜热情高涨地研究了很多天,可惜后来没有修成正果:)。当时身边虽然博士教授们一大堆,可是没有人研究过USB,只好装上猎狗的鼻子,去网上四处搜索,倒是有一些线索,可是没有很有用的。


    这时一个网友给了我一份传说是Philips的C51固件代码,我大喜过望,兴冲冲编译一下,天,无数的Error。硬着头皮去改,发现源文件残缺不全,注释也非常的少,一点点地自己摸索着把代码补上来,这期间我把代码和USB规范结合着看,模模糊糊有些明白了,就这样磕磕绊绊地又搞了一个月,熬了无数通宵,程序终于编译通过了。当我颤抖着手把我的板插上USB电缆的时候,奇迹竟然出现了,硬盘一阵狂响之后,Windows赫然蹦出一个发现新硬件的对话筐。My God!我成功了也!!欢喜还没过去,装上Philips的驱动程序,想看看我的板上的开关呀、灯呀的动一动,这才发现我的硬件和Philips的不完全一样,所以和Philips的应用程序不能完全兼容,虽然驱动装上了,板子上的灯啊、开关呀却无法控制。看来得改改程序了。

    这一改程序才知道自己现在对USB协议不过仅仅是略懂了一些皮毛,当按照自己的理解去做了修改以后,PC根本就不能正确识别出我的设备。然后我明白,没有真正理解USB协议,就不会真正地写出自己的程序,更谈不上开发USB接口产品。好在这一段时间的摸索得到了一些经验,对USB也有了一些基本正确的认识,精神上受到了一些鼓舞,于是我继续研究USB E文规范。一个月过去了,又一个月过去了,我感觉虽然理解了很多了,但是有些关键的地方仍然没有真正透彻理解,似乎只差薄薄的一层半透明的纸了,只要稍稍有人点拨一下就能顿悟了,可惜仙人没有出现,因此我的程序始终存在问题,此时我真的有些绝望了,USB开发暂时搁置。

    不久我到一家公司从事USB方面的工作,接触到了一种SOC的USB程序设计。生存的压力使我不得不努力去克服对USB通讯的心理恐惧,仔细研读USB协议,此时USB的相关资料也渐渐丰富了,并且现在手边有了逻辑分析仪、高档示波器等设备,我甚至用逻辑分析仪仔细捕捉过USB通讯的协议实现的物理过程,也用Verilog HDL写过USB host的行为仿真模型提供给FPGA系统模拟。两个月以后,我终于对USB的理解有了质的飞跃,对USB传输数据流过程已经很熟悉,对那片SOC,我可以仅用不到600字节的代码使PC发现新硬件。


    后来我捡起从前的那块PDIUSBD12 USB板,按照自己对USB的理解完全重新做了程序设计,这次非常顺利,完成PC主机对USB设备的枚举过程已经是轻松的事情了。但是要完全完成一个USB设备的设计,这只是走过了第一个阶段,下一个艰苦的过程则是驱动程序的设计,没有驱动程序,用PC软件控制USB设备根本就是天方夜谈。最初我用Windriver做了硬件诊断,一切都OK之后,可以选择用Windriver生成一个驱动程序和测试台应用程序,但是Windriver的驱动程序安装方法让我觉得很别扭,我认为一个可以商用级的USB设备不应该采用这种方法。另外,Windriver502版本似乎和Xilinx的ISE6.1软件冲突,ISE安装过程经常蓝屏,而且这个版本的Windriver在Win2K SP3以上系统中安装必定会导致系统黑屏。另外有一个近于专业级的驱动程序开发工具DriverStudio,我看过一段时间,感觉它外表和Windows DDK完全不同,但是实际上它并没有把DDK做过于严实的封装,处处可以看到DDK的影子,掌握DriverStudio其实也同样需要对DDK有较多的理解。我选择了Windows DDK作为驱动设计工具,虽然我还没有计划做一个专业级的驱动程序设计者,但是在这方面多做一些深入的理解决没有坏处。DDK有很多驱动程序的例子,其中有一个bulkusb的例子,仔细看过之后,其实把它修改一下就可以变成自己设备的驱动,这也正是Microsoft推荐驱动设计者开发设备驱动程序的方法。DDK确实过于博大精深,我想,能够达到自己的设备驱动可以正常工作这个目的就可以了,没有必要搞清楚驱动程序设计中的每一个细节。当时我也曾经花了很大的力气才终于达到这个目的,其中的艰难到读者自己去经历的时候就能够体会了(你可能会把Microsoft号称非常稳定的Win2K整的死去活来:))。好,现在是最后一个阶段了:设计应用程序。这个应该是整个设计中最轻松的阶段了,通过驱动程序控制硬件设备,VC++是很好的工具,当然这个并不是每个人都必然的选择。当写完最后一句代码,运行程序,看到设备在鼠标键盘点动之间随心所欲受你的控制的时候,那种令人飘然的成就感真的是难以形容。


    现在,带USB接口的器件很多了,而且有很多已经是USB2.0 High speed设备了。我有幸见识了许多USB器件的应用,感觉不论是USB full speed还是High speed,也不管这个器件到底只是一个USB控制器还是复杂的SOC,USB通讯部分其实大家都是大同小异的。现在USB OTG技术经过几年有些沉默的发展之后终于柳暗花明,开发USB OTG设备应该是USB通讯技术下一阶段的热点。其间还曾出现了一类USB Host器件,算是弥补USB1.1和USB OTG之间暂时的空白吧。


    也许我悟性太差,学习USB的历程真的是非常艰难,还有许多朋友也许会有和我一样的痛苦,我把自己的USB学习经历写出来,希望能够给后来者一些有益的启示,同时也希望能够给大家一些鼓舞:再大的困难,只要肯努力,也是能够克服的;USB通讯完全不同RS232,要能够硬着头皮看E文,要有懂USB的朋友指点,要有很好的参考代码,要自己肯动脑筋去思考,要有强烈的兴趣和恒心,这样的话,即使时间稍长一点,最终你也是能掌握USB的。


    我不希望我的经历让想学习USB的朋友感到恐怖,在你学习USB之前,先要给自己定一个将要达到的标准:如果你希望自己能够完全掌握USB通讯技术,达到能够设计USB physical和SIE部分的水平,那麽这就是USB硬件设计的至高境界了,不过只有IC设计公司集中若干人力花费若干年时间投入若干经费才能够做得了的。如果你想掌握硬固件编程、驱动程序设计,那么你需要准备吃点苦;如果你不需要关心USB通讯的具体过程,只是固件应用中和底层简单的进行数据交换,或者是PC应用程序设计,呵呵,恭喜了,你会发现USB通讯其实很简单。


 


Oct 20,2004

文章评论3条评论)

登录后参与讨论

xucun915_925777961 2010-12-27 14:27

来学习一下,谢谢!^_^

用户159301 2008-7-25 17:27

挺真实的,哈哈!我正在学习中,希望以后可以向你请教。

用户101516 2007-8-27 13:20

我也是在学习usb受阻的情况下无奈的上网找一线生机。
我的毕设是usb otg 控制器的设计,现在为止还没有一丝进展,我快被折磨得崩溃了,希望lz 可以给些建议!

computer00 2007-7-22 19:57

写得很好, 我将它转载到我的USB专区中去.

来加入我的USB专区吧http://group.ednchina.com/93/

讨论和学习USB的空间。现在USB技术已经很流行了,就像以前的串口一样。以前的电子工程师不会搞串口通信就落伍了,而现在的电子工程师如果不会搞USB通信,那就落伍了。电子工程师门,还等什么,赶紧加入小组来学习USB吧……

 

 

相关推荐阅读
用户1480039 2010-01-07 09:31
转-烟草工作人员爆出惊天秘密,大家都戒烟吧
谁都知道香烟是有害的,可是大多数人只是知道烟的危害只是烟草的尼古丁,其实,真正的香烟的剧毒,藏在“过滤嘴材料”上。以下我所说的,绝对是真实的:一个在烟草生产行业的朋友,最近向我透露被他们烟草行业隐瞒了...
用户1480039 2010-01-04 14:22
做到你就成熟了
1、遇到不想回答的问题,直视对方的眼睛,微笑、沉默。2、走路抬起头挺直腰,心情不好时,不想跟人招呼,点头微笑,径直走过。3、请记得,好朋友的定义是:你混的好,他打心眼里为你开心;你混的不好,他由衷的为...
用户1480039 2009-12-30 10:24
修身养性100条
1、别人给倒水时,不要干看着,要用手扶扶,以示礼貌。2、别人对你说话,你起码要能接话,不能人家说了上句,你没了下句,或者一味是“啊啊”、“是是”。3、有人盯着你看的时候不要直视对方,可以假装没注意到。...
用户1480039 2009-12-29 10:20
单片机教程:逻辑运算类指令
对累加器A的逻辑操作:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />CLR A ;...
用户1480039 2009-12-29 10:14
分享一下:老爷们看完别哭``什么是老婆``
这天,白云酒楼里来了两位客人,一男一女,四十岁上下,穿着不俗,男的还拎着一个旅行包,看样子是一对出来旅游的夫妻. ­  服务员笑吟吟地送上菜单.男的接过菜单直接递女的,说:"你点吧,想吃什么点什么."...
用户1480039 2009-12-28 10:59
风 与 微 云-----摘自《罗兰散文》
。。。。。。而现在,我也化作了这个春天,如此地无忧,如此地不羁,像我短短的头发,那么不会附着在任何外力下的飘飞着,不被胶在一起的那么各自分散着,被风吹起的感觉是这样的飘潇与透澈。我说,就让自己这么游离...
我要评论
3
5
关闭 站长推荐上一条 /2 下一条