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)
在query mode下,再读Flash地址的话,得到的就不是存储的用户数据了,而是片子自己的属性信息:厂商id,容量大小等(即所谓的Query Struct)
3. Query Struct
在Query mode时,一定要无视Flash的芯片的高字节数据线,只关心最低字节数据线D7-D0,比如:
解释一下,上图是在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是这样的:
0x10段的 'QRY'总是被用来判别NOR Flash是否支持CFI
0x1B段主要描述当前NOR Flash的Program 和 Erase操作所使用的电压
0x27段主要描述的就是Flash的容量等信息
4. 判断是否支持CFI的流程
JEDEC
Joint Electron Device Engineering Council 即电子元件工业联合会。JEDEC是由生产厂商们制定的国际性协议,主要为 计算机 内存制定。JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。工业标准的 内存 通常指的是符合JEDEC标准的一组内存。
Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC相关推荐
- 十天学Linux内核之第七天---电源开和关时都发生了什么
十天学Linux内核之第七天---电源开和关时都发生了什么 原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差 ...
- linux内核mtd分区,linux内核MTD分区
linux内核MTD分区 (30页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 MTD 设备驱动 和 NAND Flash 驱动程序分析 ...
- linux内核网络子系统初探---概述
linux内核网络子系统初探-概述 一.网络模型 简单介绍 学习网络时,必定能在各种教材资料里见到以下三种网络模型: 三种模型间的差异: OSI七层模型是理论上的网络模型,从功能方面分成了相对独立的7 ...
- Linux如何禁用rc4加密算法,使用arc4算法的linux内核加密子系统
我试图用"arc4"算法来加密来自模块的任意数据流 流.但我很担心我应该如何 接近后援实现一点点无知是使用arc4算法的linux内核加密子系统 $find . -type f - ...
- Linux内核crypto子系统的调用逻辑
testmgr.c - crypto/testmgr.c - Linux source code (v5.15.11) - Bootlin 上述代码是内核内部即crypto子系统对外提供密码服务的测试 ...
- Linux内核分析 第七周 可执行程序的装载
张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...
- Linux内核学习(七):linux kernel内核启动(一):概述篇
Linux内核学习(七):linux kernel内核启动(一):概述篇 这一篇让我们来大致的了解一下Linux内核的启动过程 这篇文章不涉及源码,重在让你知道这个linux内核的启动过程,源码详细的 ...
- Linux内核--五大子系统
linux内核的子系统有5个:1. 进程调度控制系统(SCHED):2.内存管理系统(MM),主要作用是控制多个进程安全地共享主内存区域:3.虚拟文件系统(VFS):4.网络接口(NET):5.进程间 ...
- Linux内核邻接子系统(arp协议)的工作原理
主要参考了<深入linux内核架构>和<精通Linux内核网络>相关章节 文章目录 Linux内核邻接子系统(二层到三层) 邻接子系统的核心 struct neighbour ...
最新文章
- vs2017开发Node.js控制台程序
- 使用Hexo在Github搭建静态博客
- jmeter响应数据Unicode编码转换为汉字
- 【推荐】ABAP select语句性能优化之高级教程
- CSDN安全设置需改进
- NBear.Mapping使用教程(5):实体对象与NameValueCollection,Dicitonary以及NBear.Mapping性能
- 开发小计之判断输入字符串类型(正则表达式)
- BaseService代码示例
- Less(v3.9.0)使用详解—变量
- 谜题35:一分钟又一分钟
- 计算机区分活动窗口,计算机WINDWS操作题.doc
- 谈产品研发项目需求及需求变更管理
- Dreammail 下载与安装
- 信息系统项目管理(二)网络协议、网络存储技术、网络工程、数据仓库和中间件
- Centos7安装sqliteman
- 2023重庆科技学院计算机考研信息汇总
- echarts图例动态置灰
- 记录某次利用word邮件功能 由excel数据中批量生成奖状 遇到的问题及解决措施
- oracle数据库path,oracle数据库path
- 虚拟盒子下装linux系统,eUnoBox(虚拟盒子) v3.14免费版