一、SDRAM(HY57V561620F)连线分析

1、  S3C2440 有27根地址线ADDR[26:0],8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访问bankx 的地址空间,ngcsx引脚为低电平,选中外设。

2^27=128MByte, 8*128Mbyte = 1Gbyte,所以S3C2440 总的寻址空间是1Gbyte。但市面上很少有32位宽度的单片SDRAM,一般选择2片16位SDRAM 扩展得到32位SDRAM.

2、这里选择的SDARM是HY57V561620F,4Mbit * 4bank *16I/O,共32Mbyte。

首先了解下SDRAM 的寻址原理。 SDRAM 内部是一个存储阵列,可以把它想象成一个表

格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格称为逻辑BANK。目前的SDRAM基本都是4个BANK。寻址的流程就是先指定BANK地址,再

指定行地址,最后指定列地址。这就是SDRAM的寻址原理。存储阵列示意图如下:

查看HY57V561620F 的资料,可知这个SDRAM有13根行地址线 RA0-RA12, 9根列地址线CA0-CA8,2根BANK选择线 BA0-BA1。

SDRAM 的地址引脚是复用的,在读写SDRAM存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。

/RAS是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;

/CAS 是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中。

地址连线如下图:

问题1:SDRAM:的A0接S3C2440的ADDR2,A0 为什么不接ADDR0?

要理解这种接法,首先要清楚在CPU的寻址空间中,字节(8位)是表示存储容量的唯一单位。用2片HY57V561620F扩展成32位SDRAM,可以认为每个存储单元是4个字节。因此当它的地址线A1:A0=01 时,处理器上对应的地址线应为ADDR3:ADDR2=01(因为CPU的寻址空间是以Byte 为单位的)。所以SDRAM的A0引脚接到了S3C2440的ADDR2 地址线上。同理,如果用1片HY57V561620F,数据线是16位,因为一个存储单元是2个字节,这时SDRAM的A0要接到S3C2440的ADDR1上。

PS:这里解释得可能还是不太明白,2440或2410中地址线都是从ADDR2中开始连接的,即A0-ADDR2、An- ADDR(n+2)、这是因为ARM是32位处理器所以它一次处理数据都是以32位为单位的,也就是说它读或者写数据时,地址只能为0x0000_0000、0x0000_0004、0x0000_0008。。。即4字节对齐,因为一般DDR的数据线都为16位,所以为了得到32位的数据,一般都是将2个DDR连在一起,它们的地址相同,所以对已DDR而言是一个地址对应4个字节(因为一个DDR对应2个字节,两个DDR就对因4个字节),但是对于CPU而言一个地址只对应1个字节,所以这里就存在一个地址转换问题,即使CPU的0~3地址里的数据对应DDR的0地址数据,CPU的4~7地址的数据对应DDR的1地址的数据,所以CPU的0地址对应DDR的0地址,0X04地址对应DDR中1地址,0x08地址对应DDR中2地址,可以看出,DDR的地址刚好是CPU寻址向右移动两位,所以2440或2410中地址线都是从ADDR2开始连接的。

就是说SDRAM的A0接S3C2440的哪一根地址线是根据整个SDRAM的数据位宽来决定的

问题2:上图接线中,BA0,BA1接ADDR24,ADDR25,为什么用这两根地址线呢?

BA0~BA1代表了SDRAM 的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为64MByte,那就需要A25~A0(64M=2^26)地址线来寻址,所以BA1~BA0地址线应该接到S3C2440的ADDR25~ADDR24 引脚上。

13根行地址线 + 9根列地址线 = 22根地址线。另外HY57V561620F一个存储单元是2个字节(16I/O),相当于有了23根地址线。BA0,BA1是最高地址位,所以应该接在ADDR24,ADDR25 上。

