amd部分都是为了amd公司一些老的不支持cfi的芯片设计的。不知道现在这种老的flash还有多少人用呢?不过我觉得这部分和linux的mtd中的jedec部分倒是有部分类似的地方,记得我用sst39系列的时候就因为linux的mtdcfi那部分对sst39没有直接支持,jedec使用更方便一些。
第一个过程:
mtd_dev_init() [mtdcore.c] -> mtd_init() [s3c2410_flash.c] -> amd_init()[s3c2410_flash.c]
这个过程和cfi的几乎一样。
第二个过程:
do_map_probe()[chipreg.c]->get_mtd_chip_driver()[chipreg.c]->amd_flash_probe()[amd_flash.c]
amd_flash_probe和cfi_probe最大的不同就是,cfi_probe是通过cfi接口得到芯片信息的,而amd_flash_probe是通过JEDEC读取machineID和deviceID,然后查找一个struct amd_flash_info table[]表来得到芯片信息的。
table里面有很多芯片的信息,你也可以添加自己的芯片。
接下来的过程和cfi中的mtd_do_chip_probe还是很类似的
第三个过程:
probe_new_chip()[amd_flash.c]
首先第一次调用这个函数,通过JEDEC读出
machineID和deviceID,查表得到之前写好的更全面的信息。
以后根据interleave多次调用把struct flchip信息填好,主要就是start地址。
第四个过程:
还是回到amd_flash_probe函数,完善mtd函数,把写读擦除等函数填进。
总的来说,amd这部分简单多了,因为他是查表,通用性肯定没那么好,这也是cfi出现的原因。
阅读(1235) | 评论(0) | 转发(0) |