天天看點

CFI --- Common Flash Interface

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)

CFI --- Common Flash Interface

   在query mode下,再讀Flash位址的話,得到的就不是存儲的使用者資料了,而是片子自己的屬性資訊:廠商id,容量大小等(即所謂的Query Struct)

3. Query Struct

   在Query mode時,一定要無視Flash的晶片的高位元組資料線,隻關心最低位元組資料線D7-D0,比如:

CFI --- Common Flash Interface

解釋一下,上圖是在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是這樣的:

CFI --- Common Flash Interface

0x10段的 'QRY'總是被用來判别NOR Flash是否支援CFI

CFI --- Common Flash Interface

0x1B段主要描述目前NOR Flash的Program 和 Erase操作所使用的電壓

CFI --- Common Flash Interface

0x27段主要描述的就是Flash的容量等資訊

CFI --- Common Flash Interface

4. 判斷是否支援CFI的流程

CFI --- Common Flash Interface