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
沒有留言:
張貼留言