S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf

目录

 

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硬件指南


1.概述

本章介绍了使用三星等存储设备启动内部ROM(iROM)的总体方案
支持MoviNAND / iNand,MMC / SD卡,纯Nand,eMMC,eSSD,UART和带有iROM的USB启动。
在S5PV210中,iROM引导在唤醒以识别引导设备时会释放保留I / O(重置I / O)。
通过OM引脚。 请参阅第1.4节。

1.1硬件特色

要使用IROM引导加载程序,需要一些硬件功能。

  • 基于CortexA8的S5PV210X微处理器
  •  64KB内部ROM(iROM)
  •  96KB内部SRAM
  • 通用SDRAM和控制器
  • 4/8位高速SD / MMC控制器

      4位SD / 4位MMC / 4或8位eMMC

  •  Nand Flash控制器
  •  OneNand控制器(AUDI)
  •  eSSD控制器
  •  UART / USB控制器

1.2特色

  • OneNand Boot(Mux / Demux)
  •   Nand Boot(具有硬件8/16位ECC)
  •   MMC引导程序(兼容MMC规范4.3,包括eMMC)
  •   eSSD引导
  •   UART / USB启动
  •   安全启动模式支持

-验证除UART / USB引导以外的所有引导设备的Bootloader的完整性。
-为了支持安全启动模式,应在S5PV210中写入安全密钥值。
如果在S5PV210中未写入任何密钥,则为非安全启动模式。
否则,它是安全启动模式。 为此,三星应在制造步骤中编写安全密钥。

  •   二次启动支持

-当第一种启动模式失败时,将通过具有4位数据的SD / MMC通道2尝试SD / MMC引导

1.3 iRON引导的优势

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.降低生产成本(可选)

可以在不使用编程器的情况下使用一种外部存储器运行程序来给
另一种外部存储器编程烧录,这样生产时就不用额外购买专用编程器了

1.4电路设计检查点

①要选择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用于引导。

2操作
2.1操作顺序

①iROM可以进行初始引导:初始化系统时钟,设备专用控制器和引导设备。
②iROM引导代码可以将引导加载程序加载到SRAM。 引导加载程序称为BL1。
然后,iROM在安全启动模式下验证BL1的完整性。
③将执行BL1:BL1将在SRAM上加载剩余的引导加载程序,称为BL2。
然后在安全启动模式下,BL1验证BL2的完整性。
④将执行BL2:BL2初始化DRAM控制器,然后将OS数据加载到SDRAM。
⑤最后,跳转到OS的起始地址。 那将为使用系统创造良好的环境。

2.2 iROM(BL0)的启动顺序(请参阅2.3 V210的启动图)

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的起始地址。

2.3 V210启动流程图

2.4第一次启动失败时的iROM第二次启动顺序

2.4.1串口启动模式

S5PV210 iROM支持UART下载功能。 始终通过向DNW发送标志位来检查UART下载,而不考虑引导设备的选择。 没有用于UART下载的选择信号。 为了避免UART超时错误,用户应在SMDK上电之前设置DNW配置。 即,当选择BL1代码并开始下载过程时,应该启动iROM。

为了设置用于uart引导的OM引脚,请参阅第3章引导配置。

2.4.2 USB启动模式

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章)

2.5 内存映射

2.6 全局变量

如果使用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 当前启动通道

2.7设备复制功能

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检查)
/ **
*此功能将页面块复制到目标内存。(仅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块复制功能

  • 高级Nand Flash复制功能地址(4位ECC检查)
/ **
*此功能将页面块复制到目标存储器(仅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块复制功能

  • OneNand 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))
  •  OneNand Flash复制功能地址
/ **
*此功能将页面的一部分复制到目标内存
* @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页面复制功能

  •  SD / MMC复制功能地址
外部源时钟参数用于使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块复制功能

  •  eMMC复制功能地址
外部源时钟参数用于使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模式传输)
/ **
*此功能将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模式传输)
/ **
*此功能将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块复制功能

2.8引导块分配指南

2.9用于引导代码描述的标题信息数据

2.10编写校验和示例代码

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的总和。

2.11时钟配置

V210中仅提供24MHz外部晶体/振荡器。 请参考以下内容。

  •  APLL : M:200, P:6, S:1 => 800MHz
ARMCLK ACLK200 HCLK200 PCLK100 HCLK100
400 133 133 66 66


Note. APLL configuration
FOUT = (MDIV X FIN )/ (PDIV X 2SDIV-1))

  •  MPLL : M:667, P:12, S:1 => 667MHz
HCLK166 PCLK83 SCLK_FIMC ARMATCLK HCLK133 PCLK66
133 66 133 133 133 66


Note. MPLL configuration
FOUT = (MDIV X FIN) / (PDIV X 2SDIV)

  •  EPLL : M:80, P:3, S:3, K:0 => 80MHz

Note. EPLL configuration
FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV)

3 启动配置

OM [5:0]引脚应直接与VDDSYS或GND相连。 目的是使进入睡眠模式时的漏电流降至最低。 但是,如果必须选择,则应添加一个100K欧姆以上的上拉和下拉电阻。


4 IRON Boot模式的功能

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引导之间更改引导模式。

5错误处理

在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硬件指南

6.1 eMMC引导的电源连接参考
eMMC可以支持MMC 4.3规范。 MMC 4.3和MMC 4.2之间的不同功能是引导模式功能。
要支持eMMC引导模式,请参考图12。
(如果对eMMC引导模式有任何疑问,请参阅MMC 4.3规范文档。)

发布了56 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/I_feige/article/details/104848609