天嵌 ARM开发社区

 找回密码
 注册
查看: 7015|回复: 19

tq2440开发板为什么要有通过选择从NAND还是NOR启动

[复制链接]
workhard123 发表于 2011-12-18 11:14:00 | 显示全部楼层 |阅读模式
50
本帖最后由 workhard123 于 2011-12-18 19:55 编辑

问一个也许高手觉得很水的问题,但是我还是没有明白
开发板上有开关选择从nand还是nor启动,
一般在跑系统是先是打到nor下,然后将uboot,kernel,fs程序down进去
然后从nand启动系统
1.为什么要这样处理?
2.
有个问题不明白,uboot,kernel,fs程序down到哪里去了?板子的SDRAM芯片中,还是NAND Flash中
如果down到SDRAM中的话,从nand中启动如何使用到下载到DRAM中的这些程序

ps:
这方面知识很匮乏,所以问的问题可能不着调
希望各位给予解答
嘿嘿 金钱50喔 意思一下

最佳答案

查看完整内容

我也是新手,刚开始学习ARM,可能说的不正确,就当互相交流。 首先说下NOR跟NAND,NOR 跟NAND都属于Flash,可以长久保持数据,但是NOR可以执行程序,而NAND则不可以,因为它是非线性结构。NOR的容量较小,价格贵,而NAND可以做的很大。 所以TQ2440是将uboot放在NOR里,开机NOR启动,执行uboot程序,用来配置参数下载内核,文件系统等等。将它们下载到NAND里,(因为容量较大),然后选择NAND启动,将内核程序搬运到DDR2里面执行。 ...
giant0913 发表于 2011-12-18 11:14:01 | 显示全部楼层
本帖最后由 giant0913 于 2011-12-18 15:42 编辑

我也是新手,刚开始学习ARM,可能说的不正确,就当互相交流。

首先说下NOR跟NAND,NOR 跟NAND都属于Flash,可以长久保持数据,但是NOR可以执行程序,而NAND则不可以,因为它是非线性结构。NOR的容量较小,价格贵,而NAND可以做的很大。
所以TQ2440是将uboot放在NOR里,开机NOR启动,执行uboot程序,用来配置参数下载内核,文件系统等等。将它们下载到NAND里,(因为容量较大),然后选择NAND启动,将内核程序搬运到DDR2里面执行。
知道TI的ARM9有将uboot,kernel,fs都放在NAND里面,从NAND启动,下载顺序如下uboot-kernel-fs。
以上仅个人意见。。。
回复

使用道具 举报

TQ-lkp 发表于 2011-12-18 12:30:55 | 显示全部楼层
从网上找的比较全面,你看下:
NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。

  相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

  NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。

NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。

  NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。



性能比较

  flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。

  由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。

  执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。

  ● NOR的读速度比NAND稍快一些。

  ● NAND的写入速度比NOR快很多。

  ● NAND的4ms擦除速度远比NOR的5s快。

  ● 大多数写入操作需要先进行擦除操作。

  ● NAND的擦除单元更小,相应的擦除电路更少。



接口差别

  NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

  NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。

  NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。



容量和成本

  NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

  NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。



可靠性和耐用性

  采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

  寿命(耐用性)

  在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。

  位交换

  所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。

  一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。

  当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。

  这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。

  坏块处理

  NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。

  NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。



易于使用

  可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。

  由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。

  在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏

块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。



软件支持

  当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。

  在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。

  使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。

  驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。
回复

使用道具 举报

guozhenzhen260 发表于 2011-12-18 14:03:03 | 显示全部楼层
这是我从一本书上看来的,加上了我自己的理解。因为刚开始学,所以见解难免有错误的地方,请指正。谢谢

1、S3C2440启动,为什么执行地址从0x0000000开始
2440有两种启动方式,Nor启动,Nand启动
2440
-------
CPU       |(Bank0)---->64M NorFlash
SRAM    |---->1G  NandFlash
             |---->SDRAM
