LPC1788驱动nandflash

Lpc

1788自带有emc接口用于驱动nandflash,norflash,sdram设备,对于nandflash驱动因为配置简单,时序也简单

         首先,针对nandflash而言应当在系统中有三个地址,分别是数据读写地址,命令读写地址以及地址设置地址,这三个地址都需要更具电路图设置,电路图如下


根据这张图可以看到,CLE地址线也就是命令锁存线为高的时候,地址为命令地址,ALE也就是地址锁存线为高,地址为地址锁存线,当CLE和ALE都为低但是CE选中的时候地址为数据地址,那CS1代表的数据地址是多少呢,需要根据1788的地址分配来判断


当CS1选中的时候系统总线在0X90000000,因为A24 A25的存在,不难分析出,0x91000000为地址锁存使能,0x92000000为命令锁存使能,(因为没有其他的地址线连接,所以,其他的地址位都设置为0),

对nandflash的操作主要有下面几种

1.      单纯命令

对0x92000000直接赋予相应的命令,也就是

*0x92000000 = cmd,然后等待系统响应就可以了,有时候系统有响应,比如读取状态,读取ID等,有的没有响应,例如复位命令

对于有响应的命令,,直接等待芯片完成操作之后读取地址线数据就可以了,也就是,

Returnvalue = *(0x90000000)

 

2.      写入操作

说起写入操作,就必须要说一说nand的内部数据分区,首先,nand的数据分区是以块进行的,类似下图

也就是说,一块nandflash的实际容量的计算是块数量*页数量*主数据区域大小+(附加数据区域大小)

 

但是在实际工程应用中,附加数据区域是不会用来存放用户数据的,主要用来存储数据的ECC效验信息以及坏块信息,部分厂商在芯片出厂的时候会进行一次芯片完整性校验,对出厂就已经存在的坏块,会在第一页和第二页的附加数据区域存放一个数据0xff(nand flash指标只要坏块不超过40就可以买卖)

 

针对我使用的nand,块数量为1024 页数量为64,主数据区域存放2048byte数据

,所以用户实际可使用的空间为128mBYTE,但是存储设备一般用bit做单位,也就是1GBIT

 

对nandflash进行读取的时候,写入一个三十二位的地址,这个地址里面包括了几个数据

1.      要读写的块是哪一个块

2.      要读写的页是哪一页

3.      要读写的数据位于一页中的哪一个字节

4.      最后合成地址

地址的低16位为数据页内地址,高16位为块和页的地址(注意,这个计算出的地址还得加上基础地址0x90000000)

                   写入的过程,nandflash一个读出命令分为两个字节,先发送第一个字节的命令,然后写入32位的地址,然后写入读取命令的第二个字节,接下来读取数据(注意,读取数据是以页为单位进行的,当读取到页尾的时候就不能在进行读取了,要从新写入地址)

 

3.      写入操作

Nandflash有一个特性就是擦除必须以块为单位,写入必须以页为单位,同时,写入的过程中他只能将数据从0变成1,不能将数据从1编程0(只有擦除才能将数据从1变成0),所以我们变成的时候必须保证要写的这一页必须是已经擦除过,里面的数据都是0才能保证我们写入的数据被接受,若是没有擦除过的数据,写入数据之后必然会失败

写入的时候同样是32位地址,其中,页内相对地址为0,只需要块地址和页地址,先写入编程命令1,在写入32位地址,在写入编程命令2,接着写入页空间大小的数据,编程完成

 

 

以上就是nand的读些过程,当然,lpc1788还需要配置之后才能使用emc的接口,过程如下

1.      设置相应的IO口功能,使相应的IO口对应emc

2.      打开emc的时钟

3.      设置几个重要的参数…总线位宽,总线有效电平,还有一些时间配置参数

片选到写使能的延迟时间

片选到数据输出使能的延时时间

片选到写入的延时

顺序读取的时候每一次读取之间的延时

设置好这些参数之后稍微延时一会,就能进行nand的操作了



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值