经过半年多的学习,自己做的DM643板子样机总算出来了,今天有时间,用流水帐记录一下,,,,
项目主要是做一个视频测量设备,之前外包某位牛人用2440开发,项目以流产结束,木办法,重担就压在了菜鸟偶的肩上,当然对刚毕业的偶也是一个难得的学习机会,,,,,因为需要显示要求比较高,并且需要复杂的OSD功能,所以偶选择了DM643平台,之所以没有用比较流行的DM642是因为开发板是从合众达买的,而合众达的DM642开发板没有OSD功能,TI的又太贵,加之我们并没有多路视频的要求,所以,,,
四月初拿到开发板,当时偶对DSP是纯白薄啊(当然现在也很菜拉),之前只是玩过51和ARM7而已。于是恶补啊,买了几本书《DSP原理及开发应用》(支长义等编,主要讲C54X的),《DSP嵌入式应用系统开发典型实例》(李显等编,主要讲6000系列的),还有就是两本TI文档的中译本(english比较菜哦):《TI DSP/BIOS用户手册与驱动开发》,《TI DSP集成化开发环境(CCS)使用手册》,关于买书,自从工作后,偶是从不吝啬的,总觉得,花几十块钱买本书,在实际工作中就算是能解决一个问题,也值了^_^
其实书买了不少,大多数并没有细看,当然菜鸟觉得也没这个必要,只捡自己感兴趣的看看,其它的工作中遇到问题时再翻书查就OK了,,,就这样粗略的学习之后,就开始玩开发板了,先按照使用手册把例程运行一遍,对硬件及CCS环境有个大概了解之后,就修改例程写自己的应用程序了,这一写就到了9月初(中间画SCH等用了一个多月),因为当时自己做的PCB刚回来,还没调通,就在开发板上做了一个样机拿到深圳光博会参展了,,,,,程序比较大,具体的代码细节这里就略了,下面主要记一些硬件调试过程,,,,,
在四月中旬出项目进程表的时候,和老大商量好先做板子再搞软件,所以当时就暂停玩开发板了,转而参考开发板作自己的原理图。关于LAYOUT方面,我以前只有两层板经验,加上当时赶时间计划在光博会之前把样机拿出来,所以外包给深圳一位老哥(55555,又丧失一次学习LAYOUT的机会)。做原理图偶大概花了一个月时间出了第一个版本,然后就联系IC经销商买器件做封装啊什么的,加上与深圳那位老哥的不断沟通修改,PCB到我手里的时间已经是8月底了,当时软件上还有一些问题要解决,所以用自己的PCB调试做样机已经不太可能了,干脆仍在那里,光博会回来才开始调试,,,,,
光博会归来,开始调试,PCB为8层板,硬件结构为DM643+FPGA+CPLD+ARM7。
1)BGA焊接:DM643是548脚的BGA封装,间距为0.8mm,所以焊接必须外包了,费了好大劲,才从网上查到一家南京的BGA焊接公司,联系之,那位哥们也挺热情,于是就100元/片焊了两片(本来PCB,器件都是按3套备的,但SEED当时就剩两片卖了,汗,,,)
2)BGA焊好拿回来后就开始焊电源,这里值得一提的是,象这种比较复杂点的板子,最好是一个模块一个模块焊上去,焊好一个模块,检查运行是否正确,然后再焊下一个模块,这样出了问题(不出问题几乎是不可能的)好查点,否则如果一次焊了很多器件,出了问题会把人给搞死的,后面遇到的种种问题更验证了我这种想法的正确性。1.8V和3.3v都是用的TPS54310,先焊1.8v的(因为DM643要求内核要先于外围上电),网上有很多文章讲这个IC的,主要是需要几个LOW-ESR的电容,还有就是反馈电阻需要精密的,焊好之后才发现电感封装做小了(因为以前从没用过DC/DC器件,没考虑到电感的电流),没办法,1.8v用了两个并联,3.3v用了四个并联;LOW-ESR电容偶幸运的买到了,不关心,主要就是那两个决定输出电压的反馈电阻了,datasheet上建议用1%的精密电阻,偶没买,实际上就是买到精密电阻,也不一定是合适的,因为公式是VO=0.891 + (R5 x 0.891)/R4 决定的,所以不太容易配置这两个电阻,偶的建议是随便先弄一个10K的电阻作为R5或R4,然后找一个可调电阻作为另一个慢慢调,当然要注意电压一定要从低往高调。
1.8v调好之后,有了经验,3.3V就好调了。值得注意的一件事是,PCB上只有DM643芯片的时候,1.8V和3.3V与GND之间的电阻都是几十欧姆,当焊上电源芯片之后,都成2-3欧姆了,1.8V的电阻在这个范围内我还不太奇怪(datasheet上标称core的工作电流为800多mA),但3.3v就不行了,与论坛上别人的差的比较大,,,,不过,TPS54310性能到不错,电压还算稳定,就是DM643有点发烫,实在找不到原因,就先凑合用了,后来发现两个reserve脚的3.3v和1.8v电压由于疏忽接反了(汗~~~),现在3.3V电阻小且DM643发烫的原因暂定在这里,以后改版再验证,好在是reserve脚,要是其他电源脚,那立马需要改板了,,,,,
3)电源搞定之后,就可以连接仿真器进行IO操作了,我开始时把两片SDRAM也焊上了,其实没这个必要,例程为seed的,功能是利用GPIO14使LED闪烁,仿真器能够连上,但每次LOAD PROGRAM后总是提示“can't set breakpoint at 0x******”,这个问题搞了n天,把配置脚改一下,不行,CMD改一下,还是不行,把GEL通看一遍,试着改几个地方,依旧不行,,,最后实在没办法,就开始怀疑硬件了,静下心来仔细想想,这个IO操作是在仿真环境下运行的,除了与DM643有关,没有其他什么影响因素了,而仿真器也已经提醒DM643连接良好,那么是坏片的可能性也很小了,唯一的可能性就是BGA焊接出了问题,这期间也在网上看到有人遇到类似情况,也是BGA焊接不良造成的。于是赶忙重新焊接一块,上电一仿真,先前的问题没有了,板子上的LED闪烁拉,高兴!!!!(nnd,看来BGA焊接不可靠哦~~)。 这里还有一件事情不得不提一下,我们知道,1.8v和3.3v电源上都有很多滤波电容,特别是有很多0.1uf的,我是在验证LED能够闪烁之后才焊上这些电容的,0402封装的,全部在BGA正背面,焊上之后,重新上电,3.3v不正常,被拉到2v一下,54310很烫,用万用表量一下,发现3.3v与GND之间的电阻由原来的2欧姆多变成0点几欧姆了,典型的短路,赶紧把刚焊上的滤波电容焊掉,然后再量又到2欧姆多了,电压也正常了,然后再把这些0402的电容焊上才OK!0402啊,累啊,55555~这里其实我们又看到了一个模块一个模块焊接并验证正确性的好处了,假如我一股脑焊了很多器件上去,然后发现短路了,那就惨了,大家都知道,短路特别是电源短路是电路调试中比较难查的现象,有时候会累死人的,而通过这个板子的调试我发现滤波电容短路发生的概率是很高的(包括电容本身质量问题短路和焊接不小心短路)。
4)在3)中已经可以验证DM643没有问题,BGA焊接也没有问题了,下面就焊接两片SDRAM,SDRAM挂在EMIF上,而EMIF是需要时钟驱动的,原理图设计是25MHZ有源晶振经过PLL芯片ICS512倍频到133MHZ的,问题又出现了ICS512没有输出,因为ICS512是一个非常简单的8pin IC,所以偶很快断定是假货(上网查查买到ICS512假货的还真不少),说到假货,后面还有遇到,并且还与IC经销商之间的争执,,,没办法,改配置脚,先用内置时钟驱动EMIF,配置为600/6 = 100MHZ。然后运行SDRAM读写例程,老天保佑,OK!