目录
1.概述
1.1硬件特色
1.2特色
1.3 iRON引导的优势
1.4电路设计检查点
2操作2.1操作顺序
2.2 iROM(BL0)的启动顺序(请参阅2.3 V210的启动图)
2.3 V210启动流程图
2.4第一次启动失败时的iROM第二次启动顺序
2.4.1串口启动模式
2.4.2 USB启动模式
2.5 内存映射
2.6 全局变量
2.7设备复制功能
2.8引导块分配指南
2.9用于引导代码描述的标题信息数据
2.10编写校验和示例代码
2.11时钟配置
3 启动配置
4 IRON Boot模式的功能
5错误处理
6硬件指南
本章介绍了使用三星等存储设备启动内部ROM(iROM)的总体方案
支持MoviNAND / iNand,MMC / SD卡,纯Nand,eMMC,eSSD,UART和带有iROM的USB启动。
在S5PV210中,iROM引导在唤醒以识别引导设备时会释放保留I / O(重置I / O)。
通过OM引脚。 请参阅第1.4节。
要使用IROM引导加载程序,需要一些硬件功能。
4位SD / 4位MMC / 4或8位eMMC
-验证除UART / USB引导以外的所有引导设备的Bootloader的完整性。
-为了支持安全启动模式,应在S5PV210中写入安全密钥值。
如果在S5PV210中未写入任何密钥,则为非安全启动模式。
否则,它是安全启动模式。 为此,三星应在制造步骤中编写安全密钥。
-当第一种启动模式失败时,将通过具有4位数据的SD / MMC通道2尝试SD / MMC引导
1.降低物料清单成本
=>在使用Movinand / iNAND / MMC / eMMC卡的iROM引导中,使用eSSD。 无需引导即可引导系统
所以。 不需要其他引导ROM设备(例如或闪存)
2.改善读取干扰
=>在使用nand闪存进行iROM引导时,S5PV210可支持8/16位H / W ECC
可以支持所有nand引导8位H / W ECC。
但是,仅一种类型的Nand支持16位ECC,即4KB 5cycle。
3.降低生产成本(可选)
可以在不使用编程器的情况下使用一种外部存储器运行程序来给
另一种外部存储器编程烧录,这样生产时就不用额外购买专用编程器了
①要选择iROM引导设备,请使用OM引脚。 (请参阅3引导配置)
②V210的所有引导存储设备均使用MMC通道2进行SD / MMC二次引导
③OneNand引导-应使用Xm0CSn4 / NFCSn2 / ONANDXL_CSn0信号进行引导。
(BL1代码应在BL1二进制文件的开头包含校验和数据。请参见2.9节)
④Nand启动-Xm0CSn2 / NFCSn0信号应用于启动
(BL1代码应在BL1二进制文件的开头包含校验和数据。请参见2.9节)
⑤SD / MMC / eMMC引导– MMC通道0用于首次引导。 通道2用于第二次启动
(BL1代码应在BL1二进制文件的开头中包含校验和数据。请参见2.9节)
⑥UART引导– UART通道端口2用于引导。
①iROM可以进行初始引导:初始化系统时钟,设备专用控制器和引导设备。
②iROM引导代码可以将引导加载程序加载到SRAM。 引导加载程序称为BL1。
然后,iROM在安全启动模式下验证BL1的完整性。
③将执行BL1:BL1将在SRAM上加载剩余的引导加载程序,称为BL2。
然后在安全启动模式下,BL1验证BL2的完整性。
④将执行BL2:BL2初始化DRAM控制器,然后将OS数据加载到SDRAM。
⑤最后,跳转到OS的起始地址。 那将为使用系统创造良好的环境。
1.禁用看门狗定时器
2.初始化指令缓存
3.初始化堆栈区域(请参见第2.5章中的“内存映射”)
4.初始化堆区域。 (请参见第2.5章中的“内存图”)
5.初始化块设备复制功能。 (请参见第2.7节中的“设备复制功能”)
6.初始化PLL并设置系统时钟。 (请参阅第2.11章的“时钟配置”)
7.将BL1复制到内部SRAM区域(请参见第2.7节“设备复制功能”)
8.验证BL1的校验和。
如果校验和失败,则iROM将尝试第二次启动。 (SD / MMC频道2)
9.检查是否为安全启动模式。
如果安全密钥值是在S5PV210中写入的,则为安全启动模式。
如果是安全启动模式,请验证BL1的完整性。
10.跳转到BL1的起始地址。
S5PV210 iROM支持UART下载功能。 始终通过向DNW发送标志位来检查UART下载,而不考虑引导设备的选择。 没有用于UART下载的选择信号。 为了避免UART超时错误,用户应在SMDK上电之前设置DNW配置。 即,当选择BL1代码并开始下载过程时,应该启动iROM。
为了设置用于uart引导的OM引脚,请参阅第3章引导配置。
S5PV210 iROM支持USB下载功能。 如果UART超时,则iROM尝试进入USB引导模式。
为了避免USB协商超时错误,用户应事先在目标板和PC之间连接USB电缆。 如果USB连接正常,用户可以通过USB下载BL1图像,如图5 – 7所示。
由于BL1不需要通过UART / USB引导模式的标头信息,因此BL1的代码基址为0xd002_0000。 在UART / USB引导模式以外的其他情况下,BL1应该具有标头信息,并且其代码基址为0xd0020010。 (请参阅第2.9章)
如果使用MMC设备进行启动,则MMC卡的信息必须保存在特殊区域中。 请参阅表2和图3
地址 | 名称 | 用法 |
0xD0037480 | globalBlockSize | SD / MMC设备的总块数。 |
0xD0037484 | globalSDHCInfoBit | globalSDHCInfoBit[31:16] : RCA(相对卡地址)数据 globalSDHCInfoBit[2] : SD卡 globalSDHCInfoBit[1] : MMC卡 globalSDHCInfoBit[0] : 大容量启用 |
0xD0037488 | V210_SDMMC_BASE | 当前启动通道 |
S5PV210内部具有用于boot-u设备的块复制功能的ROM代码。 因此,
开发人员可能不需要实现设备复制功能。 这些内部功能可以将任何数据从存储设备复制到SDRAM。 用户可以在完全结束内部ROM引导过程后使用这些功能。
Address | Name | Usage |
0xD0037F90 | NF8_ReadPage_Adv | This internal function is advanced NF8_ReadPage function. (8-Bit ECC Check) Note. 2048, 4096 Page 8bits-bus Nand Only. |
0xD0037F94 | NF16_ReadPage_Adv | This internal function is advanced NF16_ReadPage function. (4-Bit ECC Check) Note. 2048 page size, 5 cycle address, 16bits-bus Nand Only. |
0xD0037F98 | CopySDMMCtoMem | This internal function can copy any data from SD/MMC device to SDRAM. User can use this function after the IROM boot process completely. |
0xD0037F9C | CopyMMC4_3toMem | This internal function can copy any data from eMMC device to SDRAM. User can use this function after the IROM boot process completely. |
0xD0037FA0 | CopyOND_ReadMultiPages | This internal function can copy any data from OneNand device to SDRAM. User can use this function after the IROM boot process completely. (normal speed copy) |
0xD0037FA4 | CopyOND_ReadMultiPages_Adv | This internal function can copy any data from OneNand device to SDRAM. User can use this function after the IROM boot process completely. (fast speed copy) |
0xD0037FA8 | Copy_eSSDtoMem | This internal function can copy any data from eSSD device to SDRAM. User can use this function after the IROM boot process completely. (CPUPIO mode) |
0xD0037FAC | Copy_eSSDtoMem_Adv | This internal function can copy any data from eSSD device to SDRAM. User can use this function after the IROM boot process completely. (UDMA mode) |
0xD0037FB0 | NF8_ReadPage_Adv128p | This internal function is advanced NF8_ReadPage function. (8-Bit ECC Check) Note. This is dedicated for only NAND which has 128 page per block with 2K page size |
表3.设备复制功能指针
/ **
*此功能将页面块复制到目标内存。(仅8位ECC)
* @param uint32 block:要复制的源块地址号。
* @param uint32 page:要复制的源页面地址号。
* @param uint8 * buffer:目标缓冲区指针。
* @return int32-成功或失败。
* /
#define NF8_ReadPage_Adv(a,b,c)((((int(*)(uint32,uint32,uint8 *))(*(((uint32 *)0xD0037F90)))(a,b,c))
图8. 8位ECC的定义Nand Flash块复制功能
/ **
*此功能将页面块复制到目标存储器(仅4位ECC)
* @param u32块:要复制的源块地址号。
* @param u32 page:要复制的源页面地址号。
* @param u8 * buffer:目标缓冲区指针。
* @return int-成功或失败。
* /
#define NF16_ReadPage_Adv(a,b,c)((((int(*)(uint32,uint32,uint8 *))(*(((uint32 *)0xD0037F94)))(a,b,c))
图9. 8位ECC的定义Nand Flash块复制功能
/ **
*此功能将页面的一部分复制到目标内存
* @param uDataAddr –目标地址
* @param uBlockAddr-要读取的块地址
* @param uPageAddr-要读取的页面地址
* @param uNumOfPages –要读取的页码
* @return bool(unsigend char)-成功或失败。 * /
#define CopyOND_ReadMultiPages(a,b,c,d,e)(((bool(*)(unsigned int,unsigned int,unsigned char,unsigned int,unsigned int))(*((unsigned int *)0xD0037FA0)))(a,b,c,d,e))
/ **
*此功能将页面的一部分复制到目标内存
* @param uDataAddr –目标地址
* @param uBlockAddr-要读取的块地址
* @param uPageAddr-要读取的页面地址
* @param uNumOfPages –要读取的页码
* @return bool(unsigend char)-成功或失败。 * /
#define CopyOND_ReadMultiPages_Adv(a,b,c,d,e)((((bool(*)(unsigned int,unsigned int,unsigned char,unsigned
int,unsigned int))(*((unsigned int *)0xD0037FA4)))(a,b,c,d,e))
图10.定义OneNAND页面复制功能
外部源时钟参数用于使EPLL源时钟适合20MHz。
/ **
*此功能将MMC(MoviNAND / iNand)卡数据复制到内存中。
*始终使用EPLL源时钟。
*此功能工作在20Mhz。
* @param u32 StartBlkAddress:源卡(MoviNAND / iNand MMC))地址。(必须阻止该地址。)
* @param u16 blockSize:要复制的块数。
* @param u32 * memoryPtr:要从中复制的缓冲区。
* @param bool with_init:确定卡的初始化。
* @return bool(u8)-成功或失败。
* /
#define CopySDMMCtoMem(z,a,b,c,e)((((bool(*)(int,unsigned int,unsigned short,unsigned int *,bool)))(*((unsigned
int *)0xD0037F98)))(z,a,b,c,e))
图11.定义SD / MMC块复制功能
外部源时钟参数用于使EPLL源时钟适合20MHz。
/ **
*此功能将MMC(MoviNAND / iNand)卡数据复制到内存中。
*始终使用EPLL源时钟。
*此功能工作在20Mhz。
* @param u16 blockSize:要复制的块数。
* @param u32 * memoryPtr:要从中复制的缓冲区。
* @param u32 busWidth:数据总线宽度。
* @return bool(u8)-成功或失败。
* /
#define CopyMMC4_3toMem(a,b,c,d)(((bool(*)(bool,unsigned int,unsigned int *,int)))(*((unsigned int
*)0xD0037F9C)))(a,b,c,d))
图12.定义eMMC块复制功能
/ **
*此功能将eSSD数据复制到内存。
* PIOCPU模式传输。
* @param u32 uStBlock:要复制的块数。
* @param u32 uBlocks:要从中复制的缓冲区。
* @param u32 uBufAddr:数据总线宽度。
* @返回
* /
#define Copy_eSSDtoMem(a,b,c)(((void(*)(unsigned int,unsigned int,unsigned int))(*((unsigned int
*)0xD0037FA8)))(a,b,c))
/ **
*此功能将eSSD数据复制到内存。
* UDMA模式传输。
* @param u32 uStBlock:要复制的块数。
* @param u32 uBlocks:要从中复制的缓冲区。
* @param u32 uBufAddr:数据总线宽度。
* @返回
* /
#define Copy_eSSDtoMem_Adv(a,b,c)(((void(*)(unsigned int,unsigned int,unsigned int))(*((unsigned int
*)0xD0037FAC)))(a,b,c))
图13.定义eSSD块复制功能
for(count=0;count< dataLength;count+=1)
{
buffer = (*(volatile u8*)(uBlAddr+count));
checkSum = checkSum + buffer;
}
-count 变量是unsigned int类型。
-dataLength 变量是无符号的int类型。 它包含BL1的大小(字节)。
-buffer 变量是无符号的短类型。 用于从BL1读取1字节数据。
-checkSum 变量是unsigned int类型。 它包含BL1的总和。
V210中仅提供24MHz外部晶体/振荡器。 请参考以下内容。
ARMCLK | ACLK200 | HCLK200 | PCLK100 | HCLK100 |
400 | 133 | 133 | 66 | 66 |
Note. APLL configuration
FOUT = (MDIV X FIN )/ (PDIV X 2SDIV-1))
HCLK166 | PCLK83 | SCLK_FIMC | ARMATCLK | HCLK133 | PCLK66 |
133 | 66 | 133 | 133 | 133 | 66 |
Note. MPLL configuration
FOUT = (MDIV X FIN) / (PDIV X 2SDIV)
Note. EPLL configuration
FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV)
OM [5:0]引脚应直接与VDDSYS或GND相连。 目的是使进入睡眠模式时的漏电流降至最低。 但是,如果必须选择,则应添加一个100K欧姆以上的上拉和下拉电阻。
1. OneNAND引导:
-Xm0CSn4 / NFCSn2 / ONANDXL_CSn0信号应用于引导。
-iROM代码检查校验和数据。
(BL1代码必须包含校验和数据。如果将BL1代码加载到内部SRAM中,则iROM代码将比较iROM生成的校验和数据与已加载的校验和数据。加载地址为0xD0020008。)
-使用MPLL(667MHz)进行引导时,OneNand时钟为33MHz
2. NAND启动:
-在启动页面使用硬件8位ECC
-在4KB,5cycle Nand类型的情况下,V210支持16位ECC。
-在2KB,5周期16位总线Nand类型的情况下,V210支持4位ECC。
-iROM代码检查校验和数据。
-Xm0CSn2 / NFCSn0信号应用于引导
3. SD / MMC和eMMC引导:
-首次引导使用SDMMC CH0作为4位。
-第二次启动使用SDMMC CH2作为4位。
-iROM代码检查校验和数据。
-使用EPLL引导的SD / MMC时钟为20MHz
(BL1代码必须包含校验和数据。如果将BL1代码加载到内部SRAM中,则iROM代码将比较iROM生成的校验和数据与已加载的校验和数据。加载地址为0xD0020008。)
4. eMMC引导
-SDMMC CH0可用于eMMC引导(4/8位)。总线宽度由OM设置控制
-iROM代码检查校验和数据。
(BL1代码必须包含校验和数据。如果将BL1代码加载到内部SRAM中,则iROM代码将比较iROM生成的校验和数据与已加载的校验和数据。加载地址为0xD0020008。)
-使用EPLL引导的SD / MMC时钟为20MHz
5. NOR启动
-Xm0CSn0信号应用于引导
-iROM代码检查校验和数据。
(BL1代码必须包含校验和数据。如果将BL1代码加载到内部SRAM中,则iROM代码将比较iROM生成的校验和数据与已加载的校验和数据。加载地址为0xD0020008。)
6. UART / USB引导:
-UART CH2用于UART引导和调试消息
-使用MPLL进行引导时,UART模块频率为66.7MHz
-USB引导模式需要DNW工具。
注意)OM [4:0]信号不需要上拉/下拉寄存器。但是OM [5]信号需要一个下拉寄存器。该寄存器旨在在普通存储和UART / USB引导之间更改引导模式。
在iROM引导期间发生错误时,XPWMTOUT0引脚将被切换以指示它是哪种错误。
对于每种错误情况,XPWMTOUT0引脚都以特定的占空比进行切换。
[示例:OneNAND校验和失败]
如果在OneNAND引导模式期间校验和失败,XPWMTOUT引脚将以40:60(高:低)占空比进行切换。
所有错误情况都有指示错误的信号(请参阅表5 iROM OM引脚说明)
Number | ERROR | SIGNAL OUTPUT DUTY ( High : Low ) |
1 | NOR boot checksum error | 5 : 95 |
2 | UART boot time out error | 10 : 90 |
3 | UART boot download data length over error | 15 : 85 |
4 | UART boot download data checksum error | 20 : 80 |
5 | NAND boot RnB No response error | 25 : 75 |
6 | NAND boot ECC error | 30 : 70 |
7 | NAND boot checksum error | 35 : 65 |
8 | OneNAND boot checksum error | 40 : 60 |
9 | No BL1 data in boot device | 45 : 55 |
10 | SDMMC boot card init error | 50 : 50 |
11 | SDMMC boot checksum error | 60 : 40 |
12 | Secure boot fail error | 70 : 30 |
13 | eSSD boot device init error | 75 : 25 |
14 | USB boot time out error | 80 : 20 |
15 | USB boot no input clock error | 85 : 15 |
16 | USB boot non-device mode error | 90 : 10 |
17 | eSSD boot checksum error | 95 : 5 |
Table5. ERROR Signal Description
6.1 eMMC引导的电源连接参考
eMMC可以支持MMC 4.3规范。 MMC 4.3和MMC 4.2之间的不同功能是引导模式功能。
要支持eMMC引导模式,请参考图12。
(如果对eMMC引导模式有任何疑问,请参阅MMC 4.3规范文档。)