Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC

Flash  存储器 接口标准:CFI和JEDEC。

  CFI为公共Flash接口[Common FlashInterface],用来帮助程序从Flash芯片中获取操作方式信息,而不用在程序中硬编码Flash的ID。

CFI

自从Intel公司于1988年推出了可快速擦写的非易失性存储器Flash Memory以来,快速擦写存储器FlashMemory技术就得到了非常迅速的发展。这主要是由于Flash Memory具有不需要存储电容器、集成度更高、制造成本低于DRAM、使用方便,读写灵活、访问速度快、断电后不丢失信息等特点。 虽然Flash Memory应用越来越广泛,但由于生产Flash Memory的半导体制造商众多,不同厂商Flash Memory产品的操作命令集和电气参数又千差万别,这给Flash Memory的开发设计人员和OEM制造商带来许多不便。为了对现有的Flash Memory的产品进行升级或使用其它公司的FlashMemory产品替换,必须对原有的程序代码和硬件结构进行修改。为解决上述原因所引发的问题,迫切需要Flash Memory制造商提出一个公共的标准解决方案,在这样的背景下,公共闪存接口(Common Flash Interface),简称CFI 诞生了,CFI是一个公开的标准的从Flash Memory器件中读取数据的接口。它可以使系统软件查询已安装的Flash Memory器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。利用CFI可以不用修改系统软件就可以用新型的和改进的产品代替旧版本的产品。例如:如果新型的Flash Memory的擦除时间只有旧版本的一半,系统软件只要通过CFI读取新器件的擦除时间等参数,修改一下定时器的时间参数即可。

CFI(Common Flash Interface)的作用是把 NOR Flash 的信息通过统一的方法读出来。

   不同公司产的NOR Flash在 erase,program,lock,unlock等操作上有差别,即command set不一样。
   本来产品中用这种NOR Flash,后来升级又换了其他牌子的了,command set不一样,就要改代码。

   NOR Flash要是支持CFI就好办多了,就不用改代码。通过CFI可以读出片子的manufacturer id,vendorid等等,在程序中就可以通过以上信息来选择正确的erase,program等操作方式。

   NOR Flash的数据线和地址线都可能为32/16/8条。
   为了统一起见,通过CFI接口查询时,
   CFI接口描述的地址均为Flash芯片的地址,
   CFI接口查询到的数据,以低字节D7-D0上为准,高字节数据线无视就好了。

2. Query mode

   NOR Flash支持很多命令,包括erase,program,lock什么的。若NOR Flash支持CFI的话,它一定要支持CFI Query Command。

   为了进入让芯片进入Query mode,需要向0x55(Flash地址)上写数据0x98
       Flash的地址线上放 55h    (高字节全是0)
       Flash的数据线上放 98h    (高字节全是0)
Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第1张图片

   在query mode下,再读Flash地址的话,得到的就不是存储的用户数据了,而是片子自己的属性信息:厂商id,容量大小等(即所谓的Query Struct)

3. Query Struct

   在Query mode时,一定要无视Flash的芯片的高字节数据线,只关心最低字节数据线D7-D0,比如:
   Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第2张图片

解释一下,上图是在query mode时,读0x10(flash地址)时得到的结果

第一列:x16 device / x8 mode的意思是说,芯片有16根地址线,配置后,我们只用其中的8根
第二列:Flash的地址 0x10
第四列:为了访问Flash地址0x10, CPU需要发出的地址,注意这里地址线错接。
第五列:CPU数据线得到的数据。


x8 device/ x8 mode  没啥讲的,地球人都知道
x16 device/x16 mode
        1.为访问Flash的地址0x10,CPU需在地址线上发出的地址为0x20,见NOR Flash的帖子。
        2.Flash把0x10(Flash地址)上的16-bit数据放到数据线上,这个数据是 0x0051(即 'null' 'Q')
        3.CPU 得到16-bit数据,但只有低字节是有用的(即'Q') 记住CFI接口只使用地址线的最低字节


为了方便起见,我们只考虑 x8 mode 这种情况,则Query Struct是这样的:
Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第3张图片


0x10段的 'QRY'总是被用来判别NOR Flash是否支持CFI
Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第4张图片
0x1B段主要描述当前NOR Flash的Program 和 Erase操作所使用的电压
Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第5张图片


0x27段主要描述的就是Flash的容量等信息
Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第6张图片

4. 判断是否支持CFI的流程

Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC_第7张图片

JEDEC

Joint Electron Device Engineering Council 即电子元件工业联合会。JEDEC是由生产厂商们制定的国际性协议,主要为 计算机 内存制定。JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。工业标准的 内存 通常指的是符合JEDEC标准的一组内存。

你可能感兴趣的:(Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC)