原创 混乱的数据总线

2011-4-6 23:40 3252 7 11 分类: PCB

        在我学会基本的电子设计技术之后,曾经做过一个小项目。那个项目中,用到了DM642芯片作为整个系统的主处理器芯片。并且需要为主处理器扩展外部的SDRAM存储器。当时也只是刚刚学会电子设计的基本技术,因此遇到一个课题第一反应还是去找几个参考设计。于是就找到了好几个参考设计,其中有TI原厂EVM开发板的原理图,合众达DM642开发板的原理图,还有闻亭公司DM642开发板的原理图。虽说当时还没摆脱一拿到课题就想找参考设计的习惯,但好在对于参考设计我一直坚持完全看懂并理解了之后再去有选择的参考,绝不会拿来就用。这点在之前的项目设计中可是让我从中受益匪浅,帮助我一次又一次地避开了一些公司有意无意留在参考设计中的一些陷阱。当然,在中国,这些公司为了生存迫不得已,在我看来也无可厚非。同时,这些陷阱的存在对于我们这些设计者而言也是一个警醒,让我们可以时刻提醒自己:拿来主义在电子设计中是行不通的,不要为了图一时的省事而给自己带来无尽的麻烦,甚至是以整个方案的失败为代价。


        本着理解参考设计,然后有选择地参考的原则。我仔细研究了下这几个比较大的厂商的原理图。首先看的是国内的两个厂商,闻亭和合众达公司的参考设计。在看到DM642与外部扩展的SDRAM芯片的数据总线连接的时候发现了一些问题。之前做的一些项目用到的处理器芯片数据总线的位数都比较少,最多32位的。而DM642虽然处理器内核实际为32位的,但因为支持双字操作,所以对外的数据总线接口为64位。当时看闻亭和合众达公司的参考设计时,发现DM642与外部存储器的数据总线的连接十分混乱,并不是按照DM642的数据总线从低位到高位与SDRAM芯片的数据总线从低位到高位的顺序对应的。第一反应是难道与大小端有关,于是又仔细看了下数据线的对应关系,发现也不是低位对应高位的顺序。于是会心地一笑,心想“好家伙,果然在这等着我呢~这么大的俩公司也这么不地道。”于是转而去研究TI官方EVM开发板的原理图,因为一般来说国外的大厂商是不会“不小心”在自己的参考设计中留下这样的陷阱的。但看过TI的原理图之后我就迷茫了,因为官方原理图中DM642的数据总线与SDRAM数据总线的对应关系如下图所示,其中TED[63:0]为DM642从高位到低位的数据总线,DQ[31:0]为SDRAM芯片从高位到低位的数据总线,从图中可以很清楚地看到,对应关系十分混乱。


