CFI命令集现在大体有两个,在linux内核的MTD下我就可以看到,其中一个是:cfi_cmdset_0001.c,另一个是cfi_cmdset_0002.c,还是一个是cfi_cmdset_0020.c这个是ST后来新加的,我们一般不会去care它的,一般如果你用的是Micrion的Norflash,我们用的是cfi_cmdset_0002.c这信指命令集。这里有一个关于cfi_cmdset_0002.c中关于do_buffer_write中timeout的讨论 http://lists.infradead.org/pipermail/linux-mtd/2013-April/046446.html,这个是在do_buffer_write这个函数中发现有timeout不够的问题,在最近的内核版本中3.15,关于tiimeout的作法是这样的.
我们知道一些关于norflash的信息,我们可以通过读取CFI信息获取,关于CFI的信息,在linux内核中,主要由两个结构体来完成。先来看一下CFI总的信息表吧:我们就是Micron的MT28EW来例:
下面这张表就是部的CFI表分布,其中前三个表是存在结构体cfi_ident,而最后一个是存在结构体cfi_pri_amdstd。
/* Basic Query Structure */
struct cfi_ident {
uint8_t qry[3]; // 0x10
uint16_t P_ID; //0x13
uint16_t P_ADR; //0x15
uint16_t A_ID; //0x17
uint16_t A_ADR;
uint8_t VccMin; // unused 0x1b
uint8_t VccMax; // unused
uint8_t VppMin; // unused
uint8_t VppMax; // unused
uint8_t WordWriteTimeoutTyp; //0x1f used
uint8_t BufWriteTimeoutTyp; // used
uint8_t BlockEraseTimeoutTyp;

博客探讨了Linux内核MTD子系统下cfi_cmdset_0002命令集中do_buffer_write函数的timeout问题。针对Micron Norflash设备,文章引用了一个在Linux MTD邮件列表中的讨论,指出在内核版本3.15中发现的timeout不足问题,并说明通常只使用了WordWriteTimeoutTyp、BufWriteTimeoutTyp和BlockEraseTimeoutTyp三个timeout定义。内容还涉及CFI信息的获取及结构体cfi_ident和cfi_pri_amdstd的作用。
最低0.47元/天 解锁文章
594

被折叠的 条评论
为什么被折叠?



