Chinaunix首页 | 论坛 | 博客
  • 博客访问: 582105
  • 博文数量: 199
  • 博客积分: 5087
  • 博客等级: 大校
  • 技术积分: 2165
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 21:53
文章存档

2010年(199)

我的朋友

分类: 嵌入式

2010-03-25 11:54:37

 

       datasheet中当REMAP=0,BMS=0时由外部总线扩展的存储器启动可以是norflash。当REMAP=0,BMS=1时从内部ROM启动,这里启动过程内部ROM->spi扩展的dataflash1-〉spi扩展的dataflash2-〉nandflash-〉SAM-BA...这是由芯片内部的boot决定的查询程序的顺序,例如我们只接一个nandflash,当我们编写的程序小于等于4k时可以不用bootstrap,因为不管怎么样芯片内部的boot功能为按顺序检测到存储器前4k并加载到内部4kSRAM中大小不能超出4k,所以我们的代码量小于等于4k时无需bootstrap,直接把它烧到NANDflash的0地址。当代码大于4k时,需要bootstarp,注bootstarp不能大于4k,把它烧到nandflash的0地址,他的功能是把你要的真正的程序加载到你外接的SDRAM中,因内部SRAM 4k,所以烧目标程序从0x4000开始烧,得到的整个过程是片内boot检测到nandflah前4k(包含了bootsharp)加载到SRAM中运行,bootstarp运行把nandflash中4k后的真正程序加载到SDRAM中运行,如装linux这个可以是u-boot。总结此ARM9芯片一般有内部boot,bootstarp和u-boot之类加载操作系统的boot三种boot。bootstarp最重要的功能是初始化SDRAM并加载大点的boot或其他程序。

转自:

为什么重映射?

REMAP,顾名思义就是存储器的重新映射,即某些存储器的地址又发生了变化。我就很不理解了,这地址本来就不好记,还变来变去的,麻不麻烦呀,学51的时候咋就没这玩意呢?后来查了些资料,有些明白了,51是8位机,更重要的是51的主频不高,8位的ROM或Flash足够匹配51的主频,不用插入等待指令,所以程序直接在ROM或Flash中跑影响不到系统的速度。而ARM就不同了,ARM是32位机,但是Flash一般是8位或16位,32位的也有吧,好像价格很高。而且ARM的主频很高,动辄上百M,所以Flash的工艺达不到这个速度。如果程序跑在Flash中就要插入过多的等待指令,所以会影响ARM的性能。而RAM一般存取速度比较快,很容易构成32位,可以与高速的ARM匹配。更重要的是ARM上电后必须从0x0地址处取得指令,因此上电后必须将ROM或Flash映射位0X0地址处,当时还产生了一个弱智的想法,既然RAM这么好,为啥还要ROM或Flash,直接将程序下载到RAM中不就得了,后来才猛地想到RAM是易失型存储器,掉电后啥也没了,再上电后0X0处啥都没有。而且还有一条,ARM的中断向量表,既存放各个中断入口地址的地方,一般放在0x0处,即ROM或Flash中,为了加快中断响应速度,也应该将0X0映射到RAM中去。因此,ARM一般从ROM或Flash启动完成初始化,然后将应用程序拷贝到RAM,然后跳到RAM执行。

阅读(1329) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~