基于NAND Flash的大容量立體封裝芯片在嵌入式系統(tǒng)中的應(yīng)用
軟件設(shè)計(jì)
本文引用地址:http://m.butianyuan.cn/article/192739.htm根據(jù)前面的介紹,通過圖3的硬件連接方式,可以實(shí)現(xiàn)對(duì)芯片的讀寫,擦除等控制操作,已可以滿足各種場(chǎng)合的應(yīng)用,S698-mil處理器是通過GPIO來操作控制VDNF64G08的,所以需要對(duì)底層操作需要比較了解,下面簡(jiǎn)單介紹一些常用操作的實(shí)現(xiàn)。
S698-mil芯片GPIO0對(duì)應(yīng)的寄存器地址為0x2000 0000 – 0x27ff ffff,因?yàn)閂DNF64G08芯片位寬是8bit的,所以需要把MCU的GPIO位寬也定義成8bit,根據(jù)前面的硬件連接可以知道地址低3位對(duì)應(yīng)到VDNF64G08芯片的片選信號(hào),add[4]對(duì)應(yīng)到CLE,add[5]對(duì)應(yīng)到ALE,為了方便編程,這里做以下宏定義 :
#define NF_ADDREG(CE) (*(volatile unsigned char *) (0x20000010 + CE))
#define NF_CMDREG(CE) (*(volatile unsigned char *) (0x20000008 + CE))
#define NF_DATAREG(CE) (*(volatile unsigned char *) (0x20000000 + CE))
讀芯片ID
根據(jù)芯片指令表,可以知道讀ID芯片只需要寫入命令0x90,然后在寫入地址0x0即可,詳細(xì)操作可以根據(jù)以下時(shí)序圖進(jìn)行:
int readID(unsigned char CE,unsigned IDlength)
{
unsigned char ID[],i;
NF_CMDREG(CE) = 0x90;
NF_ADDREG(CE) = 0x0;
delayed(1);
for(i = 0;i < IDlength;i++)
{
ID[i] = NF_DATAREG(CE);
}
i = i - 1;
printf("CHIP CE d% ID:0x%x",ID[0]);
while(i){
printf("-%x",ID[IDlength - i]);
i --;
}
printf("nr");
}
芯片壞塊查詢
由于NAND Flash的工藝不能保證NAND 的Memory Array在其生命周期中保持性能的可靠,因此,在NAND 的生產(chǎn)中及使用過程中會(huì)產(chǎn)生壞塊。為了檢測(cè)數(shù)據(jù)的可靠性,在應(yīng)用NAND Flash的系統(tǒng)中一般都會(huì)采用一定的壞區(qū)管理策略,而管理壞區(qū)的前提是能比較可靠的進(jìn)行壞區(qū)檢測(cè)。檢測(cè)流程如圖4所示。
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
上拉電阻相關(guān)文章:上拉電阻原理
評(píng)論