S3C2440与SDRAM NorFlash NandFlash连线分析

发布者:心愿达成最新更新时间:2016-08-05 来源: eefocus关键字:S3C2440  SDRAM  NorFlash  NandFlash 手机看文章 扫描二维码
随时随地手机看文章

一、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的寻址原理。存储阵列示意图如下:

 

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

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

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

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

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

  

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

地址连线如下图:

  

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术
 
S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

问题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上。

就是说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的容量来决定的。
 

二、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个扇区。引脚如下:

 S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

 

设计原理图如下:

 

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

说明:

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 结构如下图

 

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

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 以页为单位读写数据,以块为单位擦除数据。

其引脚如下:

 
S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

S3C24440 和K9F1208 的接线图如下:

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

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

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

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

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

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

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

NAND FLASH 寻址:

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

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

说明:

第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地址分配

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

(1)SDRAM地址分配

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

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

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

(2)NORFLASH地址分配

S3C2440启动方式如下:

S3C2440与SDRAM NorFlash NandFlash连线分析 - zhoufeng332@126 - 枫之技术

上文讲述的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 中的指令运行。

(3)NANDFLASH地址分配

最后来看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 地址开始执行的。 


关键字:S3C2440  SDRAM  NorFlash  NandFlash 引用地址:S3C2440与SDRAM NorFlash NandFlash连线分析

上一篇:STM32在MDK中使用外部RAM浅解
下一篇:S3C2440的SDRAM驱动 

推荐阅读最新更新时间:2024-03-16 15:03

S3C2440 中断程序
CPU 运行过程中,如何知道各类外设发生了某些不预期的事件,比如串口接收到了新数据、USB 接口中插入了设备、按下某个按键等。主要有以下两个方法: 查询方式:程序循环地查询各设备的状态并作出相应反应。它实现简单,常用在功能相对单一的系统中,比如在一个温控系统中可以使用查询方式不断检测温度的变化。确定是占用 CPU 资源过高,不适用于多任务系统。 中断方式:当某事件发生时,硬件会设置某个寄存器; CPU 在每执行完一个指令时,通过硬件查看这个寄存器,如果发现所关注的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理这事件,最后返回执行被中断的程序。它的实现相对复杂,但是效率很高,是常用的办法。 CPU 中断处理的过
[单片机]
S3c2440如何利用JLINK烧写U-boot到NAND Flash中
很多同学使用笔记本作为自己的ARM开发和学习的平台,绝大多数笔记本都没有并口,也就是无法使用JTag调试和烧写程序到Nand Flash中,幸好我们还有JLINK,用JLINK烧写U-boot到Nor Flash中很简单,大部分NOR Flash都已经被JLink的软件SEGGER所支持,而新手在学习的时候经常会实验各种各样的命令,最悲剧的莫过于将NAND Flash中原有的bootloader给删除了,这时候开发板上电后由于没有bootloader,硬件没有被初始化,在NAND Flash中的操作系统也就无法被加载,开发板成“砖”了,这时候笔记本又无法利用JTag烧写程序进Nand Flash。起始这些可以利用JLink通过两种
[单片机]
基于S3C2440的Linux内核移植和yaffs2文件系统制作--Linux源码参数
1.3.2 修改Linux源码中参数 1、解压内核源码 mkdir /opt/studyarm cd /mnt/hgfs/share tar –jxvf linux-2.6.29.1.tar.bz2 –C /opt/studyarm 2、 进入内核目录,修改makefile,并对内核进行默认配置进行修改 193行,修改 ARCH ?=arm CROSS_COMPILE ?=arm-linux- 3、 修改平台输入时钟 找到内核源码arch/arm/mach-s3c2440/mach-smdk2440.c文件,在函数 static void __init smdk24
[单片机]
S3C2440外部中断响应寄存器设置方法
如果不按照如下设置,中断将无法执行或者无法使下一个中断进入。 /*中断挂起设置,此过程加入到主函数中启动时加载*/ void Eint_wait() { rSRCPND=rSRCPND; //中断挂起寄存器清除 rINTPND=rINTPND; //中断源挂起寄存器清除 rEINTPEND|=0x1 13; //外部中断挂起寄存器,Eint挂起等待中断 rSRCPND=BIT_EINT8_23; //中断源挂起寄存器相应位置1等待中断 rINTPND=BIT_EINT8_23; //中断挂起寄存器相应位置1等待中断 } /*中断挂起设置结束*/ /*以下为响应中断时的处理过程,为pISR指针中的函数*/
[单片机]
S3C2440开发板裸机程序系列02--按键和蜂鸣器
1. TQ2440按键接口电路 K1 -- EINT1 -- GPF1 K2 -- EINT4 -- GPF4 K3 -- EINT2 -- GPF2 K4 -- EINT0 -- GPF0 2. 按键参考代码 按键,则对应的led灯亮,松开则灭。 在流水灯程序基础上,修改Main.c,增加key.c , key.h key.c #include 2440addr.h #include key.h void Key_Init(void) { rGPFCON &= ~((3 2)|(3 8)|(3 4)|(3 0)); rGPFCON |= KEY1|KEY2|KEY3|KEY4; /
[单片机]
<font color='red'>S3C2440</font>开发板裸机程序系列02--按键和蜂鸣器
RTEMS在S3C2440上的移植-(4)
有了前一篇文章的铺垫,基本上移植的工作就成功了一大半了,接下来要做的就是针对2410和2440的不同及不同开发板模块、接口的差异对2410的BSP进行修改工作。由于2410的寄存器基本吻合,所以头文件不改也没问题,这里我主要还是参考了Etual大牛的博客做了一下工作: 1.修改了时钟(PLL设置)。 libcpuarms3c24xxclocksupport.c 修改get_FCLK 由于2440 的PLL计算公式不同,在原来的基础上乘以2 就行了。修改为 return((BSP_OSC_FREQ * m * 2) / (p s)); 2.对启动代码进行修改。libbsparmsbc2440star
[单片机]
基于WinCE5.0的嵌入式设备休眠唤醒技术研究
    嵌入式系统应用中降低设备功耗以提高续航能力是其设计的热点 。在休眠状态,系统处于最低电流消耗状态,同时仍维持存储区中的内容,为了减少能量消耗和延长电池寿命,需要让处理器定期进入或退出休眠模式 。Windows CE 作为一个广泛应用于嵌入式设备上的操作系统,提供了完善的电源管理功能。其中,休眠唤醒便是一个重要的功能。本文在结合S3C2440硬件基础上分析休眠唤醒过程,分别采用外部中断唤醒和RTC中断唤醒两种方法实现了休眠唤醒,并给出了具体实现代码。根据相应唤醒需求,将这两种方法应用于北京化工大学诊断与自愈工程研究中心的一款基于S3C2440和WindowsCE 5.0的嵌入式智能巡检分析诊断仪,结果表明能准确达到实际的设置
[嵌入式]
高速嵌入式视频系统中SDRAM时序控制分析
在高速数字视频系统应用中,使用大容量存储器实现数据缓存是一个必不可少的环节。SDRAM就是经常用到的一种存储器。 但是,在主芯片与SDRAM之间产生的时序抖动问题阻碍了产品的大规模生产。在数字电视接收机的生产实际应用中,不同厂家的PCB板布线、PCB材料和时钟频率的不同,及SDRAM型号和器件一致性不同等原因,都会带来解码主芯片与SDRAM间访问时序的抖动问题。 本文利用C-NOVA公司数字电视MPEG-2解码芯片AVIA9700内置的SDRAM控制器所提供的时序补偿机制,设计了一个方便使用的内存时序测试软件工具,利用这个工具,开发测试人员可在以AVIA9700为解码器的数字电视接收机设计和生产中进行快速诊断,并解决SDRAM的
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved