nand启动与nor启动的区别主要分为以下几部分说明:

1、nand flash与nor flash的最主要区别

2、s3c2440的nand启动与nor启动原理

3、nand启动与nor启动的时候uboot做了什么

1、在JZ2440开发板上有两种Flash,分别为nand flash和nor flash。这两种flash的最主要的区别为:nor flash比较稳定,存在里面的数据不易丢失,但是容量小,nor flash在读的时候可以像内存一样操作;nand flash容量大,但是存在位反转,会导致数据丢失,读写需要通过一定的时序。所以一般nor flash里面存放的uboot代码,而nand flash里面存放的是占用容量比较大的linux内核和文件系统。在JZ2440上,nand flash的容量为256M,而nor flash只有2M。

2、s3c2440的nand启动与nor启动原理

a、如图所以当OM0引脚与OM1引脚分别为 01或10的时候,当芯片复位之后是从nor flash直接取指运行的。

b、OM0引脚与OM1为00的时候,当芯片复位之后是从nand flash的0地址处拷贝4K内容到芯片的内部ram运行的。

3、nand启动与nor启动的时候uboot做了什么

u-boot之ARM920T的start.S分析分析start.s的时候已经知道了uboot需要从flash中拷贝内容到ram上运行。

int CopyCode2Ram(unsigned long start_addr, unsigned char *buf, int size)
{
unsigned int *pdwDest;
unsigned int *pdwSrc;
int i; if (bBootFrmNORFlash())//判断是从nand启动的还是从nor启动的,如果条件成立,表示是从nor启动的
{
pdwDest = (unsigned int *)buf;
pdwSrc = (unsigned int *)start_addr;
/* 从 NOR Flash启动 */
for (i = ; i < size / ; i++)//4字节的写入,所以需要size / 4 by andy
{
pdwDest[i] = pdwSrc[i];//norfalsh可以在配置完内存管理单元后,读数据可以像内存一样操作
}
return ;
}
else
{
/* 初始化NAND Flash */
nand_init_ll();
/* 从 NAND Flash启动 */
nand_read_ll_lp(buf, start_addr, (size + NAND_BLOCK_MASK_LP)&~(NAND_BLOCK_MASK_LP));
return ;
}
}

芯片根据向0地址写入一个数据,然后读出,如果没有改变的话就是NOR FLASH(因为NOR FLASH写入需要一定时序)的方式判断是从nor拷贝uboot内容还是从nand拷贝uboot的内容。

int bBootFrmNORFlash(void)
{
volatile unsigned int *pdw = (volatile unsigned int *);
unsigned int dwVal; /*
* 无论是从NOR Flash还是从NAND Flash启动,
* 地址0处为指令"b Reset", 机器码为0xEA00000B,
* 对于从NAND Flash启动的情况,其开始4KB的代码会复制到CPU内部4K内存中,
* 对于从NOR Flash启动的情况,NOR Flash的开始地址即为0。
* 对于NOR Flash,必须通过一定的命令序列才能写数据,
* 所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:
* 向地址0写入一个数据,然后读出来,如果没有改变的话就是NOR Flash
*/ dwVal = *pdw;
*pdw = 0x12345678;
if (*pdw != 0x12345678)
{
return ;//从nor启动
}
else
{
*pdw = dwVal;//复原原先0地址处的数据
return ;//从nand启动
}
}

u-boot之NAND启动与NOR启动的区别的更多相关文章

  1. 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef

    使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef ...

  2. 【spring cloud】子模块module -->导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module,启动类无法启动/右下角没有蓝色图标

    如题:导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做 或者说每次导入一个新的spring boot项目,IDEA不识别,启动类无法启动,怎么解决 下面分别 ...

  3. Spring Boot 中的 Tomcat 是如何启动的?

    作者:木木匠 https://my.oschina.net/luozhou/blog/3088908 我们知道 Spring Boot 给我们带来了一个全新的开发体验,让我们可以直接把 Web 程序打 ...

  4. 「Spring Boot 2.4 新特性」启动耗时详细监控

    背景 Spring Boot 项目随着项目开发过程中引入中间件数量的增加,启动耗时 逐渐增加. 笔者在 <Spring Boot 2.4.0 正式 GA,全面拥抱云原生>文章评论下发现了 ...

  5. Spring Boot的自动配置原理及启动流程源码分析

    概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...

  6. 精尽Spring Boot源码分析 - SpringApplication 启动类的启动过程

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  7. Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式、启动原理

    Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就 是"Windows预安装环境".微软的本意是:Win ...

  8. SpringBoot集成Socket服务后打包(war包)启动时如何启动Socket服务(web应用外部tomcat启动)

      1.首先知道SpringBoot打包为jar和war包是不一样的(只讨论SpringBoot环境下web应用打包)     1.1.jar和war包的打开方式不一样,虽然都依赖java环境,但是j ...

  9. BPI-M1P(全志A20)刷Android启动卡之后启动的过程

    http://blog.csdn.net/wb4916/article/details/78031511BPI-M1P(全志A20)刷Android启动卡之后启动的过程 BPI-M1P(全志A20)刷 ...

随机推荐

  1. [CI]CodeIgniter特性 & 结构

    ------------------------------------------------------------------------------------------------- 市场 ...

  2. 3.Java的基本数据类型.md

    Java支持的类型分为两类: •基本类型(Primitive Type):boolean和数值类型 ◦整型:byte.short.int.long.char ◦浮点:float.double •nul ...

  3. JQuery 基本知识

    一.简介 JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safari 2.0+,  ...

  4. Stm32 资料

    http://i.youku.com/i/UODMyMTgwNTY=?spm=a2hzp.8253869.0.0 http://blog.sina.cn/dpool/blog/s/blog_14f65 ...

  5. docker run option

    Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container Options: --add ...

  6. springboot-day02-整合mybatis与简单使用

    前言:该文章是紧接上一篇文章springboot-day01-引入如何读取配置文件以及helloWorld 1.springboot整合mybatis 1.添加jar包依赖 <?xml vers ...

  7. redis 存储java对象 两种方式

    根据redis的存储原理,Redis的key和value都支持二进制安全的字符串 1.利用序列化和反序列化的方式存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redi ...

  8. Parallax Mapping

    [Parallax Mapping] Parallax mapping belongs to the family of displacement mapping techniques that di ...

  9. 第三篇:jmeter的作用域和执行顺序

    1.元件的作用域: 8类可执行的元件,testplan和threadgroup不属于可执行的元件:这些元件中,取样器,是典型的不与其他元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其他 ...

  10. 如何获得scala的帮助和退出

    scala> :helpAll commands can be abbreviated, e.g., :he instead of :help.:edit <id>|<line ...