1. 程式人生 > >NAND FLASH程式設計器燒錄詳解

NAND FLASH程式設計器燒錄詳解


      

  SUPERPRO5000是西爾特出品的新一代USB介面獨立式智慧極速NAND FLASH程式設計器.具有程式設計速度快,燒錄穩定,軟體整合度高,更智慧化的特點。是NAND Flash使用者理想的選擇。
        SUPERPRO5000除了支援演算法整合的三個壞塊處理方法外,還可以為客戶選擇定製其他的燒錄方法(比如三星平臺,高通平臺,博通平臺, WinCE 燒錄等)。演算法本生支援ecc512B(Hamming Code),並且支援生成的ecc碼在spare區任意連續地址map。演算法本生還支援NAND Boot區的只讀屬性處理,一般表現為Bad block Mark前的OEMReserved的處理。
       燒錄每64Mbytes僅需80秒,部分晶片時間甚至小於60秒。其中燒錄過程包括Erase + Program + Verify.

關於NAND Flash

     NAND FLASH是一種易失的快閃記憶體技術,被廣泛使用於U盤,MP3/MP4,GPS,PDA,GSM/3G手機,無線上網裝置,筆記本等多個領域。NAND是高資料儲存密度的理想解決方案。

   和NOR FLASH相比。NAND FLASH具有以下的特點:

1) NAND FLASH同NOR FLASH相比,NAND FLASH有著容量大、價格低等優勢。
2)存在壞塊。由於NAND生產工藝的原因,出廠晶片中會隨機出現壞塊。壞塊在出廠時已經被初始化,並在特殊區域中標記為不可用,在使用過程中如果出現壞塊,也需要進行標記。
3) 易出現位反轉。NAND FLASH更易出現位反轉的現象,如果位反轉出現在關鍵檔案上,會導致系統掛機。所以在使用NAND FLASH的同時,建議使用ECC/EDC演算法確保可靠性。 
4) 存在Spare區。正因為NAND FLASH有著上面的兩項特殊的地方,Spare區就扮演作存放壞塊標誌,ECC值以及晶片資訊和檔案資訊的作用。
5) 多維的空間結構。NAND FLASH一般由block,page,sector等結構組成。所以在有的檔案系統中就衍生出各種分割槽資訊和扇區資訊等。

   NAND FLASH的壞塊處理方式有很多,不同的方案公司或者系統提供商都會選擇不同的壞塊處理方法,來滿足產品開發的需要,目前我們公司已經根據客戶的要求,解決了近百種的壞塊處理方案。並且將常用的三種壞塊處理方案,整合到燒錄演算法裡面。
  本文件以K9F1208U0B為例,詳細闡述了SUPERPRO5000下NAND FLASH的燒錄方法。

1.NAND FLASH程式設計器燒錄軟體概述。

選擇好K9F1208U0B後,將出現下圖(Figure 1)。



                                                                             (Figure 1)
Device Information中,提示(1)提供了該晶片使用何種介面卡。提示(2)簡明扼要的講述了本軟體支援壞塊處理方法的種類和技術要點。
下圖是主軟體介面(Figure 2)



   在主軟體介面中,提示1列出了NAND燒錄擁有的正常操作, 從上到下包括:自動批處理(Auto),程式設計寫入(Program),讀出資料(Read),校驗(Verify),空檢查(Blank_Check),擦除(Erase),啟動程式碼塊檢查(Boot Block Check)。
  其中自動批處理(Auto)必須在提示4(Edit Auto)中設定好才能執行。啟動程式碼塊檢查(Boot Block Check)在提示2中設定啟動程式碼所佔塊(Blocks)的範圍。
  提示2(Dev.Config)是NAND Flash燒錄的配置中心,壞塊處理方法,ECC,設定燒錄範圍,啟動程式碼範圍等的設定都在這個選項裡面。
  提示3是燒錄軟體的資訊輸出區,演算法的有關資訊,燒錄過程的有關資訊和燒錄出錯資訊都在這個區域列印輸出。

2.NAND Flash 的壞塊和壞塊標誌。

   由於製造工藝的原因,NAND Flash 在生產過程中可能會產生壞塊,壞塊在出廠前將會被標記。對於壞塊而言,儲存的資訊可能會丟失,不能正常使用。另外在NAND Flash擦除或者程式設計過程中,出現操作失敗後,表示該塊不能正常使用,也應標記成壞塊。所以在一般情況下,在操作NAND Flash之前,先要檢查一下要操作的是否是壞塊,以免壞塊標記被破壞。此外,為了保證儲存資訊的可靠性,從NAND Flash中讀取的資料還可以引入ECC校驗,ECC碼一般存放在該頁的spare區。關於ECC,詳細介紹見下一章。
  小頁模式的NAND Flash(8bit)的壞塊標誌(BM)一般放在每個block第一頁和第二頁的第6個位元組。
  Spare區:

