当前位置: 代码迷 >> 嵌入开发 >> arm的零地址的困惑!
  详细解决方案

arm的零地址的困惑!

热度:1484   发布时间:2013-02-26 00:00:00.0
arm的0地址的困惑!!!!!!!!!
1、为什么nandflash的0地址为0x100 0000?

2、那么0x0000 0000又是什么?

3、0x0000 0000这个0地址与flash的0地址什么关系?

4、为什么flash的0地址不是0x0000 0000?

5、SMDK2410#tftp 30008000 ppcboot.bin

     SMDK2410# fl 1000000 30008000 20000

  既然把boatloader烧写在1000000这个位置,那么0~1000000这些地方存的是什么呢?


------解决方案--------------------------------------------------------
你先把arm存储器映射那一章先看看吧,看完你就多少明白点了
------解决方案--------------------------------------------------------
楼主可能没理解好ARM

1.ARM是以32位地址来对各种设备器件控制的。

比如这样:
0x0000 0000 这个是Boot的位置
0x1000 0000 这个是ARM外接Nor Flash的位置
0x2000 0000 这个是LCD的位置
0x3000 0000 这个是...的位置
...... .... ..............
就是这样,如果我要控制显示器去显示某东西,就是控制0x2000 0000的位置。

2.ARM启动时候,最先运行 0x0000 0000地址,0x0000 0000这个地址一般是ARM片内的ROM。

3.0什么关系?没什么关系,就是个地址而已,比如公路长100KM,最开始是0KM,后面是1KM,2KM这样。

4.Nand Flash需要驱动的,0x0000 0000不可能直接就指向Nand Flash。

5.没存什么,说了只是个地址而已。记得Flash分Nor Flash和Nand Flash。不同的ARM芯片有些是不同的。
有些用Nor Flash有些用RAM。
------解决方案--------------------------------------------------------
让我给你说吧,

CPU芯片上电复位的时候,有一个reset中断。上电第一个执行的代码就是reset中断中的处理程序。

reset中断程序要存放在哪里,完全和CPU是相关的。做这个CPU的厂家假定它要放在某个地址Addr上,那么后面做硬件和软件的时候,都要保证这个Addr上存放的是reset中断处理程序。否则CPU找不到这个中断处理程序,就会跑飞掉。

对于ARM家的芯片,恰巧,这个reset中断的地址就是0x00000000。所以在0x0000000的地方,一定是非易失存储器(ROM或者Flash)中存放的reset中断处理程序入口代码。

一旦代码起来,就可以从其他的地方把程序搬到内存RAM中去执行。比如你说的Nand Flash存在0x100000,它里面的代码和数据都可以被读出来放到RAM中。
  相关解决方案