S3C2440 SDRAM驱动配置编程

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

<

div id=”content”>关于nor flash,nand flash, sram,sdram编址等困惑

SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)也就是通常所说的内存。内存的工作原理、控制时序、及相关控制器的配置方法一直是嵌入式系统学习、开发过程中的一个难点。我们从其硬件的角度来分析其原理,然后再引出SDRAM的驱动编写过程。

内存是代码的执行空间,以PC机为例,程序是以文件的形式保存在硬盘里面的,程序在运行之前先由操作系统装载入内存中,由于内存是RAM(随机访问存储器),可以通过地址去定位一个字节的数据,CPU在执行程序时将PC的值设置为程序在内存中的开始地址, CPU会依次的从内存里取址,译码,执行,在内存没有被初始化之前,内存好比是未建好的房子,是不能读取和存储数据的,因此我们要想让MTOS运行在内存里必须进行内存的初始化。

其实S3C2440内部带有存储器硬件控制器,针对SDRAM来说,有硬件控制机制,驱动内存时只需要先配置与内存存储相关的寄存器,然后给定内存地址值就可以实现存储,而像其他的信号线,nWE,CLK,nSRAS,nSCAS等都是由硬件来完成操作的,使用起来方便了不少。

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-04/101119.htm

相关阅读

S3C2440上RTC时钟驱动开发实例分析 http://www.linuxidc.com/Linux/2013-06/86042.htm

S3C2440的UART功能测试 http://www.linuxidc.com/Linux/2013-05/85158.htm

S3C2440 地址分配硬件连接及其启动原理分析 http://www.linuxidc.com/Linux/2013-04/83218.htm

S3C2440时钟设置 http://www.linuxidc.com/Linux/2013-03/81245.htm

linux-2.6.14移植到S3C2440 http://www.linuxidc.com/Linux/2012-12/77125.htm

S3C2440开发板LED驱动——ioremap 映射 http://www.linuxidc.com/Linux/2012-12/76084.htm

———————————分割线———————————

例如:将一个地址处的数据或者代码搬运到SDRAM中去:

ldr r0,=ENTRY

ldr r3,=ROBASE

ldr r1,[r0]

str r1,[r3]

这几部就完成了将ENTRY(nor or nand flash)处的数据写到内存地址为ROBASE地方处。

通用存储设备:

在介绍内存工作原理之前有必要了解下存储设备的存储方式:ROM,RAM

l  ROM(Read-Only Memory):只读存储器,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。如:PC里面的BIOS。

l  RAM(Random Access Memory) :随机访问存储器,存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。可以理解为,当你给定一个随机有效的访问地址,RAM会返回其存储内容(随机寻址),它访问速度与地址的无关。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间内随机访问使用的程序。计算机系统里内存地址是一个四字节对齐的地址(32位机),CPU的取指,执行,存储都是通过地址进行的,因此它可以用来做内存。

RAM按照硬件设计的不同,随机存储器又分为DRAM(Dynamic RAM)动态随机存储器和SRAM(Static RAM) 静态随机存储器。

l  DRAM:它的基本原件是小电容,电容可以在两个极板上短时间内保留电荷,可以通过两极之间有无电压差代表计算机里的0和1,由于电容的物理特性,要定期的为其充电,否则数据会丢失。对电容的充电过程叫做刷新,但是制作工艺较简单,体积小,便于集成化,经常做为计算机里内存制作原件。比如:PC的内存,SDRAM, DDR, DDR2, DDR3等,缺点:由于要定期刷新存储介质,存取速度较慢。

l  SRAM:它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。因此其存取速度快,但是体积较大,功耗大,成本高,常用作存储容量不高,但存取速度快的场合,比如CPU的L1 cache,L2cache(一级,二级缓存) ,寄存器。

本文是以开发板MICRO2440为例子

MICRO2440在出厂时搭载了三种存储介质:

