微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 我学习USB设计的历程

我学习USB设计的历程

时间:12-14 来源:互联网 点击:
最初想学习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做过于严实的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top