转:http://blog.chinaunix.net/uid-22030783-id-3347621.html

在XC2440开发板上做uboot从nandflash启动时,需要检测硬件启动方式,启动方式是由硬件OM管脚决定的,软件无法检测硬件电平状态,但可以根据CPU的启动特性来检测。
 
通过深入研究2440的启动方式,总结了几点:
如果将S3C2440配置成从NANDFLASH启动(将开发板的启动开关拔到nand端,此时OM0管脚拉低)S3C2440的Nand控制器会自动把Nandflash中的前4K代码数据搬到内部SRAM中(地址为0x40000000),同时还把这块SRAM地址映射到了0x00000000地址。CPU从0x00000000位置开始运行程序。
 
如果将S3C2440配置成从Norflash启动(将开发的启动开关拔到nor端,此时OM0管脚拉高),0x00000000就是norflash实际的起始地址,norflash中的程序就从这里开始运行,不涉及到数据拷贝和地址映射
 
看S3C2440的地址映射图:
 
 
根据前面的启动过程分析,nand启动时,地址0x00000000为SRAM映射的地址;nor启动时,地址0x00000000为norflash的实际起始地址。向norflash中写数据需要特定的命令时序,而向内存中写数据可以直接向内存地址赋值。
 
根据这两个特性,我们可以这样检测,代码如下:

  1. int check_flashboot_mode(void)
  2. {
  3. volatile unsigned int *pdw = (volatile unsigned int *)0;
  4. unsigned int dwVal;
  5. dwVal = *pdw;
  6. *pdw = 0x12345678;
  7. if (*pdw != 0x12345678)
  8. {
  9. return 1;
  10. }
  11. else
  12. {
  13. *pdw = dwVal;
  14. return 0;
  15. }
  16. }
 
用volatile声明一个寄存器变量*pdw指向的是0地址。向0地址处写一串数据,比如0x12345678,*pdw = 0x12345678,接着再从0地址中把数据读回来。
因为nor启动时,0地址是norflash的起始址,而向norflash写数据需要特定的命令时序,所以直接给地址赋值是不起做用的,所以读回来的数据还是norflash中原有的数据,这样通过*pdw != 0x12345678判断,此时为nor启动。
 
而在nand启动时,0地址是内存的地址映射,可以用直接赋值的方法向内存中写入数据,接着从0地址读回来的数据变为0x12345678,和之前写入的数据相等,此时就为nand启动,在操作完后,要将数据还原 *pdw = dwVal

uboot如何检测XC2440是从Nand或Nor启动的更多相关文章

  1. arm:启动代码判断是从nand启动还是从norflash启动,拷贝程序到内存的过程

    一.nand启动和nor启动:[1] CPU从0x00000000位置开始运行程序. 1.nand启动: 如果将S3C2440配置成从NANDFLASH启动(将开发板的启动开关拔到nand端,此时OM ...

  2. TQ2440烧写方法总结

    USB烧写 接线:需要连接串口线.USB下载线和电源线. 软件:USB转串口驱动(因为现在的笔记本上一般都没有串口).USB下载驱动和DNW. 网络烧写 接线:需要连接串口线.网线和电源线. 软件:T ...

  3. 在XC2440的uboot中挂载U盘,利用FAT文件系统读写U盘文件

    转:http://blog.chinaunix.net/uid-22030783-id-3347608.html 在XC2440的uboot_V1.3版本中已经支持USB HOST驱动和FAT文件系统 ...

  4. Uboot mmc命令解析&NAND flash uboot命令详解

    转载:http://blog.csdn.net/simonjay2007/article/details/43198353 一:mmc的命令如下: 1:对mmc读操作 mmc read addr bl ...

  5. 在 U-BOOT 对 Nand Flash 的支持

    1.1    U-BOOT 对从 Nand Flash 启动的支持 1.1.1   从 Nand Flash 启动 U-BOOT 的基本原理 1. 前 4K 的问题 如果 S3C2410 被配置成从 ...

  6. uboot启动流程

    uboot 的启动过程及工作原理2.1 启动模式介绍    大多数 Boot Loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅 ...

  7. 【转】Bootloader之uBoot简介(转)

    原文网址:http://blog.csdn.net/sadamoo/article/details/8139946 来自http://blog.ednchina.com/hhuwxf/1915416/ ...

  8. Nand Flash基础知识与坏块管理机制的研究

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  9. 3.移植uboot-使板卡支持nor、nand

    在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: 上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下 ...

随机推荐

  1. 学习 Linux,101: 自定义或编写简单脚本【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-lpic1-105-2/index.html 学习如何使用标准的 shell 语法.循环和控制结构,以及 ...

  2. C#反射动态调用dll中的方法及使用QuartZ.net实现作业调度

    using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; ...

  3. 004_ssh连接慢的问题的解决?

    <1>群中同学遇到的问题,我之前在uuwatch也遇到了同样的问题? 问个问题师兄们 突然之间 公司服务器连接很慢 连一个shell需要10几秒钟 服务器就在公司全是内网服务器, 我也不知 ...

  4. java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast

    严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.fi ...

  5. [PAT] 1141 PAT Ranking of Institutions(25 分)

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  6. python资源合集

    Python 官网: https://www.python.org/ Python2.7 doc: https://docs.python.org/2/ Python Package User Gui ...

  7. OpenAcc笔记——update

    program main use omp_lib use openacc implicit none real,allocatable:: v1(:) integer length, idx call ...

  8. 基础平台为第三方应用接入提供oauth2认证接口

    oauth2开放认证协议原理及案例分析 http://blog.csdn.net/volcan1987/article/details/7287605 谈谈基于OAuth 2.0的第三方认证 [上篇] ...

  9. web前端-《手机移动端WEB资源整合》——meta标签篇

    前端网页meta元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词.meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言,自动刷新并指向 ...

  10. getAllResponseHeaders() 必须放到onload里面

    <html><head> <meta charset="utf-8"> <title>test</title> < ...