(1)NOR FLASH(2M):ROM存储器,通常用来保存BootLoader,引导系统启动

(2)NAND FLASH(256M,型号不一样,Nandflash大小不一样):保存操作系统映像文件和文件系统

(3)SDRAM(64M):内存,执行程序

l  NORFLASH:它的特点是支持XIP芯片内执行(eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中,也就是说可以随机寻址。NOR FLASH的成本较高。

l  NAND FLASH:它能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。其成本较低,不支持XIP。可做嵌入式里的数据存储介质。如:手机存储卡,SD卡等。

 1.1.1  S3C2440存储器地址段(Bank)

S3C2440对外引出了27根地址线ADDR0~ADDR26,它最多能够寻址128MB,而S3C2440的寻址空间可以达到1GB,这是由于S3C2440将1GB的地址空间分成了8个BANKS(Bank0~Bank7),其中每一个BANK对应一根片选信号线nGCS0~nGCS7,当访问BANKx的时候,nGCSx管脚电平拉低,用来选中外接设备, S3C2440通过8根选信号线和27根地址线,就可以访问1GB。如图2-48所示。

图2-48 S3C2440存储器BANK

如图所示,左侧图对应不使用Nandflash启动时(通过跳线设置),存储器Bank分布图,通常在这种启动方式里选择Norflash启动,将Norflash焊接在Bank0, 系统上电后,CPU从Bank0的开始地址0x00000000开始取指运行。

上图右侧是选择从Nandflash引导启动(通过跳线设置),其中BANK[0]映射了2440内部的SRAM,通过nGCS0信号线来选通,系统上电后,CPU会自动将Nandflash里前4K的数据复制到S3C2440内部一个4K大小 SRAM类型存储器里(叫做Steppingstone),然后从Steppingstone取指启动。

其中Bank0~Bank5可以焊接ROM或SRAM类型存储器,Bank6~Bank7可以焊接ROM,SRAM,SDRAM类型存储器,也就是说,S3C2440的SDRAM内存应该焊接在Bank6~Bank7上,最大支持内存256M,Bank0~Bank5通常焊接一些用于引导系统启动小容量ROM,具体焊接什么样存储器,多大容量,根据每个开发板生产商不同而不同,比如MINI2440开发板将2M的Norflash焊接在了Bank0上,用于存放系统引导程序Bootloader,将两片32M,16Bit位宽SDRAM内存焊接在Bank6和Bank7上,并联形成64M,32位内存。

由于S3C2440是32位芯片,理论上讲可以达到4GB的寻址范围,除去上述8个BANK用于连接外部设备,还有一部分的地址空间是用于设备特殊功能寄存器,其余地址没有被使用。

表2-14 S3C2440设备寄存器地址空间

外接设备 起始地址 结束地址
存储控制器 0x48000000 0x48000030
USB Host控制器 0x49000000 0x49000058
中断控制器 0x4A000000 0x4A00001C
DMA 0x4B000000 0x4B0000E0
时钟和电源管理 0x4C000000 0x4C000014
LCD控制器 0x4D000000 0x4D000060
NAND FLASH控制器 0x4E000000 0x4E000014
摄像头接口 0x4F000000 0x4F0000A0
UART 0x50000000 0x50008028
脉宽调制计时器 0x51000000 0x51000040
USB设备 0x52000140 0x5200026F
WATCHDOG计时器 0x53000000 0x53000008
IIC控制器 0x54000000 0x5400000C
IIS控制器 0x55000000 0x55000012
I/O端口 0x56000000 0x560000B0
实时时钟RTC 0x57000040 0x5700008B
A/D转换器 0x58000000 0x58000010
SPI 0x59000000 0x59000034
SD接口 0x5A000000 0x5A000040
AC97音频编码接口 0x5B000000 0x5B00001C

 

更夼/div>

未经允许不得转载:演道网 » S3C2440 SDRAM驱动配置编程

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册