题记:其实早就想学习USB了,可是开端的时分因为根底差点,看到USB那么多繁复的上电复位啊枚举啊还有那么多的包啊,头很大没有一点思路。所以其时仅仅看看材料翻翻周建功的《PDIUSBD12 USB固件编程与驱动开发》做个了解,并没有深化。可是正如圈圈的USB小组里说的,现在的电子工程师不明白USB可不行,所以决计从头着手USB的进阶了。其实我曾经的51试验板和MSP430的板子上面都有USB的这一块电路,只可惜试验程序写得不行针对,所以看起来很费力,也提不起我的爱好。现在有圈圈的板子,我想那么多有针对性而且完好的程序在等着,岂有学不会之理!
我的第一篇USB日志从硬件下手,至于根本的一些概念当然是要先了解的,可是我认为学习应该以实践为主,以练带学,从中不断堆集。所以,在了解了一些根本的USB的概念和PDIUSBD12芯片今后,应该着手实践了。其实假如你不是做USB的芯片开发,关于那一大堆理论也不是有必要彻底体会的,我也是带着似懂非懂的状况来操控PDIUSBD12的,关于它的一些寄存器的操控是要点,把握了这个根本算是入了门,至于其它的一些时序上的读写操作什么的我想关于有根底的人不是难点。
先来看一下PDIUSBD12的引脚装备和引脚分配:
圈圈的原理图我就不贴了(欠好截图,有点乱,呵呵~~)。D0-D7口接单片机的P0口,因为试验中不运用DMA传输,所以与DMA传输有关的DMREQ,DMACK_N,EOT_N几个引脚被悬空或许接地了。CLKOUT,VOUT3.3和SUSPEND三个引脚因为不运用就悬空或许接地了。GL_N接一个电阻和LED指示灯用于指示通讯状况,INT_N接单片机的一个中断口,D+和D-两个差分信号是接规范USB接口的,XTAL1和XTAL2之直接16MHz的晶振,别的VCC,GND自不必说。最终来看下几个能够有不同接法的引脚:ALE,RD_N,WR_N,CS_N,其实这几个引脚的不同接法是普遍性的,也便是说你能够把这几个脚接成单片机时序操控数据地址的读写操作,也能够把PDIUSBD12的寄存器接成单片机的外部RAM,这样对寄存器的寻址就和RAM相同了,能够免除杂乱的时序操作。而咱们看到圈圈的电路里选用了前者,也便是用时序来读写D12的寄存器,因而它的电路接法是:把ALE接地,CS_N接地(片选有用),WR_N,RD_N接单片机的专用读写口P3.6和P3.7(选用时序读写操作这两个口其实不必定非得接这两个口,接其它任何的IO口也行),所以在程序里边咱们会看到有专门的D12寄存器读写子程序。
咱们再来讨论一下后者的接法完成,如图:
这种接法是把D12的ALE脚与单片机的ALE脚相接,这是专用的外部RAM扩展,具体的阐明(包含RAM扩展接法的寻址和读写)在CAN学习笔记的硬件部分有介绍了。
以上两种寄存器读写方法都是很有代表性的,无所谓谁好谁坏,依据个人习气吧。其实在RAM寻址空间答应的情况下选用后者仍是比较便利的。可是圈圈选用了前者,那么在今后的程序中都以此为根底进行编程。
上面剖析了D12的各个管脚的分配情况,有些脚还有必要接必定的电阻,如差分信号D+和D-就有必要在接1K的电阻后接VCC或许GND。USB规范接口的四个信号口,中心两个便是接差分信号的,而边上两个便是电源信号(从计算机接出的+5V,有时我们在设计时往往使用这个5V做体系电源)。
硬件电路剖析到这儿大约能对D12有一个开始的把握了,下一步就应该去了解一下D12内部的一些寄存器以及这些寄存器在不同的装备状况下都能完成什么样作业。