zoukankan      html  css  js  c++  java
  • WINCE6.0+S3C6410基于SD卡启动

     

    ********************************LoongEmbedded********************************

    作者:LoongEmbedded(kandi)

    时间:2011.11.02

    类别:WINCE驱动开发

    ********************************LoongEmbedded********************************

    1.  基于IROM SD/MMC启动方式的原理

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

    图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。

    图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设备引导块的分配。

     

    图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的应用界面

     

    图4  IROM_Fusing_tool.exe的界面

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

     

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

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

     

    图6  winhex打开1GB的SD卡

    下面继续来看第二部分:

     

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

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

     

    图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函数,如下:

     

    图9 BL1的main函数

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

    4.1 保存SD/MMC卡信息的全局变量

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

     

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

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

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

    图11 设备赋值函数说明

    4.3 IROM_SD_EBOOT.nb0文件的组成及大小

    下图是IROM_SD_EBOOT.nb0文件的组成文件及各个文件的大小,有助于大家的理解

     

    图12 IROM_SD_EBOOT.nb0文件组成

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298754.html
Copyright © 2011-2022 走看看