就是说SDRAM的BA0,BA1接S3C2440的哪几根地址线是根据整个SDRAM的容量来决定的。

 
问题3:两片K4S561632C组合在一起的,这样做的效果是什么?
我们已经知道1片K4S561632C有4个bank,两片K4S561632C就有8个bank了,当连接一个K4S561632C时,一个地址对应2个字节,现在连接了两片K4S561632C那么,一个地址就对应4个字节了,即一个字,总共64MB,当一个地址存放1个字节,我们需要64Mbit个地址才能达到64MB的容量,现在容量不变,每个地址里存放的字节数增多了,那么必然需要的地址数就减少了,根据存储容量(BYTE)=地址数*每个地址能存的字节数,可知当每个地址里存放的字节数增大4倍时,我们的地址数会变为原来的1/4, 当一个地址存放4个字节,我们只需要16Mbit个地址就能达到64MB的容量,16Mbit代表24根地址线(2^24=16Mbit=16*1024*1024),但是对于2440而言,一个地址只能对应1个字节,即是以BYTE为单位的,比如现在定义一个数组并对它进行初始化:uchar a[]={0,1,2,3};假设0存放在地址a处,那么1就存放在a+1处, 2就存放在a+2处, 3就存放在a+3处,也就是说对于2440而言每个地址只存放一个字节, ,所以对于2440而言,寻址64MB的内存需要26根地址线,如果我们把这4个字节存放进上面的SDRAM中,其实他们都是存放在一个地址里的,0和1存放在左边的K4S561632C中,2和3存放在右边的K4S561632C中,存放的地址都相同,可以看出2440寻址64MB的SDRAM时用到了26根线(最高两位刚好是25~24印证了问题3),但是这64MB的SDRAM实际只需要24根线就可以寻完(因为2440中的4个地址相当于SDRAM中的1个地址),所以2440中最后两根地址线就没什么用了(印证了问题1)。
 

二、NOR FLASH(AM29LV160DB)的接线分析

NOR FLASH 的地址线和数据线是分开的。AM29LV160DB 是一个2Mbyte 的NOR FLASH,分区结构是:

1个16Kbyte扇区,2个8Kbyte扇区,1个32Kbyte扇区,31个64Kbyte扇区(字节模式);

1个8Kbyte扇区,2 个4Kbyte扇区,1个16Kbyte扇区,31个32Kbyte扇区(半字模式);

共35个扇区。引脚如下:

设计原理图如下:

说明:

AM29LV160DB 第47 脚是BYTE#脚,BYTE#接高电平时,器件数据位是16 位,接低电平时,数据位是8 位。

上图BYTE#接VCC,D0-D15 做为数据输入输出口。A0-A19 是地址线,在半字模式下,D0-D15 做为数据输入输出口。因为数据位是16 位,A0-A19 可以选择2^20 = 1M *2BYTE = 2Mbyte。正好是AM29LV160DB 的容量。

S3C2440 的ADDR1要接AM29LV160DB 的A0。上图中AM29LV160DB 的A20,A21是空脚,分别接的是LADDR21,LADDR22。这应该是为了以后方便扩展NOR FLASH 的容量。LADDR21,LADDR22 对AM29LV160DB是没用的。

当BYTE#接低电平时,D0-D7 做为8 位数据输入输出口,D15做为地址线A-1。相当于有了A-1,A0-A19共21 根地址线。这个时候S3C2440 的ADDR0 应该接在D15(A-1)………,ADDR20 接A19。21根地址线的寻址空间是2^21 = 2Mbyte。正好是AM29LV160DB的容量。

三、与NAND FLASH(K9F1208)的接线分析

1 、K9F1208 结构如下图

K9F1208 位宽是8位(I/O0~I/O7)。

一页:1Page = 512byte + 16byte 最后16byte是用于存储校验码和其他信息用的,不能存放实际的数据。

一块有32 page:1block = 32* (512byte + 16byte) =(16k+512)byte

K9F1208 有4096 个块:

1 device = 4096 *32* (512byte + 16byte) = (64M+2M)byte,总共有64Mbyte可操作的芯片容量

NAND FLASH 以页为单位读写数据,以块为单位擦除数据。

其引脚如下:

S3C24440 和K9F1208 的接线图如下:

当选定一个NAND FLASH 的型号后,要根据选定的NAND FLASH 来确定S3C2440 的NCON,GPG13,GPG14,GPG15 的状态。

下图是S3C2440 中4个脚位状态的定义

K9F1208 的一页是512byte,所以NCON 接低电平,GPG13 接高电平。

K9F1208 需要4个寻址命令,所以GPG14 接高电平

K9F1208 的位宽是8,所以GPG15 接低电平。

NAND FLASH 寻址:

对K9F1208 来说,地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。地址传递分为4 步,如下图:

说明:

第1 步发送列地址,既选中一页512BYTE中的一个字节。512byte需要9bit来选择,这里只用了A0 -A7,原因是把一页分成了2部分,每部分256 字节。通过发送的读命令字来确定是读的前256 字节还是后256 字节。

当要读取的起始地址(Column Address)在0~255 内时我们用00h 命令,

当读取的起始地址是在256~511 时,则使用01h 命令。

一个块有32 页,用A9-A13 共5位来选择一个块中的某个页。

总共有4096 个块,用A14-A25 共12位来选择一个块。

K9F1208 总共有64Mbyte,需要A0-A25 共26个地址位。

例如:要读NAND FLASH 的第5000字节开始的内容。

把5000分解成列地址和行地址。

Column_address = 5000%512 = 392

因为column_address>255,所以用01h 命令读

Page_address = (5000>>9) = 9

发送命令和参数的顺序是:

NFCMMD = 0x01;从后256 字节开始读

NFADDR = column_address & 0xff;取column_address 的低8 位送到数据线

NFADDR = page_address & 0xff;发送A9-A16

NFADDR = (page_address >>8) & 0xff; 发送A17-A24

NFADDR = (page_address >> 16) & 0xff;发送A25

上面的NFCMMD,NFADDR.是S3C2440 的NAND FLASH 控制寄存器。读取的数据会放在NFDATA 中。

四、S3C2440 开发板中SDRAM \NOR \ NAND地址分配

1SDRAM地址分配

这是S3C2440 的存储器地址分配图,SDARM只能接在BANK6 或BANK7。

从分析SDRAM接线图可以看到,SDRAM接的是ngcs6,也就是接在BANK6,因为选择的SDRAM 是2片32Mbyte,总容量是64Mbyte,所以SDRAM 的地址范围是0x3000 0000 --- 0x33ff ffff。

2NORFLASH地址分配

S3C2440启动方式如下:

上文讲述的NORFLASH 是16bit 数据位宽,选择从NOR FLASH 启动,所以

OM0 接VDD,OM1 接VSS。

从分析NOR FLASH 接线的接线图可看到,NOR FLASH接的ngcs0,也就是接在BANK0。因为选择NORFLASH是2Mbyte,所以NOR FLASH 的地址范围是0x0000 0000 --- 0x001f ffff。

上电时,程序会从Norflash中启动,ARM直接取Norflash 中的指令运行。

3NANDFLASH地址分配

最后来看NANDFLASH,NANDFLASH 以页为单位读写,要先命令,再给地

址,才能读到NAND 的数据。NANDFLASH是接在NANDFLASH 控制器上而不是系统总线上,所以没有在8 个BANK 中分配地址。如果S3C2440 被配置成从Nand Flash 启动, S3C2440 的Nand Flash 控制器有一个特殊的功能,在S3C2440 上电后,Nand Flash 控制器会自动的把Nand Flash 上的前4K 数据搬移到4K 内部SRAM 中,系统会从起始地址是0x0000 0000 的内部SRAM 启动。

程序员需要完成的工作,是把最核心的启动程序放在Nand Flash 的前4K 中,也就是说,你需要编写一个长度小于4K 的引导程序,作用是将主程序拷贝到SDRAM 中运行。由于NandFlash 控制器从NandFlash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K 里,我们必须完成S3C2440 的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。

至于将2440 当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K 的时候,只要下到nand flash 中就会被搬运到内部RAM 中执行了。

不管是从NOR FLASH启动还是从NANDFLASH 启动,ARM都是从0x0000 0000 地址开始执行的。

 
 
原文地址:http://blog.163.com/zhoufeng332@126/blog/static/62286701201272502756118/

