对于嵌入式的学习,网上已经有很多关于开发工具使用,开发环境搭建,内核及BOOTLOADER移植的文章了,但是关于硬件设计方向的文章却很少。究其原因,估计是国内大多数厂家只是照搬三星公司的开发板而只进行了进行了一定的裁剪。自己并没有创新能力。
关于硬件接口电路的设计,有微机原理和接口设计方面的书,虽然多是基于8086来说的,不过基本原理应该相差不远。建议想搞这类的DX们看一看。
这两天都在看开发板的原理图,细细琢磨了一下有个地方想不通,就是SDRAM和CPU的地址接口,为什么不是对齐的,于是乎到网上GOOGLE了一遍,还找同学问了下,终于搞了个半通
呵呵写这里高手可是要见笑了,莫怪!本人只是一介刚学嵌入式的菜鸟,写下这些东西也权当是学习笔记,若对其他新人有所帮助可谓是最大的安慰了,若有不对的地方还请大家指正
呵呵闲话不说了,开始说正经的。
如图所示,是把两片SDRAM并联起来构成32位的数据总线,而地址总线上CPU的A2接到了SDRAM的A0上面,这样接是因为采用32位的数据总线决定的,若采用16位的数据总线那么就要把CPU的A1和SDRAM的A0接起来了。
因为在SDRAM等其他很多类型的储存器中,数据是按照字节来存放的,也就是8位数据存放在一个地址里面,比如:
地址 数据
0000 A
0001 B
0010 C
0011 D
0100 E
地址是连续的,A,B,C,D,E都是8位的数据,当访问地址0000的时候,D0~D8 的数据线上就会出现“A”若正好是8位位宽的SDRAM的话正好一个地址对应一字节的数据,那么CPU只要输出连续的地址就可以访问数据了,也即CPU输出0000将访问0地址得到A数据,访问0001将得到B数据,那么就不存在地址的偏移,只要把CPU的A0和SDRAM的A0接起来,其他位对应接起来就可以访问了。
但如果SDRAM位16位数据位宽并设定CPU为16位的位宽的话,CPU和SDRAM就有16根数据线是接在一起的,那么CPU的一次地址访问将得到16位数据,也就是两个字节,那么0000和0001的数据就一起送出去了,当CPU访问0000时和访问0001时得到的数据是一样的,所以相对的在CPU看来数据存放的地址应该是半字的,即0000处有个数据,0010处有个数据,这就是为什么要把CPU的A1接到SDRAM的A0上的道理。只要设定CPU的数据总线位宽位16位,那么CPU应该就是进行半字的访问了。