-------
1)NandFlash启动:Bank0失效
(1)启动时,NandFlash先会强制将头4k的数据拷贝到SDRAM中去
|                                                                              0x00001000 |
|。。。。。。。。。。。。。。。。。。                                     |  
|ldr sp, =0x34000000 设置堆栈                                                     |
|ldr pc, =on_sdram 跳到SDRAM中继续执行                                    |
|bl  copy_steppingstone_to_sdram复制代码到SDRAM中                 |
|bl  memsetup设置存储控制器                                                         |
|bl  disable_watch_dog关闭WATCHDOG                     0x00000000 |
          Nand    Flash
               ||
               \/ 自动复制
|                                                                                0x00001000 |
|。。。。。。。。。。。。。。。。。。                                      |  
|ldr sp, =0x34000000 设置堆栈                                                     |
|ldr pc, =on_sdram 跳到SDRAM中继续执行                                    |
|bl  copy_steppingstone_to_sdram复制代码到SDRAM中                 |
|bl  memsetup设置存储控制器                                                        |                         |SDRAM未初始化|0x34000000
|bl  disable_watch_dog关闭WATCHDOG                     0x00000000 |<- PC                |             |0x30000000
          片内内存SRAM的地址Steppingstone
(2)CPU从片内的SRAM的0地址开始执行(即SteppingStone地址)
(3)关看门狗,初始化存储管理器
|                                                                                         0x00001000 |
|。。。。。。。。。。。。。。。。。。                                               |  
|ldr sp, =0x34000000 设置堆栈                                          0x00000010 |
|ldr pc, =on_sdram 跳到SDRAM中继续执行                         0x0000000C |
|bl  copy_steppingstone_to_sdram复制代码到SDRAM中      0x00000008 |  
|bl  memsetup设置存储控制器                                              0x00000004 |<-PC              |SDRAM已初始化|0x34000000
|bl  disable_watch_dog关闭WATCHDOG                               0x00000000 |                      |                         |0x30000000
          片内内存SRAM的地址Steppingstone

(4)将这4k的代码,拷贝到SDRAM中去(起始地址0x30000000),然后从内存SDRAM中,通过写程序进行读取
NandFlash,并且通过引导,读取NandFlash中的其它数据程序到SDRAM中,
|                                                                             0x00001000 |
|。。。。。。。。。。。。。。。。。。                                    |  
|ldr sp, =0x34000000 设置堆栈                                                   |
|ldr pc, =on_sdram 跳到SDRAM中继续执行                                   |
|bl  copy_steppingstone_to_sdram复制代码到SDRAM中                 |<-PC
|bl  memsetup设置存储控制器                                                        |
|bl  disable_watch_dog关闭WATCHDOG                     0x00000000 |
          片内内存SRAM的地址Steppingstone
               ||
               \/ 复制代码到SDRAM
|                                                                                            0x30001000 |
|。。。。。。。。。。。。。。。。。。                                                  |  
|ldr sp, =0x34000000 设置堆栈                                            0x30000010 |
|ldr pc, =on_sdram 跳到SDRAM中继续执行                           0x3000000C |
|bl  copy_steppingstone_to_sdram复制代码到SDRAM中         0x30000008 |  
|bl  memsetup设置存储控制器                                                 0x30000004 |      
|bl  disable_watch_dog关闭WATCHDOG                                   0x30000000 |   
                  SDRAM


(5)然后再跳到SDRAM中继续执行接下来的程序
|                                                                                              0x34000000 |SP
|。。。。。。。。。。。。。。。。。。                                                   |  
|ldr sp, =0x34000000 设置堆栈                                              0x30000010 |
|ldr pc, =on_sdram 跳到SDRAM中继续执行                           0x3000000C  | <-PC
|bl  copy_steppingstone_to_sdram复制代码到SDRAM中      0x30000008   |  
|bl  memsetup设置存储控制器                                             0x30000004   |      
|bl  disable_watch_dog关闭WATCHDOG                               0x30000000  |   
                  SDRAM
2)NorFlash启动
(1)此时,0地址是从NorFlash开始,而不是从SDRAM开始
(2)CPU从0地址开始执行,即开机后,程序可以从NorFlash开始启动
3)链接地址为什么从0x30000000开始:链接地址,是运行时程序应该位于哪个地址。因为我们SDRAM的起始地址是0x30000000,
因此链接后,程序运行时应该从0x30000000开始


回复

使用道具 举报

 楼主| workhard123 发表于 2011-12-18 19:19:42 | 显示全部楼层
giant0913 发表于 2011-12-18 15:41
我也是新手,刚开始学习ARM,可能说的不正确,就当互相交流。

首先说下NOR跟NAND,NOR 跟NAND都属于Flas ...

谢谢你的回答,知道我问的是什么意思
开机NOR启动,执行uboot程序,用来配置参数下载内核,文件系统等等。将它们下载到NAND里,(因为容量较大),然后选择NAND启动,将内核程序搬运到DDR2里面执行。
这个过程是从哪里看出的,大概的代码在哪里?从哪看得出来
希望大家继续帮忙分析
回复

使用道具 举报

zhliy0711 发表于 2011-12-19 10:34:01 | 显示全部楼层
同样迷糊中。。。各种flash分不清
回复

使用道具 举报

 楼主| workhard123 发表于 2011-12-19 10:53:24 | 显示全部楼层
zhliy0711 发表于 2011-12-19 10:34
同样迷糊中。。。各种flash分不清

flash是可以通过版主TQ-lkp贴出来的定义区分的
关键是现实的方法
回复

使用道具 举报

TQ-lkp 发表于 2011-12-19 11:22:36 | 显示全部楼层
nor成本高,nand成本低
回复

使用道具 举报

 楼主| workhard123 发表于 2011-12-19 12:23:18 | 显示全部楼层
TQ-lkp 发表于 2011-12-19 11:22
nor成本高,nand成本低

开机NOR启动,执行uboot程序,用来配置参数下载内核,文件系统等等。将它们下载到NAND里,(因为容量较大),然后选择NAND启动,将内核程序搬运到DDR2里面执行。
这种表述正确吗
回复

使用道具 举报

TQ-lkp 发表于 2011-12-19 13:52:34 | 显示全部楼层
就是这意思了
回复

使用道具 举报

 楼主| workhard123 发表于 2011-12-19 15:38:00 | 显示全部楼层
本帖最后由 workhard123 于 2011-12-19 15:41 编辑

自己还得好好仔细看看 东西太多太杂
怎么将悬赏的分给散出去
在哪里操作啊
回复

使用道具 举报

giant0913 发表于 2011-12-19 20:20:48 | 显示全部楼层
你想知道的也是我现在正在学习的,为什么说uboot引导内核意思就是 uboot里程序的任务就是配置内核参数,将参数(就是内核文件的配置参数,比如串口波特率,IP地址等等)放在与内核协商好的某个nand地址,然后把内核程序下载到某个nand区,比如0x3000000,再下载文件系统。当从NAND启动的时候(0x3000000地址开始启动)内核程序会读取之前的参数区的数据进行初始化,然后进行一系列活动。这个是uboot kernel fs都放在同一个NAND里的情况,至于uboot 与 kernel fs分开的情况,具体原理我也不清楚,正在探索。。。。希望对你有帮助,可以一起探讨学习。。。。
回复

使用道具 举报

giant0913 发表于 2011-12-19 20:23:08 | 显示全部楼层
uboot 是一个程序,可以说是裸机程序(不带操作系统),我想学LINUX 首先学会uboot,了解ARM架构,再学习LINUX。。。
回复

使用道具 举报

 楼主| workhard123 发表于 2011-12-20 09:43:58 | 显示全部楼层
giant0913 发表于 2011-12-19 20:23
uboot 是一个程序,可以说是裸机程序(不带操作系统),我想学LINUX 首先学会uboot,了解ARM架构,再学习LI ...

谢谢了你的回答
linux中的任何一块拿出来就够我喝一壶了
慢慢整吧  共同学习
回复

使用道具 举报

giant0913 发表于 2011-12-20 12:57:56 | 显示全部楼层
workhard123 发表于 2011-12-20 09:43
谢谢了你的回答
linux中的任何一块拿出来就够我喝一壶了
慢慢整吧  共同学习

慢慢学吧 一同交流!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 03:04 , Processed in 1.038126 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表