您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > S3C2440重要资料
S3C2440与SDRAM的地址连线分析S3C2440有27根地址线ADDR[26:0],8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访问bankx的地址空间,ngcsx引脚为低电平,选中外设。2^27=2^7*2^10*2^10=128Mbyte8*128Mbyte=1Gbyte所以S3C2440总的寻址空间是1Gbyte。市面上很少有32位宽度的单片SDRAM,一般选择2片16位SDRAM扩展得到32位SDRAM.选择的SDARM是HY57V561620F,4Mbit*4bank*16,共32Mbyte。首先了解下SDRAM的寻址原理。SDRAM内部是一个存储阵列。可以把它想象成一个表格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格称为逻辑BANK。目前的SDRAM基本都是4个BANK。寻址的流程就是先指定BANK地址,再指定行地址,最后指定列地址。这就是SDRAM的寻址原理。存储阵列示意图如下:查看HY57V561620F的资料,这个SDRAM有13根行地址线RA0-RA129根列地址线CA0-CA82根BANK选择线BA0-BA1SDRAM的地址引脚是复用的,在读写SDRAM存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。/RAS是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;/CAS是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中。地址连线如下图: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的数据位宽来决定的。上面的接线图上,BA0,BA1接ADDR24,ADDR25,为什么用这两根地址线呢?BA0~BA1代表了SDRAM的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为64MByte,那就需要A25~A0(64M=2^26)地址线来寻址,所以BA1~BA0地址线应该接到2440的ADDR25~ADDR24引脚上。13根行地址线+9根列地址线=22根。另外HY57V561620F一个存储单元是2个字节,相当于有了23根地址线。BA0,BA1是最高地址位,所以应该接在ADDR24,ADDR25上。也就是说SDRAM的BA0,BA1接S3C2440的哪几根地址线是根据整个SDRAM的容量来决定的。S3C2440与NORFLASH(AM29LV160DB)的接线分析NORFLASH的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NORFLASH的地址线和数据线是分开的。AM29LV160DB是一个2Mbyte的NORFLASH,分区结构是:1个16Kbyte扇区,2个8Kbyte扇区,1个32Kbyte扇区,31个64Kbyte扇区(字节模式)1个8Kbyte扇区,2个4Kbyte扇区,1个16Kbyte扇区,31个32Kbyte扇区(半字模式)共35个扇区。下图是TQ2440开发板提供的NORFLASH部分接线图。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。这应该是为了以后方便扩展NORFLASH的容量。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的容量。S3C2440与NANDFLASH(K9F1208)的接线分析NANDFLASH的接线方式和NORFLASH,SDRAM都不一样。以TQ2440开发板用的K9F1208为例,分析NANDFLASH的接线方式。K9F1208结构如下图:K9F1208位宽是8位。一页:512byte+16byte最后16byte是用于存储校验码和其他信息用的,不能存放实际的数据。一个块有32page:(16k+512)byteK9F1208有4096个块:(64M+2M)byte,总共有64Mbyte可操作的芯片容量NANDFLASH以页为单位读写数据,以块为单位擦除数据。S3C24440和K9F1208的接线图如下:下图是S3C2440的NANDFLASH引脚配置:当选定一个NANDFLASH的型号后,要根据选定的NANDFLASH来确定S3C2440的NCON,GPG13,GPG14,GPG15的状态。下图是S3C2440中4个脚位状态的定义:K9F1208的一页是512byte,所以NCON接低电平,GPG13接高电平。K9F1208需要4个寻址命令,所以GPG14接高电平K9F1208的位宽是8,所以GPG15接低电平。NANDFLASH寻址对K9F1208来说,地址和命令只能在I/O[7:0]上传递,数据宽度是8位。地址传递分为4步,如下图:第1步发送列地址,既选中一页512BYTE中的一个字节。512byte需要9bit来选择,这里只用了A0-A7,原因是把一页分成了2部分,每部分256字节。通过发送的读命令字来确定是读的前256字节还是后256字节。当要读取的起始地址(ColumnAddress)在0~255内时我们用00h命令,当读取的起始地址是在256~511时,则使用01h命令。一个块有32页,用A9-A13共5位来选择一个块中的某个页。总共有4096个块,用A14-A25共12位来选择一个块。K9F1208总共有64Mbyte,需要A0-A25共26个地址位。例如要读NANDFLASH的第5000字节开始的内容。把5000分解成列地址和行地址。Column_address=5000%512=392Page_address=(50009)=9因为column_address255,所以用01h命令读发送命令和参数的顺序是:NFCMMD=0x01;从后256字节开始读NFADDR=column_address&0xff;取column_address的低8位送到数据线NFADDR=page_address&0xff;发送A9-A16NFADDR=(page_address8)&0xff;发送A17-A24NFADDR=(page_address16)&0xff;发送A25上面的NFCMMD,NFADDR.是S3C2440的NANDFLASH控制寄存器。读取的数据会放在NFDATA中。S3C2440开发板中SDRAM\NORFLASH\NANDFLASH地址分配前三篇文章里,我分析了S3C2440与SDRAM,NORFLASH,NANDFLASH的连线。在S3C2440开发板这个系统中,这三种存储芯片的地址是如何分配的呢?首先看下图:这是S3C2440的存储器地址分配图,SDARM只能接在BANK6或BANK7.从分析SDRAM接线的文章里的SDRAM接线图可以看到,SDRAM接的是ngcs6,也就是接在BANK6,因为选择的SDRAM是2片32Mbyte,总容量是64Mbyte,所以SDRAM的地址范围是0x30000000---0x33ffffff。S3C2440的OM0,OM1脚决定系统启动模式:TQ2440开发板的NORFLASH是16bit数据位宽,选择从NORFLASH启动,所以OM0接VDD,OM1接VSS,从分析NORFLASH接线的文章里的接线图可以看到,NORFLASH接的是ngcs0,也就是接在BANK0.因为选择的NORFLASH是2Mbyte,所以NORFLASH的地址范围是0x00000000---0x001fffff。上电时,程序会从Norflash中启动,ARM直接取Norflash中的指令运行。最后来看NANDFLASH,NANDFLASH以页为单位读写,要先命令,再给地址,才能读到NAND的数据。NANDFLASH是接在NANDFLASH控制器上而不是系统总线上,所以没有在8个BANK中分配地址。如果S3C2440被配置成从NandFlash启动,S3C2440的NandFlash控制器有一个特殊的功能,在S3C2440上电后,NandFlash控制器会自动的把NandFlash上的前4K数据搬移到4K内部SRAM中,系统会从起始地址是0x00000000的内部SRAM启动。程序员需要完成的工作,是把最核心的启动程序放在NandFlash的前4K中,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到SDRAM中运行。由于NandFlash控制器从NandFlash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K里,我们必须完成S3C2440的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行,至于将2440当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K的时候,只要下到nandflash中就会被搬运到内部RAM中执行了。不管是从NORFLASH启动还是从NANDFLASH启动,ARM都是从0x00000000地址开始执行的。S3C2440的时钟设置一个嵌入式系统中,晶振就像心脏。必须先确定晶振,设置好系统的时钟,WDT,UART,PWM,TIMER等模块才能正常工作。和51系列单片机相比,S3C2440的时钟电路很复杂。首先通过引脚OM2,OM3来选择时钟源。以TQ2440开发板为例,OM2,OM3都接地,外接12M晶振,主时钟源和USB时钟源都是外部晶振。S3C2440具有2个PLL(PhaseLockedLoop:用来产生高频的电路),一个是MPLL,用于产生FCLK,HCLK,PCLK三种频率,这三种频率分别有不同的用途:FCLK是CPU提供的时钟信号,如果提到CPU的主频是400MHz,就是指的这个时钟信号。HCLK是为AHB总线提供的时钟信号,AdvancedHigh-performanceBus,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器,DMA以及USBhost。PCLK是为APB总线提供的时钟信号,AdvancedPeripheralsBus,主要用于低速外设,比如WATCHDOG,IIS,I2C,SDI/MMC,GPIO,RTC,UART,PWM,ADCandSPI等等。另外一个是UPLL
本文标题:S3C2440重要资料
链接地址:https://www.777doc.com/doc-3179542 .html