s3c2440启动过程分析

s3c2440启动过程分析2440启动过程分析作者:王辉 2440启动过程算是一个难点,不太容易理解,而对于2440启动过程的理解,影响了后面裸机代码执行流程的分析,从而看出2440启动过程的重要性。 1 2440启动方式和启动方式选择在S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中搜索map,可以在第5章中搜索到下图。 从此

大家好,又见面了,我是你们的朋友全栈君。

2440启动过程分析

作者:王辉 


2440启动过程算是一个难点,不太容易理解,而对于2440启动过程的理解,影响了后面裸机代码执行流程的分析,从而看出2440启动过程的重要性。

 

2440启动方式和启动方式选择

S3C2440datasheetS3C2440A_UserManual_Rev13.pdf》中搜索map,可以在第5章中搜索到下图。

s3c2440启动过程分析 

从此图中,可以得知

OM[1:0] = 01,10,Not using NAND flash for boot ROM

OM[1:0] = 00  Using NAND flash for boot ROM

OM[1:0]又是什么呢?

S3C2440datasheetS3C2440A_UserManual_Rev13.pdf》中搜索OM

可以在第50页“S3C2440A Signal Descriptions”(芯片信号描述)得到下面的表格。

Signal

Input/

Output

Descriptions
OM[1:0] 1

OM[1:0] sets S3C2440A in the TEST mode, which is used only at fabrication.

Also, it determines the bus width of nGCS0. The pull-up/down resistor

determines the logic level during RESET cycle.

00: Nand-boot         01: 16-bit      10: 32-bit     11: Test mode


此外,
OM[1:0]还决定了nGCS0的总线宽度(后面可以知道:nGCS0对应bank0)只能在生产中才能将OM[1:0]设置成S3C2440A的测试模式;

在芯片RESET复位周期间,OM[1:0]上的上拉/下拉电阻确定其逻辑电平

00:Nand启动   01:16位    10:32位   11:测试模式

 

后面可以知道:

OM[1:0]=01,代表的是nor flash的数据宽度为16位。

OM[1:0]=10,代表的是nor flash的数据宽度为32位。

从而,可以得出结论:

2440启动方式有两种启动方式:NOR FLASH启动或NAND FLASH启动。

如何选择从那种方式启动呢?

答案是:通过2440启动方式OM0OM1引脚来选择。

 

S3C2440datasheetS3C2440A_UserManual_Rev13.pdf》中第5章还可以得到:

BANK0nGCS0)的数据总线应当配置为16位或32位的宽度。因为BANK0是作为引导ROMbank(映射到0x0000_0000),应当在第一个ROM访问前决定BANK0的总线宽度,其依赖于复位时OM[1:0]的逻辑电平。