【转】S3C2440与SDRAM NorFlash NandFlash连线分析的更多相关文章

  1. 【转】S3C2440存储系统-SDRAM驱动

    SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)也就是通常所说的内存.内存的工作原理.控制时序.及相关控制器的配置方法一直是嵌入式系统 ...

  2. u-boot中nandflash初始化流程分析(转)

    u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...

  3. 关于SRAM,DRAM,SDRAM,以及NORFLASH,NANDFLASH

    韦东山的视频里面说S3C2440有4KB的内存,这个其实是不正确的,这4KB的RAM严格说不应该叫内存,严格来说芯片外面的64MB的SDRAM才能叫做内存,里面的那4KB只是当nandflash启动的 ...

  4. 十二、S3C2440 裸机 — SDRAM

    12.1 SDRAM 介绍 12.1.1 SDRAM 定义 SDRAM(Synchronous Dynamic Random Access Memory):同步动态随机存储器-内存条 同步是指内存工作 ...

  5. nandflash裸机程序分析

    它包含7个文件: head.S init.c main.c Makefile nand.c nand.lds 我们之前的程序都是在nandflash的前4k放代码,上电后自动拷贝到SRAM中,之后将S ...

  6. PCB走线分析——直角、差分、蛇形线

    PCB直角走线的影响   布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...

  7. norflash启动和nandflash启动

    S3C2440的启动时读取的第一条指令是在0x00上,分为成nand flash和nor flash上启动. 1)nand flash:适合大容量数据存储,类似硬盘: 2)nor flash:适合小容 ...

  8. u-boot分析1:Nandflash、Norflash启动

    了解u-boot之前首先了解下Bootloader,简单说Bootloader就是一段小程序,它在系统上电时开始运行,初始化硬件设备,准备好软件环境,最后调用操作系统内核. u-boot全称:Univ ...

  9. JZ2440存储管理器--SDRAM

     为了cpu访问外部设备,ARM提供一个存储管理器部件,提供访问外部设备的所需的信号(对SDRAM.网卡.nor等设备进行初始化,以便存储器管理器配合CPU进行与外设数据通讯).   CPU通常读写一 ...

随机推荐

  1. Java-高效地使用Exception-实践

    注:本文翻译自Exceptional practices,共分为3节.该文章从实践的角度非常透彻地解释了为什么要处理异常,以及如何处理异常.这些都是那些只会介绍trycatchfinally语法的教材 ...

  2. C#程序及批处理中确定windows操作系统的方法

    先上一段代码: private void Form1_Load(object sender, EventArgs e) { OperatingSystem os = Environment.OSVer ...

  3. Java课程设计—学生成绩管理系统(201521123002 林楚虹)

    1. 团队课程设计博客链接 团队博客链接 2.个人责模块或任务说明 根据学生学号查找学生成绩 根据学生姓名(支持模糊匹配)查找学生成绩 用POI技术导出Excel文件 3.自己的代码提交记录截图 4. ...

  4. 201521123113《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图.Onenote或其他)归纳总结多数据库相关内容. JDBC体系架构: 2. 书面作业 Q1. MySQL数据库基本操作 1.1 建立数据库test ...

  5. 命令导入导出oracle库

    目前还是新手:所以记录下来最笨的方式,留用 一.从服务器先把库导出来 exp sys/mima@orcl  file = "d:\pybghs.dmp"   full=y 二.从服 ...

  6. java.lang.IllegalArgumentException: object is not an instance of declaring class

    今天在使用反射的时候,出现了java.lang.IllegalArgumentException: object is not an instance of declaring class错误-具体是 ...

  7. JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

    什么是JSTL JSTL全称为 JSP Standard Tag Library 即JSP标准标签库. JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历.数据的输出. ...

  8. temp--达州银行

    达州银行现场 服务器IP地址 192.168.1.234 ilink / ilink 自己电脑需要设置为固定IP 192.168.1.XXX 子网掩码 255.255.255.0 192.168.1. ...

  9. 高德地图markers生成和点击

    因为自己平时上班也是比较忙,遇到什么写什么,希望能给现在的你一些帮助,都是自己在工作中遇到的问题,给自己一个提醒,也是分享 相信很多人在做高德地图开发的时候,对于新手,官方的demo解读单个marke ...

  10. 自学Unity3D 之 贪吃蛇 添加摄像机跟随

    在Unity的世界中, 物体的位置都是由向量构成的. 今天所需要做的就是让摄像机保持跟蛇头的相对距离. 首先  设蛇头的位置在A 点  , 摄像机的位置在B 点 则  我们可以知道  他们的offse ...