S3C2410-S3C2440对nandflash的读写操作.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:4 大小:41KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

S3C2410-S3C2440对nandflash的读写操作.doc

S3C2410-S3C2440对nandflash的读写操作.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

S3C2410/S3C2440对nandflash的读写操作2008-09-0311:42折腾了两三天终于搞定了s3c2440对nandflash的读写操作,s3c2410对nandflash的读写操作资料比较多而s3c2440的资料比较少,两款芯片在nandflash寄存器上有较大的变化,不能通用,需对照datasheet修改。下面讲一下实验过程:试验目的:使nandflash开始4k代码完成将4k以后代码copy到sdram内运行的功能。试验内容:采用朗成AT2440EVB-I型开发板,nandflash启动跳线1,3,4在on位置,将head.s和init.c(主要完成初始化,nandflash读写,从nandflash到sdram的代码copy)写入nandflash起始地址(启动地址0x0000),将main.c(完成点亮LED的功能)存放到nandflash的4096地址,但使其在0x30000000(就是sdram的首地址)运行,这就需要nandflash启动后4k的代码将4096起始的代码copy到0x30000000运行。过程:本来是有源代码的,但那是用在s3c2410上的,将其直接用到AT2440EVB-I型开发板上,失败。将2410和2440datasheet对照一看才知道寄存器有了很大变化,直接用是肯定不行的。查资料才知道2440的nandflash操作资料很少(好像2440的资料都很少,2410比较多),最后查到两个,一个是u-boot在2440上的移植,其中有从nandflash启动的读写函数(copy自vivi),另一个就是AT2440EVB-I型开发板自带的ATBOOT中nand_read.c,对照看了一下差不多,根据这两个资料改写init.c之后还是失败。只好又找资料将“nandflash读写操作”的原理搞清楚了(之前一直没搞清楚代码,只是拿过来用)。再看2410上的代码,发现2440上的少了nandflash的初始化函数,对照datasheet改写寄存器后,led终于亮了。^_^s3c2410对nandflash读写操作寄存器配置的流程:1.初始化NFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);或NFCONF=0xf830;(1)enableNANDflashcontroller(15位)(2)initializeECC(12位)(3)chipdisable(11位),使用时再chipenable(4)设置TACLS=0、TWRPH0=3、TWRPH1=0//2440采用默认值即可2.复位(1)NFCONF&=~0x800;//chipenable(2)NFCMD=0xff;//resetcommand(3)while(!(NFSTAT&BUSY))等待NANDflashmemoryreadytooperate3.读写函数(1)NFCONF&=~0x800;/*chipEnable*/(2)NFCMD=0;//read0(3)NFADDR=i&0xff;NFADDR=(i>>9)&0xff;NFADDR=(i>>17)&0xff;NFADDR=(i>>25)&0xff;/*WriteAddress*/(4)while(!(NFSTAT&BUSY))等待NANDflashmemoryreadytooperate(5)*buf=(NFDATA&0xff);//读数据线(6)NFCONF|=0x800;/*chipdisable*/s3c2440对nandflash读写操作寄存器配置的流程:1.初始化(1)NFCONT=(1<<0)//enableNANDflashcontroller(2)NFCONT|=(1<<1)/*chipdisable*/2.复位(1)NFCONT&=~(1<<1)/*chipenable*/(2)NFCMD=0xff;//resetcommand(3)while(!(NFSTAT&BUSY))等待NANDflashmemoryreadytooperate3.读函数(1)NFCONT&=~(1<<1)/*chipenable*/(2)NFSTAT|=(1<<2)//NAND_CLEAR_RB,RnBtransitionisdetected(3)NFCMD=0;//READ0,读上半叶(4)/*WriteAddress*/NFADDR=i&0xff;NFADDR=(i>>9)&0xff;NFADDR=(i>>17)&0xff;NFADDR=(i>>25)&0xff;(5)wh