0

1

2

3

4

BM

6

7

8

9

10

11

12

13

14

15

   小頁模式的NAND Flash(16bit)的壞塊標誌(BM)一般放在每個block第一頁和第二頁的第1個字(雙位元組)。

  Spare區:

BM

1

2

3

4

5

6

  大頁模式的NAND Flash(8bit)的壞塊標誌(BM)一般放在每個block第一頁和第二頁的第1個位元組。

Spare區:

BM

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

  大頁模式的NAND Flash(16bit)的壞塊標誌(BM)一般放在每個block第一頁和第二頁的第1個字(雙位元組)。
  Spare區:

BM

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

  一般情況下壞塊標誌(BM)處為0xFF或者0xFFFF表示好塊,非0xFF或者0xFFFF代表壞塊。
  小頁模式的NAND Flash(8bit)的壞塊標誌(BM)處會出現下面的情況。我們在總結多個廠商的要求後也把它作為一種壞塊標誌進行了整合化處理。
   Spare區:

0

1

2

3

OEM
Reserved

BM

6

7

8

9

10

11

12

13

14

15

  其中OEM Reserved 標誌:為OEM 系統保留塊(比如NBOOT,TOC,EBOOT使用),一般可以對外界表示這段程式碼區為只讀屬性。
  BM標誌:為0x00當前塊為壞塊,為0xFF, 當前塊為好塊,但如果此時的OEM Reserved標誌處為設定的值的話,此處BM標誌為0x00,在燒錄過程中做好塊。此設定在器件配置字中如下(Figure 3):
  如圖,表示OEM Reserved的值為0xFC,在這種設定下,當判斷到BM標誌為0x00時,前面的OEM Reserved的值讀出為0xFC時,在燒錄過程中判斷其為好塊。


3.常用的三種壞塊處理方法


A) 跳過壞塊 (Skip bad block)。


(Figure 4)

這是一種最常用的壞塊處理方法。它的實現原理比較簡單,順序燒錄,發現某一塊為壞塊後,將相應資料燒錄到下有個好塊,如果發現連續的壞塊的話,也連續的跳過這些壞塊,並把資料燒錄的下一個出現的好塊中。其原理如下圖(Figure 5)。


  採用這種燒錄方法,要關注提示2的設定,以便對NAND的儲存區域進行更靈活的訪問。
  其中UBA start blk(hex): 指定檔案從那個塊開始燒錄,Size of UBA blks(hex): 的內容表示燒錄的檔案佔用多少個好塊,例如:燒錄晶片K9F1208U0B,燒錄的檔案包含spare區的內容。燒錄檔案的大小為19M整,燒錄的起始塊為第0塊。K9F1208U0B為小頁模式的NAND,每個塊包含spare區的大小為0x4200Bytes = 16896(dec)Bytes。那麼要燒寫的block = 19*1024*1024/16896 = 1179.15,取整為1180(dec) = 0x49C.所以UBA start blk(hex): 0000, Size of UBA blks(hex): 0x49C。
  注:如果小頁模式不包含spare區的內容,則每個塊的大小為0x4000Bytes. 大頁模式包含spare區的內容,每個塊的大小為0x21000Bytes,大頁模式不包含spare區的內容,每個塊的大小為0x20000.
  採用這種燒錄方法的話,壞塊標誌位是不允許寫成非“0xFF”或者“0xFFFF”(16bit),所以在緩衝區(buffer)中的資料,在燒錄過程中,壞塊標誌為都被強制改寫0xFF或者0xFFFF。 具有OEM Reserved值的情況下,如果壞塊標誌的處的值滿足其判斷要求,將不作強制修改。
B) 硬拷貝 (Hard Copy)。

  Hard Copy的方法在讀寫過程中,沒有判斷壞塊,而是把它當成一般的Flash進行處理的。但在燒寫過程,由於壞塊的存在,導致對應的資料無法燒寫進去,所以在一般情況下,我們不推薦使用這種方式燒寫NANDFLASH。
  不過在讀取晶片(母片)的時候,有時候我們並不清楚該晶片的壞塊標誌位是不是被改變,不清楚該晶片用的是什麼壞塊處理方法,我們還是推薦採用這種方法讀晶片內容。這種方法可以讀出晶片的完全內容,以便進行下一步分析,或者直接拷貝。在讀取晶片完全內容時,例如讀取晶片K9F1208U0B,該晶片共有4096(0x1000)個block。那麼在器件配置字中要設定Size of UBA blks(hex) : 1000 。這樣讀取的時候就把所有塊的內容讀出來。
  用這種方法之間拷貝晶片的時候,要儘量確保目標的晶片是沒有壞塊的晶片,才能保證拷貝的成功率。