Flash 存储器接口还有两个标准:CFI和JEDEC。
CFI为公共Flash接口[Common Flash Interface], 用来帮助程序从Flash芯片中获取操作方式信息,而不用在程序中硬编码Flash的ID。
JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。
CFI Flash
自从Intel公司于1988年推出了可快速擦写的非易失性存储器Flash Memory以来,快速擦写存储器Flash Memory技术就得到了非常迅速的发展。这主要是由于Flash Memory具有不需要存储电容器、集成度更高、制造成本低于DRAM、使用方便,读写灵活、访问速度快、断电后不丢失信息等特点。
虽然Flash Memory应用越来越广泛,但由于生产Flash Memory的半导体制造商众 多,不同厂商Flash Memory产品的操作命令集和电气参数又千差万别,这给Flash Memory的开发设计人员和OEM制造商带来许多不便。为了对现有的Flash Memory的产品进行升级或使用其它公司的Flash Memory产品替换,必须对原有的程序代码和硬件结构进行修改。为解决上述原因所引发的问题,迫切需要Flash Memory制造商提出一个公共的标准解决方案,在这样的背景下,公共闪存接口(Common Flash Interface),简称CFI 诞生了,CFI是一个公开的标准的从Flash Memory器件中读取数据的接口。它可以使系统软件查询已安装的Flash Memory器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。利用CFI可以不用修改系统软件就可以用新型的和改进的产品代替旧版本的产品。例如:如果新型的Flash Memory的擦除时间只有旧版本的一半,系统软件只要通过CFI读取新器件的擦除时间等参数,修改一下定时器的时间参数即可。
JEDEC
Joint Electron Device Engineering Council 即电子元件工业联合会。JEDEC是由生产厂商们制定的国际性协议,主要为计算机内存制定。工业标准的内存通常指的是符合JEDEC标准的一组内存。
以u-boot-2009.03为例U-Boot本身支持CFI接口规范的闪存涉及到的文件主要包括drivers/mtd/cfi-flash.c,comrhand/cmd_flash.c。
假设要使用两片Intel 28F128K18C的兼容CFI标准的NOR型闪存,单片容量为16MB,数据线宽度为16-bit,两片并作一个32MB容量的数据宽度为32-bit的BANK来使用。在头文件include/flash.h中没有定义该芯片的相关信息,可以手动添加;这并不是必须的,如果你并不需要使用这些信息的话(例如将CFI驱动所检测到的Device Id与头文件中定义的Device ID进行比对与验证)。
/* file : include/flash.h */
#define INTEL_ID_28F128K18 0x88068806 /* added by aaron */
#define FLASH_28F128K18 0x00BA /*Intel 28F128K18 (128M=8Mx16)*/
要使用U-Boot自带的CFI闪存驱动,必须要作的是在