OM1(操作模式1 OM0(操作模式0 引导ROM数据宽度
0 0 Nand Flash模式
0 1 16
1 0 32位
1 1 测试模式

JZ2440原理图NOR FLASH电路可以得知,使用的NOR FLASH的数据总线宽度为16位。

NOR FLASH使用了LDATA0到LDATA15,共16根,即NOR FLASH的数据总线宽度为16位)

从而,我们只会使用到OM1=0OM0=01这两种情况。

从而,可以得出下面的结论:

OM1 OM0 说明
0 1 nor启动
0 0 nand 启动

 

JZ2440原理图中,启动引脚配置OM0OM1的原理图如下:

(下图为开发板的启动选择的拨码开关)

 s3c2440启动过程分析

在开发板的PCB中,如图:

 

  s3c2440启动过程分析

补充

一般芯片有多种启动方式,而这些启动方式都可以由配置引脚来选择。芯片在启动时读取这些配置引脚的电平,就可以判断从那种方式启动。通常在研发阶段的实验板或者很多学习板(:JZ2440)通常采用开关或跳线帽等方式来将配置引脚的电平置为高电平或置为低电平。在出厂时, 配置引脚一般通过上下拉电阻来设置电平。

 

从NOR FLASH启动

NOR FLASH启动时,由前面的图1,由nGCS0控制的bank0直接连接了nor flash,而bank0能访问的地址范围为:256M(0X00000000—-0X08000000)JZ2440开发板使用的nor flash大小为2M(0X00000000—-0X00200000),从而S3C2440芯片的物理地址(0X00000000—-0X00200000)就由nor flash来占据。

选择从NOR FLASH启动,上电,S3C2440芯片就会去运行nor flash上地址为0x0处的指令。从后面的实验中,可以清楚的知道,读nor flash可以像读内存那样读,但是要用额外的命令向nor flash写入数据。如果nor flash像内存那样读和那样写,那nor flash完全可以被内存所替代。

s3c2440启动过程分析 

 

从NAND FLASH启动

在看本节内容之前,建议仔细看S3C2440AdatasheetS3C2440A_UserManual_Rev13.pdf》的第6章,对S3C2440芯片对nand flash的支持有一个大概的认识。

 

使用nand flash的理由

目前的NOR Flash存储器价格较高,相对而言SDRAMNAND Flash存储器更经济,这样促使了一些用户在NAND Flash中执行引导代码,在SDRAM中执行主代码。

可以得到一点:NAND Flash存储器更经济。

 

从NAND FLASH原理图来分析数据总线

可以在网上搜索nand  flash的特点,其实我们从原理图或者nand flash的引脚数目,也可以分析出:nand flash无法像访问内存SDRAM那样直接访问。

JZ2440开发板使用的NAND FLASH大小为256M。如果像内存SDRAM那样,一次将地址全部发出,至少需要28根地址线才能完成256M的寻址。由JZ2440开发板使用的NAND FLASH

芯片手册可知,该芯片实际使用了29根地址线。多一根地址线访问范围更大一些。

nand flash只有8根数据线和其他控制线,那怎么办?

通过查询NAND FLASH芯片手册知道,只能将地址分成多个字节,按照某种规则,分批传递给8根数据线。nand flash内部再按照某种规则,将几个批次的8根数据线上的数据合并成29根地址线的数据。从而,可以得出读写NAND FLASH都需要特定命令规则来控制传送的数据。

s3c2440启动过程分析 

如何识别nand flash的类型

nand flash的页容量有大页(2k1k/小页(512字节、256字节),总线宽度有8/16位,如何区分开发板使用的哪一类型的NAND FLASH呢?

S3C2440AdatasheetS3C2440A_UserManual_Rev13.pdf》的第6章,可以得到NAND FLASH启动时的引脚配置:


引脚 说明
OM[1:0] = 00 使能NAND Flash存储器引导启动
NCON

NAND Flash存储器选择(普通/先进)

0:普通NAND Flash256字或512字节页大小,34个地址周期)

1:先进NAND Flash1K  字或2K  字节页大小,45个地址周期)

GPG13

NAND Flash存储器页容量选择

