一、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上。
便是说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个扇区。引脚如下:
规划原理图如下:
阐明:
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地址分配
(1)SDRAM地址分配
这是S3C2440的存储器地址分配图,SDARM只能接在BANK6或BANK7。
从剖析SDRAM接线图能够看到,SDRAM接的是ngcs6,也便是接在BANK6,因为挑选的SDRAM是2片32Mbyte,总容量是64Mbyte,所以SDRAM的地址规模是0x3000 0000 — 0x33ff ffff。
(2)NORFLASH地址分配
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中的指令运转。
(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地址开端履行的。