#define NF_RDDATA() (rNFDATA)
7. 写数据
#define NF_WRDATA(data) {rNFDATA=data;}
8. 获取 Nand Flash 芯片状态
#define NF_WAITRB() {while(!(rNFSTAT&(1<<0)));}
0/假: 表示 Nand Flash 芯片忙状态
1/真:表示 Nand Flash 已经准备好
2.3 第二层实现说明
2.3.1 Nand Flash
初始化
void NF_Init(void)
{
/* 设置 Nand Flash 配置寄存器, 每一位的取值见 1.3 节 */
rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
/* 复位外部 Nand Flash 芯片 */
NF_Reset();
}
2.3.2 Nand flash
复位
static void NF_Reset(void)
{
int i;
NF_nFCE_L(); /* 片选 Nand Flash 芯片*/
NF_CMD(0xFF); /* 复位命令 */
for(i=0;i<10;i++); /* 等待 tWB = 100ns. */
NF_WAITRB(); /* wait 200~500us; */
NF_nFCE_H(); /* 取消 Nand Flash 选中*/
}
2.3.3
获取
Nand flash ID
返回值为 Nand flash 芯片的 ID 号
unsigned short NF_CheckId(void)
{
int i;
unsigned short id;
NF_nFCE_L(); /* 片选 Nand Flash 芯片*/
NF_CMD(0x90); /* 发送读 ID 命令到 Nand Flash 芯片 */
NF_ADDR(0x0); /* 指定地址 0x0,芯片手册要求 */
for(i=0;i<10;i++); /* 等待 tWB = 100ns. */
id=NF_RDDATA()<<8; /* 厂商 ID(K9S1208V:0xec) */
id|=NF_RDDATA(); /* 设备 ID(K9S1208V:0x76) */
NF_nFCE_H(); /* 取消 Nand Flash 选中*/
return id;
}