Chinaunix首页 | 论坛 | 博客
  • 博客访问: 554549
  • 博文数量: 109
  • 博客积分: 2300
  • 博客等级: 大尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-02 13:11
文章分类

全部博文(109)

文章存档

2012年(1)

2011年(17)

2010年(62)

2009年(29)

我的朋友

分类: 嵌入式

2010-06-02 17:41:29

首先,读取NAND的ID,可以从RBL的设备信息表中得到一些重要信息,然后,RBL在block1 page0处开始搜索UBL描述符。若没有找到正确的UBL,会继续搜索下面的块,一直到block24结束。这样做是为了跳过坏块,24个块几乎对所有 的NAND设备都足够了。当找到UBL标识之后,对应的块号(从1到24)被写到ARM内部RAM(指令RAM)的最后32位(0x7ffc- 0x8000),假设通过JTAG通过读取这32位,你能够确定RBL是在哪个块中找到了一个正确的UBL标识。如果搜索完24个块后没有找到正确的 UBL标识,RBL会尝试从SD卡启动。

找到正确的UBL之后,读取并且处理UBL描述符,这个描述符提供了加载和控制跳转到UBL的必要信息。然后UBL被读取并且处理。RBL首先可能会使能 一些更快的EMIF组合和基于UBL描述符中信息的指令cache操作。通过UBL描述符可以知道在拷贝UBL期间是否使用了DMA。一旦用户指定的启动 状态被设置,RBL就复制UBL到ARM内部RAM,并且从地址0x0000 0020处启动。

NOTE:真正的拷贝实际上是从ARM内部数据RAM区0x10020-0x1781F的低30KB的空间。

将UBL读取到ARM IRAM的时候,NAND RBL使用4位的ECC来检测是否发生读错误。若发生了错误,则通过ECC纠正算法来纠正错误。通过冗余(24 blocks)和出错恢复来保证防止读错误。

NAND启动流程如下图所示:


NAND UBL descriptor格式如下表:


NOTE:ARM IRAM 的起始32个字节是ARM系统的中断向量表(IVT)(8个向量,每个4字节),复制的UBL从这32个字节的IVT之后开始启动。

在UBL descriptor中,不同的NAND启动模式可以设置不同的MAGIC IDs,下表列出了UBL标识:


 

NAND启动详细流程:

1、初始化RAM1的高2K栈空间(0x7800-0x7fff)。不要使用IRAM的最后32个字节(0x7ffc-0x8000),因为它被用来存写 入UBL的块号。

2、禁止所有中断,IRQ和FIQ。

3、外部引脚DEEPSLEEPZ/GIO0在芯片为NAND模式启动复位时必须被置高。

4、读NAND的设备ID,获得参数。

5、根据NAND flash的参数初始化NAND区域。

6、搜索UBL设定块号,通常在CIS/IDI page(一般为block 0, page 0)。

7、UBL描述符由以下参数组成(所有UBL参数位宽都是32位):

    -入口点地址:加载UBL之后的绝对入口点,必须在0x0020-0x781C之间。

    -UBL占用的NAND的页数:必须是相邻的页,可以跨越多个块,总字节数必须小于等于30KB。

    -UBL的起始块:可能与UBL描述符在同一个块。

    -UBL的起始页:不可能与UBL指示符在同一页,因为加载的都是完整的页。

8、使能硬件ECC错误检测,复制UBL从NAND flash到IRAM,如果检测到一个4位ECC的读错误,UBL将通过ECC纠正算法来纠正错误。如果是由其他的错误导致读失败的,指示符会继续在下一 个新的块中搜索直到找到UBL描述符,一直搜索到block 24。没有的话就从SD卡启动。

9、在UBL入口处把控制权移交给UBL。

10、NAND的安全启动模式是在PLL旁通模式中完成的,它不使用快速EMIF,DMA或者I-Cache。在其他模式下,使用以上的一种组合。例如, 在UBL_MAGIC_PLL_DMA_IC_FAST模式下激活其他四个设置,它因该是最快的NAND启动模式。

 

以下是启动流图:


 

ARM NAND ROM bootloader实例:

 

NAND支持的设备ID:


阅读(2406) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-01-20 17:02:07

SEED-DVS365 Demos的演示, 摄像头通过线连接到板子的 CVBS输入 (video in); 使用串口线将SEED-DVS365与PC机相连,一端接:SEED-DVS365的J3位置,另一端接:PC机的RS232口; 使用网线将SEED-DVS365与PC连接到同一网络中,SEED-DVS365的网络接口位置是T1; 烧写seed_dm365自带的一个demos:encode,出现了问题: 首先 root@SEED_DVS365:~#cd /opt/dm365 ↙ root@SEED_DVS365:/opt/dm365#./loadmodules_hd.sh↙ 通过超级终端显示如下信息: irqk unregistered CMEMK module: built on Nov 30 2010 at 14:33:17 Reference Linux version 2.6.18 File /opt/dvsdk_2_10_00_17/linuxutils_2_24_02/packages/ti/sdo/linuxutils/cmem