转: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. idea和maven使用的点点滴滴

    1.如果在使用maven打包时想跳过单元测试,可以在pom文件中配置如下代码 <build> <plugins> <plugin> <groupId>o ...

  2. Python——format()/str.format()函数

    格式化输出,除了类似于C语言的格式化输出外,还有str.format()方法,Python内建的format()函数,允许用户将待输出值以参数的形式,调用format()函数,在Python交互式sh ...

  3. shell 中的<,<<,>,>>

    相信熟悉linux的童鞋不会对这四个符合陌生,shell脚本的文件流有时候真的挺容易搞晕人的,下面我们一起了解一下吧 参考链接:http://www.cnblogs.com/chengmo/archi ...

  4. POJ - 2478

    Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12802   Accepted: 4998 D ...

  5. 用淘宝镜像cnpm代替npm

    安装淘宝镜像cnpm: $ sudo npm install -g cnpm --registry=https://registry.npm.taobao.org 然后就大部分可以用cnpm来代替np ...

  6. 【hdoj_2187】老人是真饿了

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2187 题意:由很多种价格的大米,在经费一定的情况下,买重量更多的大米,并且题目假设经费买不光所有的大米. ...

  7. ZIP排除指定目录进行压缩

    zip -r glog-0.3.5.zip glog-0.3.5/  -x "glog-0.3.5/doc/*" unzip -v glog-0.3.5.zip 进行查看ZIP的内 ...

  8. Go语言表组测试示例

    比基本测试多个循环... package main import ( "testing" "net/http" ) const checkMark = &quo ...

  9. (1)ansible基本配置

    1)ansible安装 yum install epel-release -y yum install ansible -y 2)ansible语法 语法: ansible <host-patt ...

  10. centos7 mariaDB安装

    参考:http://www.linuxidc.com/Linux/2016-03/128880.htm