NAND flash 实验

NAND flash 实验

如上图所示,nand flash 原理图接法:(没有地址总线)

CLE  命令信号

ALE 地址信号

nFWE  数据写信号

nFRE  数据读信号

访问Nand flash:

1) 写命令寄存器=NAND Flash存储器命令周期

2) 写地址寄存器=NAND Flash存储器地址周期
3) 写数据寄存器=写入数据到NAND Flash存储器(写周期)
4) 读数据寄存器= 从NAND Flash存储器读取数据(读周期)
5) 读主ECC寄存器和备份ECC寄存器=从NAND Flash存储器读取数据
注释: 
软件模式下,你必须用定时查询或中断来检测RnB状态输入引脚。

CPU端有NAND 控制器的:

设置以下寄存器: NFCMMD   发命令   NFADDR  发地址    NFDATA 收发数据  NFSTAT 状态寄存器

NAND flash 实验

写地址根据芯片手册有周期之分,那个周期写入那些位:

算法如下:

#define NAND_SECTOR_SIZE_LP    2048

#define NAND_BLOCK_MASK_LP     (NAND_SECTOR_SIZE_LP - 1)

static void write_addr_lp(unsigned int addr)
{

        int i;
volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFADDR;
int col, page;
col = addr & NAND_BLOCK_MASK_LP;
page = addr / NAND_SECTOR_SIZE_LP;

*p = col & 0xff; /* Column Address A0~A7 */
for(i=0; i<10; i++);
*p = (col >> 8) & 0x0f; /* Column Address A8~A11 */
for(i=0; i<10; i++);
*p = page & 0xff; /* Row Address A12~A19 */
for(i=0; i<10; i++);
*p = (page >> 8) & 0xff; /* Row Address A20~A27 */
for(i=0; i<10; i++);
*p = (page >> 16) & 0x03; /* Row Address A28~A29 */

for(i=0; i<10; i++);

}