關於部落格
職場生活筆記....熱情依然在
  • 51771

    累積人氣

  • 7

    今日人氣

    1

    追蹤人氣

MLC , Spare Area

原來K9G8G08.C 中除了支援K9G8G08 (id=0xecd3) 外,也支援 K9LAG08 (id=0xecd5)。 但是 prompt 都是顯示 K9G8G08。 Bad Block 的判斷 : NF_IsBadBlock( ) 是讀取block的第2048 page,然後判斷第一個byte,若不是0xFF,就代表是bad block。 一個page中,每512 視作一個sector,作一次4 bit ecc。 所以 2 k 的page,會有 4 個page,4個ecc。 每個sector的4 bit ecc需要8個byte 來存。 所以共需要 4 x 8 = 32 bytes 另外,這 32 bytes 的ecc data也需要算出 4 bit ecc。 但是因為 chip 內的4 bit ecc generator,固定要由512 bytes data產生出來,所以為了spare area的64 byte,要準備一個dummy的512 bytes buffer,都填滿 0xFF。 然後把 spare area的64 bytes 填入開頭的部份,再算出這一塊(512 bytes)的 4 bit ecc。 但是實際上spare area的前四bytes和後16 bytes沒有納入計算,是從spare area + 4 的位置開始copy 44 bytes 到 dummy buffer中 算出來的spare area ecc (8bytes)。再寫到spare area的最後16 bytes的區域 (copy 一份)。 所以spare area的內容是: 0 : Bad Block Mark (OK is oxFF)1 : Clean Mark (0x00)2~ 3 : Reserved (0xFF)4~15 : Spare Area Content (0xFF)16~23 : Sector 0 ECC24~31 : Sector 1 ECC32~39 : Sector 2 ECC40~47 : Sector 3 ECC48~55 : Spare Area ECC56~63 : Copy of Spare Area ECC +----------------------------------------+ "Program Like SLC " 是使用 1 bit ECC。 "34page fix" 是只program 34 pages (省時間)。 "2 plane Program" 是利用 0x81 command作兩個page 的同時寫入。 因為MLC Write 實在太慢了,所以特地使用 2 個page 同時寫入,讓寫入的速度加快。 但是這兩個 page 有一定的規定,一定要在不同的plane 上的同一個page。 嗯...這個有點複雜。 應該說MLC內部設計了兩個 plane。將所有的 Block 區分為兩個區塊 。 然後,再故意將 .. Block 0 放在plan 0... Block 1 放在plan 1.. Block 2 放在plan 0.. Block 3 放在plan 1.. .. 這樣交錯放。 如果不利用 2 plan 結構的好處,一次只write一個page,是不用管這樣交錯放置的設計。 但是若是要用到為了 2 plan 特別設計的 "2 plan write command : 0x81",就要注意到, 0x81 command所寫入的第二個page,必須要和剛剛寫入(0x81 command是緊接在一個write command 後的)的page在不同 plan 上。
相簿設定
標籤設定
相簿狀態