您的位置:首页 > 其它

嵌入式系统学习(二)-S5P4418芯片启动模式

2016-10-01 10:02 246 查看
S5P4418芯片支持多种系统启动的模式,主要分为两种类型:

(1) 外部静态内存启动



在外部静态存储启动的方式下,nSCS[0]通过reset配置设置到0x00000000地址处,并且CPU可以通过MCU-S访问静态内存。

(2)内部ROM启动

此芯片有一个内置的20KB的ROM。设置好CfgBOOTMODE,CPU会从internal ROM的0地址处取出指令执行,internal ROM里存放着一组代码,支持不同方式的启动方式。这里的ROM代码会从不同的介质中读取并执行用户的启动代码,然后加载到指定的内存中。这种启动方式就被定义为iROMBOOT。

特点:
支持5种启动方式:SPI,UART,USB,SDHC,NAND 这5种BOOT

支持无需MMU的操作系统的CPU异常向量重定向

支持快速电源控制

USBBOOT:
iROMBOOT可以通过USB加载用户启动代码到内存中,并执行它,这样的启动方式就是USBBOOT。支持全速(64kb)和高速(512kb)的USB连接,和bulk传输。USB的主机程序通过USB设备的EP2来传输用户启动代码。USBBOOT从主机程序来写用户启动代码,并且在收到16kb的用户启动代码后,跳转到0xFFFF0000来执行它。

SDHCBOOT:

iROMBOOT可以执行来自SD内存卡和MMC以及eMMC的内存卡中的用户启动代码,用SDHC模块将代码加载到内存中去。这种方式就叫做SDHCBOOT。它支持SD/MMC内存卡,和eMMC,支持高容量的内存卡,用400kHz的输出来识别,用22.9MHz的SDCLK来进行数据传输。

SDHCBOOT采用SDHC的第0个模块,对应GPIOA的29,31管脚,和GPIOB的1,3,5,7管脚。SDHCBOOT根据CFG的针数提供多种启动方式。其中USERBOOT的扇区必须按如下方式写入。用户启动代码中共有33个扇区(1个扇区为512BYTES),其中第0块扇区为预留区,SDHCBOOT不关注在0扇区的数据,因此,可以用0扇区来存储MBR的分区记录,并包括了用户启动代码和文件系统的一个物理分区中。第1到32块扇区则存放着用户的启动代码,每扇区512字节,总共16KB。

SDHCBOOT的启动过程如下:

1.  当CfgSDHCBM=1时, SDHCBOOT执行eMMC启动。

此时,若CfgEMMCBM=1时,是正常的eMMC启动执行,当CfgEMMCBM=0时,第二种eMMC启动被执行。对于eMMC的启动,SDHCBOOT总是使用4位的数据总线,因此,EXT_CSD的BOOT_BUS_WIDTH应该被设成1。同时,EXT_CSD的BOOT_ACK被设成0,因为BOOT_ACK对于eMMCBooting已经不可用了。正常的SDMMC启动在1秒内没有数据从CARD传输过来的时候被执行。第一次传输的512个字节没有用,第二次传输的512个字节有用。用户启动代码从卡中传输到内部的SRAM,然后被执行。

2. 当CfgSDHCBM=0或eMMC启动失败时, SDHCBOOT执行正常SDMMC启动。首先会进入一个空闲状态,随后SDHCBOOT识别出卡的类型并初始化,卡的状态改变到数据传输模式,SDHCBOOT根据CfgPARTITION选择分区,SDHCBOOT从扇区1中读取用户启动代码,并加载它到内部的SRAM中执行。
NANDBOOT:

iROMBOOT提供一个支持错误检测的启动方式,通过使用存储在NAND FLASH中的内存代码。这个启动方法被描述成NANDBOOTEC。

它的特点:支持长达每551字节24位的错误纠正:用户启动代码512字节+同等的39字节,和1129字节的60位错误:用户启动代码1024字节+同等的105字节。支持521B,2KB,4KB以及更高的NAND闪存页面大小。支持NAND 闪存通过RESET命令来初始化它们。不支持坏扇区管理。

NANDBOOTTEC可以纠正存储在用户启动代码中发生的错误。无论在什么时候,NANDBOOTTEC都是以512字节和1024字节的方式从NAND闪存读取用户启动代码,它能通过在MCU-S中的BCH错误检测函数知道数据中是否有错。在任何数据出错的情况下,最大的24/60错误可以通过H/W的错误检测来纠正。如果错误纠正失败则执行USB启动模式。

下面以 SD 卡的启动方式进行详细介绍。

SD 卡的启动方式属于内部ROM 启动中的 SDHC 启动方式。上电时,S5P4418 会将位于 0x3400_0000 上的 Internal ROM 代码映射到 0x0000_0000 上进行执行。该代码将 SD 卡上从 0x0000_0200 开始的数据复制到 内部 RAM 中,目标位置为0xFFFF_0000,数据大小为 16KB。

复制完成后,指令就会跳转到 0xFFFF_0200 继续执行,该代码会初始化 CPU 的一些设备,包括时钟、DRAM 等,然后再将SD 卡上第 64 号扇区开始的数据(uboot) 复制到 DRAM 上,目标地址为 0x42C0_0000。复制完毕后再跳转到 0x42C0_0000 上继续执行。此时启动完成。

以上就是 S5P4418 上电启动的过程描述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: