星期五, 5月 20, 2011

Linux MTD Nand Flash Part Trace Notes

Linux MTD Nand Flash Part Trace Notes

Nand Flash 型號判斷在檔案:

drivers/mtd/nand/nand_base.c

主要函式:

nand_get_flash_type

其中:

maf_id // 1st ID
dev_id // 2nd ID
chip->cellinfo // 3rd ID
extid // 4th ID

程式可利用這幾個 ID 來判斷 write size, erase size, oob size (spare) 跟 bus width 等等, 詳細方式請參考程式碼與 datasheet.

Note:

較舊版本 2.6.21 沒一次讀取, 在某些 flash 如 K9F2G08U0A, K9K8G08U0B 上面讀取 3rd, 4th 等 ID 會有問題,
因此如果使用較舊版本要自己強制把 id 值填入才會正確, 如:

#if 1
if (*maf_id == 0xec && dev_id == 0xda) { // K9F2G08U0A
    chip->cellinfo = 0x10;
    extid = 0x95;
}
#endif

較新版本如 2.6.36 則是改成以一個迴圈一次讀完 8 個 ID, 比較正常, 因此在新版本上也可以印出 id_data 這個 array 來 debug 如:

printk(KERN_INFO "nand flash ID - 1:0x%02x 2:0x%02x 3:0x%02x 4:0x%02x 5:0x%02x 6:0x%02x 7:0x%02x 8:0x%02x\n",
    id_data[0], id_data[1], id_data[2], id_data[3], id_data[4], id_data[5], id_data[6], id_data[7]);

其中:
id_data[0] // 1st ID
id_data[1] // 2nd ID
...
id_data[7] // 8th ID

沒有留言: