主题 : 建议友善从IROM加载Nandflash 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 9192
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2009-09-20
最后登录: 2020-11-02
楼主  发表于: 2011-08-12 09:44

 建议友善从IROM加载Nandflash



从友善的硬件电路设计上看,和mini2440一样。都是采用cpu本身的硬件机制,加载Nandflash前面的4K代码到steppingstone,steppingstone映射到0x0000_0000,从而达到从Nandflash启动的目的。

但是当使用MLC的时候,这个机制就有很大风险,可能导致的问题是,系统有时不能启动。
原因有
1 MLC不像SLC那么稳定,
2 直接从Nandflash启动,是没有ECC校验的。

如果从IROM启动,再通过IROM加载Nand,这时nand加载是带8位的ECC校验的,那就安全多了。

当然,这样友善生产就很麻烦了,不同的大小的Flash,就有不同的电阻跳线设置。

自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2011-08-12 09:58
本来就是从IROM启动的,现在还有哪款高级CPU不是从IROM启动的吗?
除了JTAG调试或许经过某种设置,直接进入纯粹的裸机模式,其他任何启动方式都必定要经过IROM,包括2410,2440,6410,210等都是这样。

IROM在2410/2440手册中没有提及,那是因为那时的功能比较简单,2416/2450/6410/210等就变得功能多了。
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 9192
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2009-09-20
最后登录: 2020-11-02
2楼  发表于: 2011-08-12 14:37
mindee,你好!
多谢你的回复。
不知道是不是我对datasheet理解有误,还是我的mini6410版本比较旧(版本1041).

下面是我的理解:

这里引用规格书 
 



从规格书中可以知道,当OM[4:0] = 1111X,是IROM启动模式
如果对比6400规格书,可以知道,当OM[4:0]=0000x ~0011x,系统通过steppingstone机制,从Nandflash启动。这个可以参考这篇文档http://blog.csdn.net/nanjianhui/article/details/4230565


下面在来看mini6410的电路:



从上面的电路CON5可以知道,
当S2拨向SDBOOT时,
OM[4:0] = 11111,对照规格书,Boot device 是 IROM;
GPN[15:13] = 000,对照规格书,说明IROM启动后,从SD0设备加载bootloader,即BL1。

当S2拨向Nand时
OM[4:0]=00111,对照规格书,对应的boot device是Reserved,但通过对比6400,我们知道是Nandflash
这时GPN[15:13],对boot device的选择没有影响。

结论如下:
1 从SD卡启动时,mini6410确实是通过IROM来启动的,(supperboot就是通过IROM加载到steppingstone,然后从0x0c00_0000开始运行的);
2 从Nand启动时,mini6410没有通过IROM来加载nandflash,直接通过硬件机制,把Nandflash前面4K代码加载到steppingstone,steppingstone地址映射到0x0000_0000,然后从地址0开始运行。此加载过程没有ECC校验。
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
3楼  发表于: 2011-08-12 21:00
无论从什么设备启动,都是由irom控制裁决的。


好像6410有一篇专门的irom说明文档,你可以找找看看

6410 NAND flash最初加载的是8k

所有NAND flash出厂时必须保证block 0是好的,至于那8k ecc问题,出错的概率和出门遇到车祸差不多。凡是终端产品都会烧固件检测的,因此有问题的根本不会流到用户手中。

如果实在要保险,可以配合nor + nand的方式
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 9192
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2009-09-20
最后登录: 2020-11-02
4楼  发表于: 2011-08-14 20:36
从IROM加载Nandflash就可以了
级别: 新手上路
UID: 91656
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2013-05-13
最后登录: 2013-05-21
5楼  发表于: 2013-05-14 11:11

 回 2楼(lansy) 的帖子

请教电路中的NC是什么意思? tiny6410中 默认应该是接电阻还是短接电阻还是悬空呢?