Chinaunix首页 | 论坛 | 博客
  • 博客访问: 714054
  • 博文数量: 96
  • 博客积分: 2110
  • 博客等级: 大尉
  • 技术积分: 1018
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-23 19:36
文章分类

全部博文(96)

文章存档

2013年(2)

2012年(17)

2011年(77)

分类: LINUX

2011-02-24 13:15:04

这个博客貌似很专业,多看看
 

《ARM Linux入门与实践》作者说他面试过一些自称arm经验丰富的研究生,却不知道上电之后的启动地址
这个问题还是现在就解决了吧
首先说说地址空间的分配
s3c2440是32位的,所以可以寻址4GB空间,内存(SDRAM)和端口(特殊寄存器),还有ROM都映射到同一个4G空间里,很容易混淆概念。开发板上一般都用flash(nor、nand)来当做ROM。其中nand flash还没有地址线,一次至少要读一页(512B).
从datasheet里摘一段
总共有8个内存banks
6个内存bank可以当作ROM或者SRAM来使用
留下的2个bank除了当作ROM 或者SRAM,还可以用SDRAM(各种内存的读写方式不一样)
7个bank的起始地址是固定的
还有一个灵活的bank的内存地址,并且bank大小也可以改变


前置知识就这么多,s3c2440支持两种启动模式:NAND和非NAND(这里是nor flash)。
具体采用的方式取决于OM0、OM1两个引脚

OM[1:0所决定的启动方式

OM[10]=00时,处理器从NAND Flash启动

OM[10]=01时,处理器从16位宽度的ROM启动

OM[10]=10时,处理器从32位宽度的ROM启动。

OM[10]=11时,处理器从Test Mode启动。


当从NAND启动时,如图,cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间,即0x00000000。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。

当从非NAND flash启动时,如图,0x00000000就是nGCS0片选中的那片nor flash(也可以是E2PROM)。
这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000.

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