现在的位置: 首页 > 综合 > 正文

ARM 为什么地址线要偏移一位接

2013年10月08日 ⁄ 综合 ⁄ 共 1204字 ⁄ 字号 评论关闭

以前在某些书上看到过,某些RAM、nor flash推荐的接法是地址线偏移一位,即cpu的a1接到芯片的a0,不是一一对应。今天上课终于搞懂了

原来就是因为这类RAM、nor flash是16位的
一般在我们c语言软件编程的概念,一个地址对应的数据是一个byte,8位
即32根地址线,能够访问4G的地址空间,每个空间是8bits=1byte
所以32位cpu总共能够管理4GByte的数据,而不是4Gbit的数据
这种情况下,cpu的地址线跟芯片地址线一一对应没有问题

现在,这种RAM、nor flash是16位的,即一个地址能够存放16bits的数据
也就是说,芯片的a0的0、1变化,就是16bits的变化,不是一般的8bits的变化了
此时,cpu的地址线里,只有a1是16bits变化这个数量级的,所以相同数量级的引脚连接,自然要偏移一位


如图所示的是FS2410上SST39VF的原理图,CE#接的是nGsc0,即该芯片的地址空间为
0x0-0x100000
这样,
U16 a=*(char *)0x0

U16 b=*(char *)0x1
就没有区别了,所以编程要牢记最小16bits为单位,地址保证2byte对其,即最低位置零


这是SDRAM的连接图,ADDR2接的是SDRAM芯片的A0,偏了2位
所以arm编程强调的4字节对齐,不仅仅是指令集上的关系,连硬件上都限制死了

以前在某些书上看到过,某些RAM、nor flash推荐的接法是地址线偏移一位,即cpu的a1接到芯片的a0,不是一一对应。今天上课终于搞懂了

原来就是因为这类RAM、nor flash是16位的
一般在我们c语言软件编程的概念,一个地址对应的数据是一个byte,8位
即32根地址线,能够访问4G的地址空间,每个空间是8bits=1byte
所以32位cpu总共能够管理4GByte的数据,而不是4Gbit的数据
这种情况下,cpu的地址线跟芯片地址线一一对应没有问题

现在,这种RAM、nor flash是16位的,即一个地址能够存放16bits的数据
也就是说,芯片的a0的0、1变化,就是16bits的变化,不是一般的8bits的变化了
此时,cpu的地址线里,只有a1是16bits变化这个数量级的,所以相同数量级的引脚连接,自然要偏移一位


如图所示的是FS2410上SST39VF的原理图,CE#接的是nGsc0,即该芯片的地址空间为
0x0-0x100000
这样,
U16 a=*(char *)0x0

U16 b=*(char *)0x1
就没有区别了,所以编程要牢记最小16bits为单位,地址保证2byte对其,即最低位置零


这是SDRAM的连接图,ADDR2接的是SDRAM芯片的A0,偏了2位
所以arm编程强调的4字节对齐,不仅仅是指令集上的关系,连硬件上都限制死了

抱歉!评论已关闭.