s3c2440存储控制器和地址以及启动的理解

1.首先应该先了解Flash ROM的种类

  NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。
  NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。
  结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.
  Nand Flash的命令、地址、数据都通过I/O口发送,管脚复用,这样做做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果设计者想将NAND FLASH更换为更高密度、更大容量的,也不必改动电路板。在S3C2440中NANDFLASH的控制依靠NAND FLASH控制器。不能够执行程序,总结其原因如下 :
(1) NAND FLASH本身是连接到了控制器上而不是系统总线上。CPU启动后是要取指令执行的,如果是SROM、NOR FLASH 等之类的,CPU 发个地址就可以取得指令并执行,NAND FLASH不行,因为NAND FLASH 是管脚复用,它有自己的一套时序,这样CPU无法取得可以执行的代码,也就不能初始化系统了。
(2)NAND FLASH是顺序存取设备,不能够被随机访问,程序就不能够分支或跳转,这样你如何去设计程序。

2.在2440中为什么可以配置成从Nand Flash中启动程序?
  如果S3C2440被配置成从Nand Flash启动, S3C2440的Nand Flash控制器有一个特殊的功能,在S3C2440上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部SRAM中,(此内部RAM被称为Steppingstone)并把0x00000000设置内部RAM的起始地址,CPU从内部RAM的0x00000000位置开始启动。这个过程不需要程序干涉。程序员需要完成的工作,是把最核心的启动程序放在Nand Flash的前4K中,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到SDRAM中运行。NF地址不是线性的,程序不能直接运行,必须拷贝到线性RAM中

3.启动方式:

Samsung S3C2440支持Nor Flash和Nand Flash启动,主要由OM[1:0]这两位来决定从何处启动。具体含义如下:

OM[1:0]=00时,处理器从NAND Flash启动;
OM[1:0]=01时,处理器从16位宽度的ROM启动;
OM[1:0]=10时,处理器从32位宽度的ROM启动;
OM[1:0]=11时,处理器从Test Mode启动。

  ARM的启动都是从0地址开始,所不同的是地址的映射不一样。在ARM开电的时候,要想让ARM知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这时候你的程序还没启动,这时候ARM会通过引脚的电平来判断。
(1)当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间(Bank0),也就是Norflash,程序就会从Norflash中启动,ARM直接取Norflash中的指令运行。
(2)当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,ARM会自动把NANDflash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。这时NANDFlash中的前4K就是启动代码(他的功能就是初始化硬件然后在把NANDFlash中的代码复制到RAM中,再把相应的指针指向该运行的地方)

4.启动代码应该做什么?
  由于Nand Flash控制器从Nand Flash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K里,我们必须完成S3C2440的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。至于将2440当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K的时候,只要下到nand flash中就会被搬运到内部RAM中执行了。bootloader在某种意义上来说即是一个启动代码,种类有很多(vivi,uboot 等),但是功能上无非就是完成一些初始化。bootloader是芯片复位后进入操作系统之前执行的一段代码,完成由硬件启动到操作系统启动的过渡,为运行操作系统提供基本的运行环境,如初始化CPU、堆栈、初始化存储器系统等,其功能类似于PC机的BIOS。

在实际的开发中,一般可以把bootloader烧入到Norflash,程序运行可以通过串口交互,进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。Norflash中的Bootloader还可以烧录内核到Norflash等等功能。

5.存储控制器的作用:
  在2440中分了8个bank,每个bank的基地址由nCGSx来选择,每个bank都接外设之后,就可以通过存储控制器来进行地址上的选择了。每个bank与外设的连接方式不一样,主要看外设是每次进行多少位的数据传输,如果是8位,这样CPU的地址线A0就可以直接接外设的A0,如果是16位,那么CPU的A1就该接到外设的A0,以此类推。nor flash接在bank0,数据线为16位。存储控制器的特性如下:
  大小端设置;
  地址空间:每个bank为128MB (总共1GB);
  除了bank0其余所有banks的数据位宽是可编程的(8/16/32-bit);(bank0是16/32位)
   总共8个memory banks,其中6个bank是接ROM,SRAM等,其余2个bank是接ROM,SRAM,SDRAM等;
  7个memory bank的起始地址是固定的;(发现size也是固定的,128MB)
  1个memory bank的起始地址和大小是可灵活可变的;
  所有banks的访问周期数是可编程的;
  支持片外等待信号以扩充总线周期;
  SDRAM在Power down模式下支持自动刷新。

  这里看到有8个BANK,然后他们地址怎么就可以确定呢?理解:外面一共就使用了27根地址线,还有5根地址线没有被使用,5根地址线就有16个选择了,初步估计其中的3根又被用来选择这8个bank了,所以才有那样的地址~~至于那个可变地址,暂时还想不出什么解释,好像是叫部分译码。

6.Nand Flash控制器:
   自动启动: 系统复位后,boot code搬运到4KB Steppingstone,然后在其内部执行;
   Nand Flash存储接口: 支持256Words,512Bytes,1KWords和2KBytes Page;
  软件模式: 用户能直接访问nand flash;
  接口: 支持8/16-bit Nand flash存储接口;
  支持大小端模式;
  硬件ECC发生器;
  Steppingstone: 4KB SRAM Buffer,在nand flash启动过后可以用作它处.

当系统处在复位状态时,Nand flash控制器从管脚NCON,GPG13,GPG14,GPG15得到nand flash的一些信息(如page size,bus width等)。在上电或系统复位之后,则Nand flash控制器将自动加载4KB boot loader代码,之后就是在steppingstone里执行.
  注意:在自动启动这个过程中,ECC模块是不发挥作用的。

