上面有一个横线的,表示低电平有效,在这个CLE为高电平为有效的时候,此时片选CE和WE的信号为低为有效,所以此时在写也就是发送0x90(Read ID Comand)这个读命令。
这是发送读命令时各地址线上电平的变化,而你只需要写相应的寄存器,然后硬件自己完成对应的跳变。如这个就是NFCCMD=0x90
nand flash 读取数据每一次最多只能读取一页的数据,如果需要多页读取需要反复读取。
这一个讲得比较好:
OOB:是为了解决Nand缺点(nand flash 存在坏块,就有位反转的现象,所以就发明了OOB区进行校验,把nand flash
坏块位反转来恢复到正确的数据)而存在,
cpu:只关心数据,不会访问OOB,因为OOB区是nand flash访问后,把正确数据给cpu.所以cpu只能访问page区
https://blog.csdn.net/pengrui18/article/details/32337297
Column address=addr%2048
ROW Address =addr/2048
ROW:就是第几个行,就是第几个page
所以在针对这款nand flash ,一个pege是2048type,所以说addr/2048=row,也就是第几个page.
因为在2440中没有%取余这个操作,所以用Column address=addr&(2048-1).
void nand_erase(unsigned int addr,int len)//擦除 ,擦除的最小单位是块(block)
{
int page = addr /2048;
if(addr&0x1FFFF)//保证addr是128K整数倍,从起始点开始,0x1FFFF就是128k-1,128k是2某个次方,所以可以用这种方式保证是128K整数倍 在2440 一个block是128k
.....省去下面的代码
}