Arm可以引出27根地址线,只能实现128MB的寻址,那么要如何实现1GB的寻址呢?答案就是使用nGCS片选线,nGCSx为低电平为选中相应的外接设备。一共八根片选线,也就是bank1,bank2…以此来实现1GB的寻址。
2440为32位,理论上的寻址范围为4GB,除了这1GB,其他的没有使用。
2440的寄存器范围都处于0x48000000-0x5fffffff之间。
下图是分别从nor flash启动和nand flash启动时地址的映射。
从nor flash启动的时候,程序写入地址零处,从地址零处启动。
从nand flash启动的时候,硬件会将nand flash头4K的数据拷贝到“stepping stone”处。然后从地址0处开始执行。Nand flash是不参与寻址的。
在sdram中执行程序:可以在使用头4K的数据把整体程序拷贝到sdram中,然后再跳转到sdram中。当然这需要在链接器脚本中设置运行地址为0x30000000,然后再使用绝对地址跳转,就可跳转到内存中了。
但是,我们有时候会发现,链接器脚本中设置的地址是多大不是很重要,不论是0x00000000还是0x30000000都能正常执行。那是因为有些程序的执行过程和地址没多大关系,比如他们没有绝对地址跳转等等。正常来说,如果我们想让他们在“stepping stone”中执行,链接器脚本中的地址应设置为0x00000000,如果我们想让他们在内存中执行,应该把链接器脚本地址设置为0x30000000,然后利用“stepping stone”跳转。