0:页=256字  (NCON=0)或页=1K字  (NCON=1

1:页=512字节(NCON=0)或页=2K字节(NCON=1

GPG14

NAND Flash存储器地址周期选择

03个地址周期(NCON=0)或4个地址周期(NCON=1

14个地址周期(NCON=0)或5个地址周期(NCON=1

GPG15

NAND Flash存储器总线宽度选择

08位宽度

116位宽度

当复位时,芯片的NAND Flash控制器通过读取引脚NCONGPG13GPG14GPG15的电平来得到外接的NAND FLASH的页大小,地址周期,总线宽度等信息。

JZ2440V2开发板上实际使用的是大页(一页有2K字节)5个地址周期,8位宽度的NAND FLASH。在JZ2440原理图中,关于NAND FLASH的启动引脚配置的原理图如下:

s3c2440启动过程分析 

其中,R15R16R17R14标记为NC,即这些电阻没有焊接。

从而NCON为高电平,EINT21为高电平,EINT22为高电平,EINT23为低电平。

s3c2440启动过程分析 

从上图可以知道:

GPG13和 EINT21是同一信号。

GPG14和EINT22是同一信号。

GPG15EINT23是同一信号。

从而NCON为高电平,GPG13为高电平,GPG14为高电平,GPG15为低电平。

从而S3C2440A芯片从nand flash启动时,让S3C2440A芯片确定外部挂接的是一个大页(一页有2K字节)5个地址周期,8位宽度的NAND FLASH

 

nand flash启动流程

现在已经知道S3C2440A外部挂接的哪一类nand flash,那么就要准备去复制nand中的代码,然后去执行该代码。问题又来了,复制大小是多少?复制到哪里去?复制完接着做什么?并且这个复制过程也只能由S3C2440A的硬件来完成。

S3C2440AdatasheetS3C2440A_UserManual_Rev13.pdf》的第6章中:

S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash boot loader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4 KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstone will be executed.

 S3C2440A引导代码可以在外部NAND Flash存储器上存储。为了支持从NAND Flash启动,S3C2440A配备了一个内置的SRAM缓冲器,叫做“Steppingstone(垫脚石)”。从nand flash启动时,NAND Flash存储器的前4K字节将被加载到Steppingstone中并且执行加载到Steppingstone的引导代码。

复制大小为多少:4K

复制到哪里去:Steppingstone(垫脚石)

复制完接着做什么:执行加载到Steppingstone的引导代码。

 

从图1OM[10]=00时,选择从nand flash启动,S3C2440A的前4K(0X00000000—-0X00001000)就被BootSRAM(即:Steppingstone(垫脚石))所占据。

 总结:

s3c2440启动过程分析

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132188.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • URL过滤技术

    URL过滤技术

  • 怎么用python打开csv文件_Python文本处理之csv-csv文件怎么打开[通俗易懂]

    怎么用python打开csv文件_Python文本处理之csv-csv文件怎么打开[通俗易懂]csv英文全称是Comma-SeparatedValue,字面翻译逗号分隔值,是一种常见的文本格式文档,可用Excel打开,也可用常见的文本编辑器打开。csv文件经常用于在电子表格软件和纯文本之间交互数据。Python内置了csv模块,可以很方便的操作csv文件。下面介绍两种读写csv文件的方法。一、通过reader和writer函数先看一段简单的示例代码:text包含两个列表元素,首先把这两行…

  • 搜索引擎looka_Alook浏览器使用方法教程[通俗易懂]

    Alook极简且强大,致力成为iOS最佳浏览器。具有着与iCloud同步、内置14种语言翻译、自定义搜索引擎等多种功能,很多新用户还不知道如何使用这款APP,下面小编就和大家分享下Alook浏览器的使用教程。Alook浏览器使用方法:1、下载并打开ALOOK浏览器,会出现引导菜单该浏览器是没有广告的,要是没有会员看视频比在APP看还要给力。2、看视频的时候卡其开启视频悬窗功能,还有全屏模式和无图模…

  • 布局转模型无法生成新图形_三维数组初始化

    布局转模型无法生成新图形_三维数组初始化本系列文章为原创,转载请注明出处。作者:DongdongBai邮箱:baidongdong@nudt.edu.cn若您觉得本博文对您有帮助,请您为我点赞并关注我,以鼓励我写出更优秀的博文。谢谢!Eigen:C++开源矩阵计算工具——Eigen的简单用法Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,还包括解方程等功能。Eigen

    2022年10月19日
  • nginx启动、重启、关闭

    方式一:传统方法一、启动  cdusr/local/nginx/sbin./nginx二、重启  更改配置重启nginx  kill-HUP主进程号或进程号文件路径或者使用cd/usr/local/nginx/sbin./nginx-sreload  判断配置文件是否正确 nginx-t-c/usr/local/nginx/conf/nginx.conf或者cd…

  • java 动态规划 背包问题[通俗易懂]

    java 动态规划 背包问题[通俗易懂]背包问题具体例子:假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3。物品a1重量为3kg,价值为4;物品a2重量为4kg,价值为5;物品a3重量为5kg,价值为6。将哪些物品放入背包可使得背包中的总价值最大?首先想到的,一般是穷举法,一个一个地试,对于数目小的例子适用,如果容量增大,物品增多,这种方法就无用武之地了。  其次,可以先把价值最大的物体放入,这已经是贪

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号