STM32-FSMC-NANDFLASH
STM32 FSMC 支持兩個(gè)NAND閃存塊,支持硬件ECC并可檢測(cè)多達(dá)8K字節(jié)數(shù)據(jù)
其地址映射如下圖所示
圖161 FSMC存儲(chǔ)塊?
NAND和PC卡地址映射
表88 存儲(chǔ)器映像和時(shí)序寄存器 ?
對(duì)于NAND閃存存儲(chǔ)器,通用和屬性空間又可以在低256K字節(jié)部分劃分為3個(gè)區(qū)(見(jiàn)表89)
● 數(shù)據(jù)區(qū)(通用/屬性空間的前64K字節(jié)區(qū)域)
● 命令區(qū)(通用/屬性空間的第2個(gè)64K字節(jié)區(qū)域)
● 地址區(qū)(通用/屬性空間的第2個(gè)128K字節(jié)區(qū)域)
表89 NAND存儲(chǔ)塊選擇
應(yīng)用軟件使用這3個(gè)區(qū)訪問(wèn)NAND閃存存儲(chǔ)器:
●發(fā)送命令到NAND閃存存儲(chǔ)器:軟件只需對(duì)命令區(qū)的任意一個(gè)地址寫(xiě)入命令即可。
●指定操作NAND閃存存儲(chǔ)器的地址:軟件只需對(duì)地址區(qū)的任意一個(gè)地址寫(xiě)入命令即可。因?yàn)橐粋€(gè)NAND地址可以有4或5個(gè)字節(jié)(依實(shí)際的存儲(chǔ)器容量而定),需要連續(xù)地執(zhí)行對(duì)地址區(qū)的寫(xiě)才能輸出完整的操作地址。
●讀寫(xiě)數(shù)據(jù):軟件只需對(duì)數(shù)據(jù)區(qū)的任意一個(gè)地址寫(xiě)入或讀出數(shù)據(jù)即可。 因?yàn)镹AND閃存存儲(chǔ)器自動(dòng)地累加其內(nèi)部的操作地址,讀寫(xiě)數(shù)據(jù)時(shí)沒(méi)有必要變換數(shù)據(jù)區(qū)的地址,即不必對(duì)連續(xù)的地址區(qū)操作。
NAND閃存和PC卡控制器外部閃存接口信號(hào)NAND閃存/PC卡支持的存儲(chǔ)器及其操作表119 支持的存儲(chǔ)器及其操作?
NAND閃存、ATA和PC卡時(shí)序圖● 控制寄存器:FSMC_PCRx
● 中斷狀態(tài)寄存器:FSMC_SRx
● ECC寄存器:FSMC_ECCRx
● 通用存儲(chǔ)器空間的時(shí)序寄存器:FSMC_PMEMx
● 屬性存儲(chǔ)器空間的時(shí)序寄存器:FSMC_PATTx
● I/O空間的時(shí)序寄存器:FSMC_PIOx
每一個(gè)時(shí)序控制寄存器都包含3個(gè)參數(shù),用于定義PC卡/CF或NAND閃存操作中三個(gè)階段的HCLK周期數(shù)目,還有一個(gè)定義了寫(xiě)操作中FSMC開(kāi)始驅(qū)動(dòng)數(shù)據(jù)總線時(shí)機(jī)的參數(shù)。下圖給出了在通用存儲(chǔ)空間中操作的時(shí)序參數(shù)定義,屬性存儲(chǔ)空間和I/O空間(只適用于PC卡)中操作與此相似。
圖177 NAND/PC卡控制器通用存儲(chǔ)空間的訪問(wèn)時(shí)序?
NAND閃存操作正如前面所述,NAND閃存的命令鎖存使能(CLE)和地址鎖存使能(ALE)信號(hào)由FSMC的地址信號(hào)線驅(qū)動(dòng)。這意味著在向NAND閃存發(fā)送命令或地址時(shí),CPU需要對(duì)存儲(chǔ)空間中的特定地址執(zhí)行寫(xiě)操作。
一個(gè)典型的對(duì)NAND閃存的讀操作有如下步驟:
1. 根據(jù)NAND閃存的特性,通過(guò)FSMC_PCRx和FSMC_PMEMx寄存器配置和使能相應(yīng)的存儲(chǔ)器塊,對(duì)于某些NAND閃存可能還要操作FSMC_PATTx寄存器(見(jiàn)19.6.5節(jié)——NAND閃存預(yù)等待功能)。需要配置的位包括:PWID指示NAND閃存的數(shù)據(jù)總線寬度,PTYP=1,PWAITEN=1,PBKEN=1,參見(jiàn)FSMC_PMEM2..4寄存器的時(shí)序配置。
2. CPU在通用存儲(chǔ)空間寫(xiě)入閃存命令字節(jié)(例如對(duì)于Samsung的NAND閃存,該字節(jié)為0x00),在寫(xiě)信號(hào)有效期間(NWE的低脈沖)NAND閃存的CLE輸入變?yōu)橛行?高電平),這時(shí)CPU寫(xiě)的字節(jié)被NAND閃存識(shí)別為一個(gè)命令。一旦NAND閃存鎖存了這個(gè)命令,隨后的頁(yè)讀操作不必再發(fā)送相同的命令。
3. CPU在通用存儲(chǔ)器空間或?qū)傩钥臻g寫(xiě)入四個(gè)字節(jié)(較小容量的NAND閃存可能只需要三個(gè)字節(jié))作為讀操作的開(kāi)始地址(STARTAD),以64Mbx8的NAND閃存為例,按照STARTAD[7:0]、STARTAD[16:9]、STARTAD[24:17]和STARTAD[25] 的順序?qū)懭?。在?xiě)信號(hào)有效期間(NWE的低脈沖)NAND閃存的ALE輸入變?yōu)橛行?高電平),這時(shí)CPU寫(xiě)的字節(jié)被NAND閃存識(shí)別為讀操作的開(kāi)始地址。使用屬性存儲(chǔ)空間,可以使FSMC產(chǎn)生不同的時(shí)序,實(shí)現(xiàn)某些NAND閃存所需的預(yù)等待功能(見(jiàn)19.6.5 NAND閃存預(yù)等待功能)。
4. 控制器在開(kāi)始(對(duì)相同的或另一個(gè)存儲(chǔ)器塊)新的操作之前等待NAND閃存準(zhǔn)備就緒(R/NB信號(hào)變?yōu)楦?,在等待期間控制器保持NCE信號(hào)有效(低電平)。
5. CPU可以在通用存儲(chǔ)空間執(zhí)行字節(jié)讀操作,逐字節(jié)地讀出NAND閃存的存儲(chǔ)頁(yè)(數(shù)據(jù)域和后備域)
6. 在CPU不寫(xiě)入命令或地址的情況下,NAND閃存的下一個(gè)頁(yè)可以以下述任一種方式讀出:
─ 按照步驟5進(jìn)行操作
─ 返回步驟3開(kāi)始輸入一個(gè)新的地址
─ 返回步驟2開(kāi)始輸入一個(gè)新的命令
NAND閃存預(yù)等待功能某些NAND閃存要求在輸入最后一個(gè)地址字節(jié)后,控制器等待R/NB信號(hào)變低,如下圖: