1.CFI簡介
CFI(Common Flash Interface)的作用是把 NOR Flash 的資訊通過統一的方法讀出來。
不同公司産的NOR Flash在 erase,program,lock,unlock等操作上有差别,即command set不一樣。
本來産品中用這種NOR Flash,後來更新又換了其他牌子的了,command set不一樣,就要改代碼。
NOR Flash要是支援CFI就好辦多了,就不用改代碼。通過CFI可以讀出片子的manufacturer id,vendorid等等,在程式中就可以通過以上資訊來選擇正确的erase,program等操作方式。
NOR Flash的資料線和位址線都可能為32/16/8條。
為了統一起見,通過CFI接口查詢時,
CFI接口描述的位址均為Flash晶片的位址,
CFI接口查詢到的資料,以低位元組D7-D0上為準,高位元組資料線無視就好了。
2. Query mode
NOR Flash支援很多指令,包括erase,program,lock什麼的。若NOR Flash支援CFI的話,它一定要支援CFI Query Command。
為了進入讓晶片進入Query mode,需要向0x55(Flash位址)上寫資料0x98
Flash的位址線上放 55h (高位元組全是0)
Flash的資料線上放 98h (高位元組全是0)
在query mode下,再讀Flash位址的話,得到的就不是存儲的使用者資料了,而是片子自己的屬性資訊:廠商id,容量大小等(即所謂的Query Struct)
3. Query Struct
在Query mode時,一定要無視Flash的晶片的高位元組資料線,隻關心最低位元組資料線D7-D0,比如:
解釋一下,上圖是在query mode時,讀0x10(flash位址)時得到的結果
第一列:x16 device / x8 mode的意思是說,晶片有16根位址線,配置後,我們隻用其中的8根
第二列:Flash的位址 0x10
第四列:為了通路Flash位址0x10, CPU需要發出的位址,注意這裡位址線錯接。
第五列:CPU資料線得到的資料。
x8 device/ x8 mode 沒啥講的,地球人都知道
x16 device/x16 mode
1.為通路Flash的位址0x10,CPU需在位址線上發出的位址為0x20,見 NOR Flash的文章。
2.Flash把0x10(Flash位址)上的16-bit資料放到資料線上,這個資料是 0x0051(即 'null' 'Q')
3.CPU 得到16-bit資料,但隻有低位元組是有用的(即'Q') 記住CFI接口隻使用位址線的最低位元組
為了友善起見,我們隻考慮 x8 mode 這種情況,則Query Struct是這樣的:
0x10段的 'QRY'總是被用來判别NOR Flash是否支援CFI
0x1B段主要描述目前NOR Flash的Program 和 Erase操作所使用的電壓
0x27段主要描述的就是Flash的容量等資訊
4. 判斷是否支援CFI的流程