S3C2440与NAND FLASH(K9F1208)的接线分析

发布者:Howard_Sun最新更新时间:2016-07-11 来源: eefocus关键字:S3C2440  NAND  FLASH  K9F1208  接线分析 手机看文章 扫描二维码
随时随地手机看文章

一、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  NAND  FLASH  K9F1208  接线分析 引用地址:S3C2440与NAND FLASH(K9F1208)的接线分析

上一篇:2440/2410上将usb device改成usb host
下一篇:arm片上总线:AHB and APB

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

S3C2440串口及其中断系统详解
S3C2440A的通用异步收发器(UART)配有3个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA模式的操作。换句话说,UART可以通过产生中断或DMA请求来进行CPU和UART之间的数据传输。 UART通过使用系统时钟可以支持最高115.2Kbps的比特率。如果是外部器件提供UEXTCLK的UART,则UART可以运行在更高的速度。每个UART通道包含两个的64字节的FIFO给发送和接收。 S3C2440A的UART包括了可编程波特率,红外(IR)发送/接收,插入1个或2个停止位,5位、6位、7位或8位的数据宽度以及奇偶校验。每个UART包含一个波特率发生器、发送器、接收器和一个控制单元,如图11-1所示。波
[单片机]
<font color='red'>S3C2440</font>串口及其中断系统详解
基于S3c2440的I2C驱动与测试程序追踪交叉分析
VMware虚拟机+Fedora10, 硬件平台TQ2440, 内核2.6.30.4 对应的驱动程序豁然开朗, 然后自己添加了一些dev_dbg后, 对于不理解的地方也有了一定的参考提示, 记录下来与大家分享。 测试程序如下: /*i2c_test.c * hongtao_liu */ #include #include #include #include #include #include #include #include #define I2C_RETRIES 0x0701 #define I2C_ TI MEOUT 0x0702 #define I2C_RDWR 0x0707 /*********定义struct i
[单片机]
MSP430 flash写入(二)
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above c
[单片机]
S3C2440 Linux驱动移植——按键
开发板:TQ2440 内核版本:2.6.32 1. 硬件链接图 四个输入引脚: EINT0-----( GPF0 )----INPUT---K4 EINT2-----( GPF2 )----INPUT---K3 EINT4-----( GPF4 )----INPUT---K2 EINT1-----( GPF1 )----INPUT---K1 2. 相关的数据结构 移植所需要的数据结构位于include/linux/gpio_keys.h中。 #ifndef _GPIO_KEYS_H #define
[单片机]
<font color='red'>S3C2440</font> Linux驱动移植——按键
lpc1788移植u-boot-2010.03之spi flash移植
开发环境: MCU: NXP LPC1788 u-boot: u-boot-2010.03 SPI Flash: AT45DB321D 由于ATMEL的spi flash在u-boot中已经实现,我们就不要去写AT45DB321D的驱动了,现在考虑SPI总线的问题(u-boot中的spi驱动在driver/spi目录中),在driver/spi目录中可以看到各种芯片的spi总线实现,不过lpc1788是没有的,别动别动看到了一个soft_spi.c,好了现在spi总线的驱动也不用写了,直接用soft spi。 在lpc1788的配置文件中加入以下内容: #define CONFIG_CMD_SF //加入cmd_sf.
[单片机]
英特尔合资公司新加坡工厂明年投产
英特尔和美光(Micron)合资公司IM Flash Technologies(以下简称“IMFT”)新加坡工厂将于2011年第二季度投产。   IMFT创建于2006年1月,主要生产NAND闪存,其首个制造工厂位于犹他州Lehi地区。IMFT新加坡工厂原计划于2008年4月投产,后延迟到2009年。受全球经济危机影响,时至今日仍未投产。   但最新消息显示,新加坡工厂将于明年第二季度投产,预计月产能可达到10万片硅晶圆。
[半导体设计/制造]
使用J-Flash 对ARM烧录HEX程序
安装J-link的驱动之后,在开始/程序(或者是'所有程序')/SEGGER/J-linkARM V4.10下,点击J-Flash ARM图标,就可以用这个软件方便的烧录程序。 对于第一次使用的芯片可以使用如下步骤写程序。 a. 打开J-Flash ARM后,首先点击File-OpenProject...,从中选择STM32F103RB.jflash。 b. 点击File-Open data file...选择要烧录的可执行文件。 c. 选择烧录文件后,点击Target-connect,链接一下硬件是否通。如果能够连接成功会了LOG窗口最后一行显示“Connected successfully”。 d.
[单片机]
MPC5744入门笔记(3)Flash实验
1. 起因 Can接口调通之后紧接着调的就是flash接口,因为第一部分工作是准备先做一个5744基于can的bootloader出来。这部分之前在stm32和S32K上都做过,其实就是解锁,加锁,成片区擦除和buf写入,如果有工作量吧,主要应该在上层的接口优化,其实有时间的话,还挺想看看别人flash相关的开源库是怎么做的,比如easyflash。 2. 借鉴 2.1 官方demo 调试第一步还是上demo。 简单看了一下,主要接口: 上锁 FLASH_DRV_SetLock 解锁 FLASH_DRV_SetLock 擦除 FLASH_DRV_Erase 烧录 FLASH_DRV_Program 其实已经包含了fla
[单片机]
MPC5744入门笔记(3)<font color='red'>Flash</font>实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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