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 状态寄存器
写地址根据芯片手册有周期之分,那个周期写入那些位:
算法如下:
#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++);
}