WINCE6.0+S3C6410基于SD卡启动

1. 基于IROM SD/MMC发起方式的原理

  我们知道S3C6410支持IROM启动(internal ROM Booting),IROM启动是指从OneNAND、 SD/MMC卡和NAND Flash存储装备启动的方式,见下图:

  
WINCE6.0+S3C6410基于SD卡启动


  图1 IROM启动流程

  上图是系统基于IROM方式启动的任务流程图,下面简明描画此流程主要的工作:

  1) 处置器上电后,当OM[4:1]=1111时,实施IROM中的启动代码(boot codes),这个启动代码称为BL0,它详细会做一些初始化的工作。

  2) 依据GPN[15:13]管脚的设置来选择启动的设备,根据图2,假设是要从 SD/MMC的通道0中的 SD卡启动,那么GPN[15:13]=000,这样BL0就会经过 SD掌握器从 SD卡中读出BL1中的前4KB的顺序到Stepping Stone中,然后再Stepping Stone中执行BL1的代码。

  3) BL1可以初始化系统时钟,UART,SDRAM等设备,然后拷贝Bootloader2(BL2)到SDRAM的地址内存处。

  4) 然后跳转到SDRAM中的BL2继续运转,BL2支持更强大的功用,并且进一步初始化硬件和把WINCE内核镜像拷贝到SDRAM的(0x80100000)地址内存处。

  5) 最后再SDRAM种开端执行NK。

  
WINCE6.0+S3C6410基于SD卡启动


  图2 S3C6410支持的启动方式

   这里有个不太肯定的问题, IROM_ApplicationNote文档中提到说IROM boot code(BL0)可以装载4KB的bootloader code到stepping stone(8KB)中,但是实践是BL0可以装载8KB的stepldr_IROM_SD.nb0到stepping stone,不知道大家如何了解这个抵触,还望知道的朋友告知。

  2. 基于 SD卡启动的完成概述

  S3C6410支持从 SD卡启动,可通过IROM_Fusing_Tool.exe运用软件将IROM_SD_EBOOT.nb0烧录到 SD卡中,然后从 SD卡启动的时分,通过启动的IROM_SD_EBOOT.nb0来烧录新的stepldr、eboot和OS到NANDFLASH中,这样后面就可以从NANDFLASH启动了。

  通过IROM Fusing tool烧录IROM_SD_EBOOT.nb0文件到 SD card后,在 SD卡中是看不到文件的,由于它不是通过FAT写文件的方式,而是直接写入 SD card扇区,这样S3C6410从 SD card启动时,直接通过SDIO控制器读扇区,其中IROM_SD_EBOOT.nb0由stepldr_IROM_SD.nb0(相当于BL2)和 eboot_sdfuser.nb0(相当于BL1)组成,BL1和BL2的意义是指点加载的第一阶段和第二阶段,下图是 SD/MMC设备引导块的分配。

  
WINCE6.0+S3C6410基于SD卡启动
图3 SD/MMC设备启动块分配图

  由上图可知 SD卡的最后一个块(block,这里也就是sector,每个sector为512Bytes)因为预留下来,所以我们不能使用,倒数第二个block指定用于 SD卡的标签(signature),从[LAST-18]到[LAST-3]这16块用于保管BL1,根据上图并结合BL2的大小可以区分BL2在 SD卡中的位置。

  3. 烧到IROM_SD_EBOOT.nb0烧录到 SD卡

  根据上面的描述,我们知道要把IROM_SD_EBOOT.nb0烧录到 SD卡中的具体位置,下面先来看IROM Fusing tool.exe的应用界面

  
WINCE6.0+S3C6410基于SD卡启动


  图4 IROM_Fusing_tool.exe的界面

  在上图选择START的时候,我们来看IROM_Fusing_tool.exe源代码的主要实现局部,下面看第一部分:

  
WINCE6.0+S3C6410基于SD卡启动


  图5 IROM_Fusing_tool.exe写举措主要实现部分

  为什么从第0x52到0x56这5字节的内容是文件系统的标识符呢?我们通过winhex工具来查看 SD卡的启动区的内容,这些内容是对 SD卡进行 格式化的时候写进 SD卡中的,如下:

  
WINCE6.0+S3C6410基于SD卡启动
图6 winhex翻开1GB的 SD卡

  下面继续来看第二部分:

  
WINCE6.0+S3C6410基于SD卡启动


  图7 IROM_Fusing_tool.exe写动作主要实现部分

  SDHC设备引导块的分配如下:

  
WINCE6.0+S3C6410基于SD卡启动


  图8 SDHC设备引导块的分配

  4. 启动时从 SD卡中读取IROM_SD_EBOOT.nb0并

  S3C6410启动后,基于IROM+SD的启动方式,CPU先执行BL0的启动代码,其中BL0在启动进程中会通过 SD卡控制器把BL1(也就是stepldr_IROM_SD.nb0,大小为8KB)的内容拷贝到stepping stone中),然后在stepping stone中执行BL1的代码,BL1在执行过程中会调用main函数,如下:

  
WINCE6.0+S3C6410基于SD卡启动
图9 BL1的main函数

  到此BL2的内容曾经复制到SDRAM指定的内存地址处,并且开始执行了,然后可以通过IROM_SD_EBOOT.nb0的下载功能手动或许自动下载block0、eboot.bin或是NK.bin到NANDFLASH中了。

  4.1 保存 SD/MMC卡音讯的全局变量

  在使用 SD/MMC卡作为启动设备的时候, SD/MMC卡的信息必需要保存在指定的区域,见下图:

  
WINCE6.0+S3C6410基于SD卡启动


  图10 保存 SD/MMC卡的信息的地址及用途定义

  4.2 设备复制函数(Device Copy Function)

   S3C6410内部包括了引导设备的块赋值函数的ROM代码,所以开发者不需务实现设备复制函数,这些内部的函数可以复制任何设备的数据到SDRAM 中,使用者在内部的ROM代码执行之后可以使用这些函数,因为这些函数是在BL0阶段初始化的。下面是这些设备复制函数的描述表

  
WINCE6.0+S3C6410基于SD卡启动


  图11 设备赋值函数说明

  4.3 IROM_SD_EBOOT.nb0文件的组成及大小 下图是IROM_SD_EBOOT.nb0文件的组成文件及各个文件的大小,有助
大家的理解
 
WINCE6.0+S3C6410基于SD卡启动
图12 IROM_SD_EBOOT.nb0文件组成



转载于:https://my.oschina.net/u/174242/blog/77732

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值