6bd198b1-38eb-49ce-bc3a-e607b600bc49.jpg78837c40-6bfb-43f7-85c9-a6df6721ebda.jpg


        当时我真的是一点想法都没有了,虽然有时候可能会比较自恋,但我也知道官方的参考设计应该不会犯这种低级的错误。但仍然百思不得其解。直到晚上从一个抽屉里拿东西的时候突然豁然开朗,大呼一声“原来如此啊”!其实原理非常简单,就是不管我是把一个编号为0的东西存放在哪个抽屉里,假设存放在编号为F的抽屉里,只要我想取0东西的时候依然是从F抽屉里去取就对了。也就是只要存和取的操作对象是同一个单元就可以了。这样回到上面途中的数据总线对应关系也就能理解了,TED[m]对应任何的DQ[n]都是可以的,m不必等于n,因为只要由TED[m]存入到DQ[n]的数据仍然是从DQ[n]取出就对了。


        到这里就解决了为什么可以这么做的问题。但是,为什么要这样做呢?仔细想想其实也不难理解,做过将处理器的通用IO口引出到扩展接口排针的PCB的同学,或者做过FPGA和CPLD的PCB设计的同学就会知道,我们在PCB走线时,为了减少过孔,减少走线长度,同时使走线更为美观,通常会在PCB设计时修正原理图中的引脚对应关系。这里做数据线序的改变也正是为了方便PCB走线。这一猜想后来也从TI的官方FAQ得到了验证。


        想明白了这个问题,当时那个兴奋啊,后来恰好验证了一句话叫做乐极生悲。因为学会了这么好的技巧,当然要迫不及待的秀一下啦。于是乎便在这块电路板的PCB设计中用到了这一技巧。并且SDRAM的调试过程也非常顺利,再次证明了这个技巧是可行的。但在调试NOR FLASH和以太网芯片的时候悲剧就发生了,由DM642向NOR FLASH写入命令字和向以太网芯片的寄存器写入正确的值之后都不能正常工作。郁闷了一阵,实在没招了,只能再从原理图检查整个设计。看到NOR FLASH和以太网芯片与DM642的数据线连接时我不禁有一种想拍自己的冲动。原来当时利用上述技巧走SDRAM的数据线,爽完后居然直接将数据线以混乱的线序给接到NOR FLASH和以太网芯片上了,这就直接导致了悲剧的发生。因为对于SDRAM而言,是不需要DM642单向地给它写入命令字,或者配置寄存器的,SDRAM本身不会使用DM642存入SDRAM中的数据,因此对于DM642来说只要存入的与读出的数据一样就没有问题。而NOR FLASH则需要由DM642向其写入命令字,然后FLASH芯片本身去判断这些命令字并给出相应,这样一来,DM642经混乱的数据线送到FLASH芯片的命令字对于FLASH芯片而言就成了无法理解的“天书”,自然也就不会有正确的响应,更别提正常工作了。以太网芯片需要对其内部寄存器进行配置,因此道理是一样的。找到问题后,解决问题还是比较简单的,只要在程序中按照实际的数据线序将数据的各位做下调整,然后再送到FLASH和以太网芯片就可以了。


        之后,我总结了下使用这个技巧的条件,那就是当一个芯片中的数据只对一个主处理器芯片有用,而不会对该芯片自己和其它处理器产生影响时,为了PCB走线的方便,这个处理器与该芯片间的数据总线可以乱序相接,其他情况下一律不可以。这句话可能理解起来比较绕,或者简单点说,目前我只在SDRAM和DDR SDRAM,DDR2 SDRAM与处理器间数据总线的连接中用过。但是在DDR SDRAM和DDR2 SDRAM的应用中需要注意,只有在同一个字节内的各位数据线序是可以互换的。


 

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户1614939 2016-4-20 21:31

所谓的“程序在SDRAM中运行”,其实只是将SDRAM作为CPU的外部cache而已,真正的运算操作是从SDRAM中取出数据到片上cache,运算在cpu片内进行。

用户264140 2015-8-30 17:10

请问一下,如果程序再SDRAM中运行,那么存进去的数据,就不对了。还怎么运行?

用户377235 2012-3-8 11:48

学习了,最近也在为混乱的数据总线犯迷糊呢,看了后理解了!谢谢

patton016_154811562 2011-7-6 21:45

学了一招!感谢分享~
相关推荐阅读
用户1614939 2011-11-02 08:53
谁动了我的博客?!!
进入EDNChina,且不论改版后的首页有多么混乱,就说说博客板块。首先是积分低的**直接不能进去自己博客,然后是以前作为激励的博客精华不复存在,最让人不能忍受的是本人博客里的图片全都看不见了,这...
用户1614939 2011-04-17 18:44
RGB565转VGA接口设计与匹配问题浅析
RGB565转VGA接口设计与匹配问题浅析        最近所做的工作涉及到RGB565信号到VGA接口的转换问题,于是简单地研究了一下VGA接口设计相关的东西,写的有点长,可能大家看起来会比较累,...
用户1614939 2011-04-05 22:38
开博随笔
    转眼,我已进入了“三八”的行列,而不再是“二八年华”的青葱少年。前几天,在做项目的时候遇见一个问题,明明记得以前曾经遇到过类似的问题,却是怎样也记不起来当时是怎么解决的了。不禁再次让人感慨岁月...
我要评论
4
7
关闭 站长推荐上一条 /3 下一条