Q考吧

【UBOOT启动分析】基于MPC8572DS NOR和NAND

       大家都知道NOR Flash最大的优点是它基于内存映射并支持随机访问,有专门的数据线/地址线;而NAND Flash没有专门的地址线,它是通过类似IO的接口来间接访问,这种间接访问的方式是通过发送相应的命令操作内部命令和地址寄存器来完成的。例如,一个完整的读操作包括:下发‘READ'命令至command寄存器,下发操作地址至address寄存器,以及根据status寄存器判断完成的结果,最后从data寄存器中读出相应的值。       MPC8572单板是基于eLBC总线来管理Flash类似外设,它提供了三种编程控制器:GPCM、FCM以及UPM控制器。其中GPCM主要是针对低速,基于内存映射的外设,如NOR Flash;FCM控制器主要针对NAND Flash,提供8位数据位宽来操作该接口。
  1. 注意:MPC8572DS单板跳线设置如下:从NOR Flash启动:SW3[5-8] = 1110SW9[1-2] = 00从NAND Flash启动:SW3[5-8] = 1010SW9[1-2] = 10Note: 1 表示开,0表示关
复制代码
  • 系统启动地址转译
       MPC8572DS是基于e500的核(两个e500的核),系统上电复位后,其MMU(TLB1 Entry0)默认定义了一个4K page的映射0x0_FFFF_Fnnn。e500每个核默认情况下执行第一条指令的有效地址为 0x0_FFFF_FFFC。下图详细的描述系统上电第一条指令执行过程中地址转译的流程。
  1. 注意:1. SW3、SW9跳线决定系统BOOT ROM Location是从NOR Flash上还是从NAND Flash上执行;2. base address (BRn[BA])和 address mask(ORn[AM])在系统上复位时为0,意味着eLBC总线上的地址覆盖范围为整个4G的窗口。
复制代码
  • 系统执行处理
       * NOR Flash启动流程       MPC8572DS通过GPCM来管理NOR Flash启动流程。在GPCM工作时,MPC8572E映射的默认boot ROM address大小为8Mbytes,地址范围为:0x0_FF80_0000 to 0x0_FFFF_FFFF,这是可直接访问的NOR Flash的地址范围。U-BOOT在处理从NOR Flash启动时(第一条指令地址为:0x0_FFFF_FFFC),第一条指令地址为一个跳转命令,如下:
  1. file: cpu/mpc85xx/resetvec.S
复制代码
      U-BOOT通过链接脚本完成这一目的,如下:
  1. file: board/freescale/mpc8572ds/u-boot.lds…………….resetvec ADDR(.text) + 0x7fffc :{*(.resetvec)} :text = 0xffff……………
复制代码
      * NAND Flash启动流程       与NOR Flash启动相比,NAND Flash的启动执行处理更为复杂。NAND启动,即为FCM被选作boot ROM location,系统默认情况下eLBC会自动读取NAND Flash 的bank 0的前4K启动代码到FCM的Buffer RAM。CPU能直接执行FCM的Buffer RAM的代码,需要说明的时NAND Flash后续bank(除bank 0)数据的获取,是基于软件控制读取的。       进一步说明,由于OR0[AM]在系统上电复位时为0,所有CPU指令执行流将直接从FCM buffer RAM(4Kbytes RAM)获取,这是NAND控制器的关键所在。
       如上图,由于启动4Kbytes大小的限制,U-BOOT采用两个阶段来完成从NAND引导系统:第一阶段,主要完成serial port初始化,NAND控制器初始化,DDR初始化,接着就是从NAND Flash中拷贝第二阶段的执行代码到DDR中,然后跳转到相应的地址继续执行第二阶段;在第二阶段,系统完成比较复杂初始化,如系统中断、内存管理(简要基于BitMap的内存管理方式),以及各种外设的初始化,如PCI,Ethernet,IDE、SATA,USB等等。
  1. 注:U-BOOT编译从NAND启动的配置如下:make MPC8572DS_NAND_config && make
复制代码
      其结构如下:
       与NOR Flash启动类似的是第一条有效执行指令,也是一个跳转指令,如下:
  1. file: uboot/nand_spl/board/freescale/mpc8572ds/resetvec.S
复制代码
      相应的link处理地址为nand-spl-16k.bin倒数第二条指令,如下:
  1. file: nand_spl/board/freescale/mpc8572ds/u-boot.lds…………….resetvec 0xfff00ffc :{*(.resetvec)} = 0xffff……………注: TEXT_BASE为0xfff00000, and 0xffc 是U-BOOT image(u-boot-spl-16k.bin)最后4Kbytes的倒数倒数第二条指令。
复制代码
      最后需要说明下:NAND flash启动时,U-BOOT初始化DDR一般采用固定设定参数来初始化,其目的是减少代码占用的空间;而NOR flash启动时, U-BOOT通过读写SPD参数来动态初始化DDR。
原创作品,欢迎转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
资料评论(2 条)
admin
admin 2014-9-17 07:20:00
嗯,MPC8572用的DDR2,其启动方式是UBOOT从NAND或者NOR直接启动。
aenniwang
aenniwang 2014-9-16 22:45:55
一般uboot之前会有个xloader,而xloader主要作用是初始化CPU和DRAM以及处理复位向量。MPC的DRAM是什么,DDR2还是DDR3?

  • 授课专家

  • 授课机构

  • 聆听您的建议
欢迎您提出对网站宝贵的建议,我们竭诚为您服务。
请填写建议:
论坛注册名:
客服中心 升级VIP
快速回复 返回顶部 返回列表