引用1:http://blog.sina.com.cn/s/blog_5ddb672b0100fkcf.html

引用2:http://www.cnblogs.com/geneil/archive/2011/12/20/2295220.html

时间: 2024-09-30 06:27:12

s3c2440存储控制器和地址以及启动的理解的相关文章

存储控制器和SDRAM 实验

S3C2440 存储控制器(memory controller)提供了訪问外部设备所需的信号,这是一种通过总线形式来訪问扩展的外设. S3C2440  的存储器控制器有下面的特性: 支持小字节序.大字节序(通过软件选择) 每一个BANK的地址空间为128MB.总共1GB(8 BANKs) 可编程控制的总线位宽(8/16/32 -bit).只是 BANK0 仅仅能选择两种位宽(16/32 -bit) 总共8个BANK. BANK0 ~ BANK5 能够支持外接 ROM,SRAM等,BANK6 ~

Mini2440存储控制器

以前杂事比较多,没有仔细学习,这学期尽可能利用空闲时间好好学习理解. @************************************************************************* @ 设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 @ 2015.11.8 by Huangtao @************************************************************************* @ 总结的

TQ2440存储控制器实验

一,实验原理: 首先使用汇编语言设置好存储控制器,使得外接的SDRAM可用,然后把程序本身从片内RAM(Steppingstone)拷贝到SDRAM处,最后跳到SDRAM中执行. 二,实验目的: 1.掌握SDRAM的初始化方法 2.掌握位置无关指令,相对跳转,绝对跳转 3.掌握代码重定位 三,实验内容: 1.准备知识: 1.1 访问SDRAM的方法: SDRAM的内部是一个存储阵列,阵列就好比一个excel表格,将数据填进表格的单元格中,excel中的每个单元格会有"行"和"

u-boot移植(七)---代码修改---存储控制器

一.CPU访问芯片的条件 CPU通过访问存储控制器,来读取外部设备的数据. CPU想访问一个芯片,需要如下条件(配置信息): 地址线 数据线:8位/16位/32位数据宽度 时钟/频率 其他芯片相关的特性:比如SDRAM,有行地址.列地址和bank SDRAM的访问和表格检索的原理一样,先指定一个行(Row),再指定一个列(Columu),就可以准确找到所需要的单元格.这个单元格称为存储单元,这个表格(存储阵列)就是逻辑Bank(Logical Bank,即L-Bank),SDRAM一般含有4个L

【嵌入式Linux+ARM】存储控制器(操作SDRAM)

1.存储控制器介绍 s3c2440中的"存储管理器"提供了访问外部设备所需要的信号,有如下特性: 1.支持小字节序.大字节序(通过软件选择) 2.每个BANK为128M,一共有8个BANK,共1G 3.BANK0~BANK5可以支持外接ROM.SRAM等,BANK6~BANK7除可以支持ROM.SRAM外 还支持SDRAM 4.BANK0~BANK7的起始地址是固定的 5.外接SDRAM时,支持自刷新和省电模式 s3c2440上有ADDR0~ADDR26访问范围只有128M,如何达到上

今天学习的裸板驱动之存储控制器心得(初始化SDRAM)

CPU只管操作地址,而有些地址代表的是某些存储设备. 但是操作这些存储设备需要很多东西,比如需要制定bank,行/列地址等.所以就有了存储管理器,用来处理这种CPU操作的地址和存储设备间的转换. (1)存储管理器在得到一个CPU的地址时,根据地址范围和自身的信息,知道这个地址位于那个片选. (2)若该片选连接的是一个SDRAM,还会根据地址范围和自身的信息,知道对应的如SDRAM中的BANK,行/列地址等. 所以,配置存储管理器 (3)根据芯片手册知道这个芯片的存储管理器的片选有8个,说明它可以

自己学驱动12——存储控制器

1.2440的BANK 2440一共提供给外部8个BANK(BANK0~BANK7),每个BANK均为128MB的地址空间,一共1GB地址空间.2440对外引出了27根地址线ADDR0~ADDR26,这27根地址线的访问地址大小为128MB,2440对外还引出了8根片选信号nGCS0~nGCS7,对应于BANK0~BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平,27根地址线与8根片选信号(相当于多出3根地址线)共同完成1GB空间的访问操作. 2440作为32位的CPU,可以使

修改Active Directory域控制器IP地址

在企业中,部署微软Active Directory域控制器时,常常因为以下几个原因需要重新配置DC服务器的IP地址: a) 管理员配置了错误的DC服务器的IP地址: b) 因网络变更,重新规划企业IP地址. 这两种现象常常在企业中出现,也经常会出现域中资源与DC服务器无法正常通信,而造成一些未知的错误.今天给大家演示当修改企业Active Directory域控制器IP地址时,需要注意的相关事项以及验证修改IP地址后是否可以正常工作. 1)登陆DC服务器,查看当前DC服务器的IP地址.点击服务器

PMC 荣膺ChannelPro读者选择最佳存储控制器金奖

 PMC荣膺ChannelPro读者选择最佳存储控制器金奖 Adaptec RAID控制器脱颖而出夺取桂冠 引领大数据连接.传送以及存储,提供创新半导体及软件解决方案的PMC?公司(纳斯达克代码:PMCS)今日宣布,获得ChannelPro-SMB 2015年度读者选择最佳SAS/SATA RAID控制器金奖. PMC负责渠道和数据中心市场营销总监Toy Winslow谈到:"获得该奖项充分证实了我们的Adaptec产品在渠道市场上展现的卓越性能,兼容性和可扩展性.获得客户和合作伙伴对我们P