DBAu1200 Development Board Boot Flash 地址释疑

//========================================================================
//TITLE:
//    DBAu1200 Development Board Boot Flash 地址释疑
//AUTHOR:
//    norains
//DATE:
//    Wednesday  16-April-2008
//Environment:
//    PB 5.0 + DB1200 BSP
//========================================================================
    看过我这篇《小议DBAU1200 Development Board的Boot Flash》的朋友,可能对BOOT FLASH的地址还有所疑惑。该文说道,BOOT FLASH的地址(含PARAMETER FLASH)的地址为0x1C000000~0x1FFFFFFF,那么这个地址是如何定义的呢?
   
    这个地址可以在“$Platform/Db1200/Inc/db1200.h”中找到:
   
    // FLASH on RCE0
    //
    #define FLASH_BASE                 0x1C000000
    #define FLASH_SIZE                 0x04000000
    #define BOOT_VECTOR_OFFSET         0x1fc00000 - FLASH_BASE
   
    Base地址为0x1C000000,Flash的大小为0x04000000,两者相加等于0x1FFFFFFF,恰好为flash的TOP地址。
   
    虽然我们知道定义是在该文件,但对于为何定义为此地址,现在我们还是不明了。所以,我们要查看AU1200的文档,发现对于物理地址有如下列表(如图):
    
    我们很明确可以看出,0x0 18000000 ~ 0x0 1FFFFFFF为定义的专门用来作为BOOT ROM的地址。而解释中明确指出,BOOT ROM的地址一定要包含boot vector,也就是说要包含0x1fc00000。因此,对于DBAU1200 Development Board来说,BASE地址的确定是采用如下方式:0x1FFFFFFF - 0x04000000 + 1 = 0x1C000000。因为以0为起始,所以其后需要再加1。
   
    对于DBAU1200 Development Board BOOT FLASH的地址取值已经很明白了,现在另一个疑惑又来了:仔细查看该列表,会发现 0x0 20000000 ~ 0x0 7FFFFFFF段也可以作为memory mapped,为何文档中要将其与0x0 18000000 ~ 0x0 1FFFFFFF这段分开呢?其实问题很简单,不过这又要涉及到MIPS处理器的机构。我们知道,MIPS处理器的KSEG0和KSEG1所能映射的物理地址范围为512M,而这个范围基数则刚好是:0x 00000000 ~ 0x0 1FFFFFFF,而这正好落在文档中介绍的BOOT FLASH范围。换句话说,通过KSEG0和KSEG1所能访问的物理地址只处于0x 00000000 ~ 0x0 1FFFFFFF范围段,其余只能通过MMU机制。细心的朋友可能已经猜到,如果我们的BOOT FLASH大于128M,比如说为1G,那么我们通过KSEG0或KSEG1只能访问到最前面的128M,至于剩下的容量则是无计可施。这也是为何文档会将同样都能做memory mapped的空间划分为两段的缘故。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值