S3C2440从NAND Flash启动和NOR FLASH启动的问题
1.为什么NAND FLASH不能直接运行程序
NAND FLASH本身是连接到了控制器上而不是系统总线上。CPU运行机制为:CPU启动后是要取指令执行的,如果是SROM、NOR FLASH 等之类的,CPU 通过地址线发个地址就可以取得指令并执行,NAND FLASH不行,因为NAND FLASH 是管脚复用,它有自己的一套时序,这样CPU无法取得可以执行的代码,也就不能初始化系统了。
NAND FLASH是顺序存取设备,不能够被随机访问,程序就不能够分支或跳转,这样你如何去设计程序。
U-BOOT 支持ARM、 PowerPC等多种架构的处理器,也支持Linux、NetBSD和VxWorks等多种操作系统,主要用来开发嵌入式系统初始化代码 bootloader。bootloader是芯片复位后进入操作系统之前执行的一段代码,完成由硬件启动到操作系统启动的过渡,为运行操作系统提供基本的运行环境,如初始化CPU、堆栈、初始化存储器系统等,其功能类似于PC机的BIOS。
2.为什么s3c2440可以从NAND FLASH启动
椐了解 NOR FLASH 是容量小,速度快,稳定性好,适合做程序存储器。
NAND FLASH 总容量大,适合做数据存储器是不能从NAND FLASH启动的,NAND FLASH是的读写时序是不能直接有ARM硬件产生的,要读写NAND FLASH是要通过程序来实现的,很明显能看出来的就是NAND FLASH只有8个数据、地址复用的数据地址接口。2410/2440可以直接从NAND FLASH启动的,因为它把NAND前面的4K映射到了RAM的空间
2.1 Flash种类
NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。
NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。
通俗的说,就是光给地址不行,要先命令,再给地址,才能读到NAND的数据。而且都是在一个总线完成的。
结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.
装载程序只能从mask rom 或者Nor flash。
三星的2410可以从NAND FLASH启动程序,它会把第一块的前4KB复制到内部SRAM中然后从SRAM执行,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到SDRAM中运行(NAND FLASH地址不是线性的,程序不能直接运行,必须拷贝到线性RAM中)
3.NAND启动和NOR启动:
需要检测硬件启动方式,启动方式是由硬件OM0管脚决定的,软件无法检测硬件电平状态,但可以根据CPU的启动特性来检测。
3.1 NAND启动:
如果配置为NAND FLASH启动(启动模式选择开关拔到nand端,此时OM0管脚拉低)S3C2440的NAND控制器会自动把NAND FLASH中的前4K代码数据搬到内部SRAM中(地址为0x40000000),同时还把这块SRAM地址映射到了0x00000000地址。CPU从0x00000000位置开始运行程序。 【从NAND FLASH启动CPU时,CPU会通过内部的硬件将NAND FLASH开始的4KB数据复制到称为“Steppingstone”的4KB的内部RAM中(起始地址为0),然后跳到地址0开始执行】
3.2 NOR启动:
如果配置为NOR FLASH启动(启动模式选择开关拔到nor端,此时OM0管脚拉高),0x00000000就是NOR FLASH实际的起始地址,NOR FLASH中的程序就从这里开始运行,不涉及到数据拷贝和地址映射。
3.3 总结:
NAND启动时,地址0x00000000为内部SRAM映射的地址;
NOR启动时,地址0x00000000为NOR FLASH的实际起始地址。向NOR FLASH中写数据需要特定的命令时序,而向内存中写数据可以直接向内存地址赋值。
对于S3C2440处理器 M[1:0]选择01 或 10时:norflash基地址为0x00000000 ,SRAM顶端地址0x40000FFF。上电后处理器直接从0x00000000处取出指令,arm处理器的SP(堆栈指针寄存器)指向0x40000FFF。
OM[1:0]选择00,S3C2440会启用内部的SRAM缓冲器会将nandflash中的前4KB大小的程序自动拷贝到BootSRAM中。BootSRAM基地址0x00000000,顶端0x00000FFF。上电后,arm处理器从0x00000000取出第一条指令,arm处理器的SP(堆栈指针寄存器)指向0x00000FFF。
4.从Nand Flash启动U-BOOT的基本原理
4.1 前4K问题
如果S3C2410被配置成从Nand Flash启动(配置由硬件工程师在电路板设置), S3C2410的Nand Flash控制器有一个特殊的功能,在S3C2410上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部RAM中,并把0x00000000设置内部RAM的起始地址,CPU从内部RAM的0x00000000位置开始启动。这个过程不需要程序干涉。程序员需要完成的工作,是把最核心的启动程序放在Nand Flash的前4K中。
4.2 程序大于4K时怎么办?
那么当程序大于 4k 的时候,当我们以 nand flash启动后,前面的4Kb 被拷贝到 片内RAM中去执行(自动完成)。我们在这前4K的程序中初始化SDRAM(SDRAM 使用前需要初始化) ,然后将剩下的程序拷贝到 SDRAM中(不是只有4kb 被拷贝到片内RAM中执行了嘛)然后跳转到 SDRAM中去执行剩下的程序。
那么也就是说 通常当程序大于 4kb的 时候,我们就需要把程序拷贝到SDRAM中去运行。(程序小于4KB 那么也就可以不用拷贝了,以nand flash方式 启动后,程序全被拷贝到 片内4kb的 RAM中去运行。)
那么,既然程序大于4kb的时候需要从nand flash中拷贝到 SDRAM中去运行。自然可以想到 烧到nand flash中的程序前面一部分代码应该 是初始化SDRAM(程序最终需要拷贝到SDRAM中去运行)和 将NAND flash中的剩余的程序拷贝到SDRAM中去(全考过去也行,方便点),然后跳转到SDRAM中执行。
4.2 启动程序的安排
由于Nand Flash控制器从Nand Flash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K里,我们必须完成S3C2410的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。
u-boot源码不支持从nand flash启动,可是s3c2410支持从nand flash启动,开发板(sbc-2410x)加电后s3c2410将nand flash的前4k(保存有u-boot的部分功能--拷贝功能--把nand flash中的内容拷贝到SDRAM)拷贝到sram(s3c2410芯片内的sram)。这就需要修改u-boot源码,增加u-boot的功能: 使u-boot在得到执行权后能够将其自身拷贝到开发板上SDRAM中,以便处理器能够执行u-boot。
Nand Flash的命令、地址、数据都通过I/O口发送,管脚复用,这样做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果设计者想将NAND FLASH更换为更高密度、更大容量的,也不必改动电路板。
5.为什么NOR启动要将sp设置为0x40000000+4096
用NOR启动时,片内的存储控制器的BANK0-BANK7这8个BANK都对应了其他用途,所以设计者在BANK7结束的地址0x40000000的地方作为NOR FLASH的启动地址,而NAND FLASH启动的地址则是0x00000000。
因为对于启动文件.S来说,4K的空间是足够存放,代码段、BSS......和堆栈段了,因为堆栈的SP是从高地址往低地址移动的,所以要将堆栈的起始地址放在堆栈段的高地址。
你也可以不用设置成4096,但要保证堆栈的长度不能和下面其他段重叠,若重叠,就会出BUG,保险值是4096(4K,见上图),因为SRAM就是4K设计的。
大家的鼓励是我继续创作的动力,如果觉得写的不错,欢迎关注,点赞,收藏,转发,谢谢!
如遇到排版错乱的问题,可以通过以下链接访问我的CSDN。
CSDN:CSDN搜索“嵌入式与Linux那些事”
欢迎欢迎关注我的公众号:嵌入式与Linux那些事,领取秋招笔试面试大礼包(华为小米等大厂面经,嵌入式知识点总结,笔试题目,简历模版等)和2000G学习资料。
S3C2440从NAND Flash启动和NOR FLASH启动的问题的更多相关文章
- u-boot移植总结(三)(转)S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A) 转载自:http://www.cnblogs.com/idle_man/archive/2010/12/23/19153 ...
- 十八、Nand Flash驱动和Nor Flash驱动
在读者学习本章之前,最好了解Nand Flash读写过程和操作,可以参考:Nand Flash裸机操作. 一开始想在本章写eMMC框架和设备驱动,但是没有找到关于eMMC设备驱动具体写法,所以本章仍继 ...
- 痞子衡嵌入式:揭秘i.MXRT1170上串行NOR Flash双程序可交替启动设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1060/1010上串行NOR F ...
- 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT500/600上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1170上串行NOR Fla ...
- arm:启动代码判断是从nand启动还是从norflash启动,拷贝程序到内存的过程
一.nand启动和nor启动:[1] CPU从0x00000000位置开始运行程序. 1.nand启动: 如果将S3C2440配置成从NANDFLASH启动(将开发板的启动开关拔到nand端,此时OM ...
- Android WebView播放视频flash(判断是否安装flash插件)
Android WebView播放flash(判断是否安装flash插件) 最近帮一个同学做一个项目,断断续续的一些知识点记录一下.一个页面中有一个WebView,用来播放swf,如果系统中未安装f ...
- [转载]用 grub2 启动 clover.iso 来启动 OS X
这个帖子只用来解决特定问题,是楼主这两天辛苦的结晶,如果你遇到了跟我差不多的情形,你就可以尝试这个解决方案. 特定情景:1.不管你的机器支不支持 UEFI ,反正你现在是用传统 BISO + MBR ...
- 启动hadoop,没有启动namenode进程。log4j:ERROR setFile(null,true) call faild.
启动hadoop,没有启动namenode进程.log4j:ERROR setFile(null,true) call faild. 解决办法: cd /home/hadoop/hadoop-en ...
- 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...
随机推荐
- Django启动服务的流程
我晕,启动个服务浪费快一个小时的时间,记录下步骤吧. 1.D:\django\newworld>python manage.py runserver Performing system chec ...
- PHP反序列化漏洞-CVE-2016-7124(绕过__wakeup)复现
前言 最近电脑也不知怎么了时不时断网而且我竟然找不出原因!!!很诡异.... 其他设备电脑都OK唯独我的电脑 时好时坏 我仿佛摸清了我电脑断网的时间段所以作息时间都改变了 今天12点多断网刷了会手 ...
- NPOI读写Excel组件封装Excel导入导出组件
后台管理系统多数情况会与Excel打交道,常见的就是Excel的导入导出,对于Excel的操作往往是繁琐且容易出错的,对于后台系统的导入导出交互过程往往是固定的,对于这部分操作,我们可以抽离出公共组件 ...
- Earmaster——音乐爱好者必备软件
有很多喜爱音乐但是却由于一些"不可抗力"而没能学习到音乐基础的小伙伴,相信你们在自学乐器或是声乐的时候总会因为基础不扎实而看不懂一些复杂的乐谱,换别的曲子练习之后发现依旧看不懂,由 ...
- CleanMyMac X“断网激活”真的能激活软件吗?
CleanMyMac X帮助Mac系统进行垃圾清理,清除多余的缓存.应用程序等,在提高工作效率上起了很大的作用.但是随着对软件的需求不断增加,很多人开始研究通过捷径破解正版软件,但是是否能成功呢?今天 ...
- 解决Tuxera NTFS for Mac软件安装问题
在听到小凡的电话说"Tuxera NTFS for Mac软件安装失败,怎么办"的时候,小编心里真像有一万头草泥马在奔腾--苹果软件还能安装失败!? 挥手把一万头草泥马赶走,脑补着 ...
- Boom 3D的广播有哪些,有啥特色
Boom 3D(Windows系统)不仅为用户提供了包括3D立体音效.古典音乐音效在内的多种音效增强功能,而且还为用户提供了广播功能.该广播功能不仅涵盖了国内广播节目,而且还涵盖了国际广播节目. 接下 ...
- L - Deque 题解(区间dp)
题目链接 题目大意 给你一个双端队列里面有n个数组元素(n<=3000) 有两个人,每次一个人都可以选择队列里的首元素或者尾元素删除,轮流进行,删除后那个人即可获得这个元素的值 第一个人的总权值 ...
- 《Spring Boot 实战纪实》之如何攥写需求文档
目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...
- [BUGCASE]FixedDataTable表格数据渲染错误
一.问题描述 广告配置中绑定第三方规格ID表格数据,有一部分展示错乱,具体如下: 表格组件使用 Facebook 的 (fixed-data-table) 组件 二.原因分析 1.检查props 先查 ...