什么是Common Flash Interface

news2024/9/22 21:32:21

目录

1. CFI概述

2. CFI的使用小结

3. CFI在车规MCU里有用吗


在看关于ifx的标准flash驱动配置时,无意中瞄到一个注灰的选项:

Try to use CFI information to detect Flash Type

之前讲过CFI这个标准,但为何在IFX memtool工具里注灰?什么是CFI information?带着这个疑问,我特地到官网去仔细搜索,确实发现了以前没有注意到的知识点。

1. CFI概述

CFI,全称Common Flash Interface,它是由JEDEC(Joint Electron Device Engineering Council)在2003年提出的一个标准。

该标准定义了对符合CFI的Flash的查询接口,允许对Flash读写擦等接口的参数化和平台化,允许programmer可以读到Flash相关设备等电气特性,包括memory大小、擦写速度、特殊功能feature等等,换句话说,相当于把Flash的数据手册装载到Flash这个物理设备里,在有需要的时候可供相关人员读取使用。

这就很神奇了,之前接触过的MCU,例如NXP S32K1\3、MPC5744,瑞萨RH850-P\F等系列,英飞凌TC3xx等等,搜遍所有手册也没发现CFI这个词汇相关描述。

所以,还是得首先从标准上看看CFI具体讲了些什么。

CFI实际上定义了以数组的形式把Flash的电气特性等存到硬件中,具体包含了5个部分:

  • CFI查询标识符(CFI Query Identification),包括指令集ID、算法等;

  • 系统接口(System Interface),包括Flash时间、电压等参数的信息

  • 设备layout信息

  • Vendor指定的主要扩展信息

  • Vendor指定的可选扩展信息

在上述表格里,我们看到了针对地址描述出现了x16,相应的还有x8、x32,我们在车控类ECU的Flash开发时根据没有关注这些,确实很有意思。

首先明确一点,目前接触的MCU都是以字节编址,我们在写软件的时候也是一个地址一个Byte;对于Flash这种设备来说,它是有位宽约束的,例如x8表示byte位宽,x16表示word位宽(哟个地址对应2个Byte数据),x32表示Dword位宽(1个地址对应4bytes数据),但是我们写代码不会去操心这个事情啊。

所以在设计时,不同位宽的Flash与CPU连接时就会有相应的设计来进行转换,暂且叫做“Flash控制器”,

例如当CPU发出访问,要到0x0000_0001地址获取1byte数据,但是对于x16来说Flash来说,0x0000_0001表示是其实是一个word,并且不是CPU想要访问的那个byte数据,所以设计里CPU和Flash地址接线上首先要错位,保证CPU发出0x0000_0000和0x0000_0001两个地址对应的都是x16 Flash的0x0000_0000地址;那么x16 Flash返回2个byte的数据后,需要有这个Flash控制器来选择返回第一个字节还是第二个字节。典型连接如下:

地址总线错开一位,保证了CPU的0x0000_0001和0,对于Flash来说都是地址0x0000_0000。 

有了这个基础后,我们来看,CFI针对不同位宽的Flash是如何定义的,具体如下:

可以看到不管是什么位宽的Flash,有效数据都是最低位8位(D7-D0),因此针对不同位宽的Flash,我们在软件设计上需要按照规范要求进行地址偏移。

2. CFI的使用小结

由于在车规MCU的eFlash里没有发现任何CFI的描述,我特地去找了一些满足CFI的Flash产品,其中包括Cypress的Parellel Nor Flash、Micron的Parallel Nor Flash,简单总结使用方法。

根据标准,要读取CFI相关数组信息,必须在偏移地址55H上发送98H的指令,假设在x16Flash设备上必须发送0098H,x32 设备上发送00000098H的指令,相应地址也要做偏移,如下:

假设现在基地址为0x1000_0000,要想让Flash进入到CFI模式,不同位宽设备的伪代码如下:

  • x8 Flash  ,Write8   0x1000_0055 0x98
  • x16 Flash,Write16 0x1000_00AA 0x0098,从Flash视角,一个地址对应2个Byte,因此软件实现往55h写98h,就需要做一个地址偏移,0x55 * 2 = AA;
  • x32 Flash , Write32 0x1000_0154 0x0000_0098,软件0x55* 4

读取CFI相关信息同样如此, 以美光MT28EW为例,它支持x8和x16的总线模式,因此在设计时必须以x16来设计读取CFI相关信息,具体如下:

x16模式下,0x10代表CFI 查询ID,如果转为x8模式,那么软件就必须要0x20地址去进行查询,获取相关指令集ID等,因为对于Flash设备来说,一个地址包含2个Byte。不仅软件要做偏移,硬件地址总线和数据总线的连接也要进行切换。

3. CFI在车规MCU里有用吗

这个答案不确定,CFI的思想是就是针对同一系列的产品,系统设计者即使升级了memory容量,也可以使用相同的Flash驱动来适配产品升级,开发者只需要读取CFI相关信息就可以知道使用什么要的Flash驱动。

其实这个思路和目前接触到的MCU的Flash是很相似的,例如TC3xx所有系列都是使用Command sequence的方式对PFlash、DFlash进行编程,瑞萨RH850的FACI命令也在不同系列发挥了作用,也见过哪家说可以在BaseAddr+0x55写0x98可以查询指令集、Flash相关特性。

毕竟我们拿到的是带eFlash的MCU产品,按道理这些大厂也不会把这些eFlash IP拆出来作为产品单独售卖,因此只要是相同系列的MCU,针对Flash的操作基本都会保持一致,自然也就没有CFI信息的相关需求,要看特性的话看数据手册吧。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv实现人脸检测功能----20240704

opencv实现人脸检测 早在 2017 年 8 月,OpenCV 3.3 正式发布,带来了高度改进的“深度神经网络”(dnn)模块。 该模块支持多种深度学习框架,包括 Caffe、TensorFlow 和 Torch/PyTorch。OpenCV 的官方版本中包含了一个更准确、基于深度学习的人脸检测器, 链接:基于深度学习…

基于springboot+vue+uniapp的贵工程寝室快修小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

人员定位系统的功能,你知道多少呢?

在此前的文章中,说到了人员定位系统用于化工厂定位这一用途来完善工厂管理,但同时,基于人员定位系统的强大功能,该系统的应用范围也要宽范的多,那么,本篇文章就来为大家介绍一下吧。 人员定位系统的功能简介…

maxwell启动报错:Could not find first log file name in binary log index file

出现该问题是因为:maxwell 读取的是 mysql 的 binlog 日志,而配置文件中的两个值与 binlog 的最新值没有保持一致导致 1. 切换到maxwell的库 show master status;记住图片中的 FIle 和 Position 2. 修改maxwell的配置 SELECT * from positions p ;将…

怎样优化 PostgreSQL 中对 XML 数据的存储和查询?

文章目录 一、数据类型选择二、索引优化三、查询优化四、分区策略五、存储参数调整六、示例代码与解释七、性能测试与监控八、数据清理与压缩九、注意事项 在 PostgreSQL 中处理 XML 数据时,为了实现高效的存储和查询,需要采取一系列的优化策略。以下将详…

国外服务器备案主要需要准备什么

在全球化日益加深的今天,许多企业和个人选择将服务器部署在国外,以享受更广泛的用户覆盖、更低廉的运营成本或更灵活的网络环境。然而,不同国家和地区对服务器备案的要求各不相同,但通常而言,进行国外服务器备案主要需…

轻松集成,高效变现:Flat Ads SDK助力开发者轻松跨越广告变现门槛

在当今的移动应用开发领域,广告变现是开发者们普遍关注的重要话题。如何在不影响用户体验的前提下,最大化地实现广告收益,成为了许多开发者面临的挑战。为此,Flat Ads SDK 应运而生,它以“轻松集成,合规守护,高效变现”为核心理念,帮助开发者轻松解决流量变现难题。 一、高效变…

微信小程序的智慧物流平台-计算机毕业设计源码49796

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3研究方法 1.4开发技术 1.4.1 微信开发者工具 1.4.2 Node.JS框架 1.4.3 MySQL数据库 1.5论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户登录流程 2.2.2 数据删除流程 2.3 系统功能分…

【基础算法总结】分治—归并

分治—归并 1.排序数组2.交易逆序对的总数3.计算右侧小于当前元素的个数4.翻转对 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.排序数组 …

盘点2024年6月Sui生态发展,了解Sui近期成长历程

随着区块链技术的迅猛发展,Sui生态在2024年6月取得了令人欣喜的进步。作为创新的L1协议,Sui不仅在技术革新方面表现突出,还在DeFi、游戏应用和开发者工具等领域展现出强大的潜力。本篇文章将全面盘点Sui在过去一个月内的生态发展,…

vue3+ts 重复参数提取成方法多处调用以及字段无值时不传字段给后端

参数提取前的写法,此写法值为空的时候也会传空字段给后端 会把无值的空字段传给后端 修改后的写法,不会把没有值的字段传给后端 // 列表和导出需要传给后端的公共参数(加 || undefined即可过滤空字段) const getCurentParam () …

Zabbix 6.0 组件 工作原理和组件

Zabbix组件 C/S架构 服务端:zabbix server(端口10051):zabbix服务端进程,用于接收代理端发来的监控指标数据,配置和管理zabbix应用程序,也是监控系统的告警中心(通过监控项告警触…

伦敦银交易平台价格的突破成不成功?这点很重要!

在伦敦银交易中,当银价出现突破的时候,也正是引起很多投资者关注的时候。一旦银价出现突破,很可能是新行情的开端。但是做过突破交易,有相关经验的朋友会发现,自己在伦敦银交易平台做突破的时候,也并不是每…

两数之和、三数之和-vector双指针题型

末尾有注意点 167. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; 双指针&#xff1a;left、right class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int right numbers.size() - 1;int left 0;whi…

Redis 分布式集群方案 Cluster

引言 相比于Codis&#xff0c;Redis Cluster是Redis官方提供的解决方案。相比于Codis的不同&#xff0c;他是去中心化的&#xff0c;如图所示&#xff0c;该集群有三个Redis节点组成&#xff0c;每个节点负责整个集群的一部分数据&#xff0c;每个节点负责的数据多少可能不一样…

AutoCAD二次开发之objectArx开发:专栏内容介绍及目录

1、专栏介绍 1.1 ObjectARX介绍 ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包&#xff0c;它提供了以C为基础的面向对象的开发环境及应用程序接口&#xff0c;能真正快速的访问AutoCAD图形数据库。 与以往的 AutoCAD 二次开发工具 AutoLISP 和A…

怎么样才能为公司申请OV证书?

OV证书&#xff0c;全称为组织验证型SSL证书&#xff08;Organization Validation SSL Certificate&#xff09;&#xff0c;是一种高级别的SSL/TLS证书&#xff0c;用于加密网站通信并验证网站所属组织的合法身份。相比于基本的域名验证型证书&#xff08;DV证书&#xff09;&…

项目收获总结--MyBatis的知识收获

一、概述 最近几天公司项目开发上线完成&#xff0c;做个收获总结吧~ 今天记录MyBatis的收获和提升。 二、获取自动生成的(主)键值 insert 方法总是返回一个 int 值 &#xff0c;这个值代表的是插入的行数。若表的主键id采用自增长策略&#xff0c;自动生成的键值在 insert…

虽然我不会,但不能没有

大家好&#xff0c;才是真的好。 众所周知&#xff0c;从Notes/Domino R9版本到12版本&#xff0c;增加了不少的新功能和新任务&#xff0c;例如备份还原、自动更新、AD目录同步、自动证书管理、Nomad等等……我这里都要快写不下了。 不过&#xff0c;这些新功能、新任务&…

《SoC设计方法与实现》:全面掌握系统芯片设计精髓(可下载)

SoC&#xff08;System on Chip&#xff0c;系统级芯片&#xff09;设计是一项复杂而精细的工程活动&#xff0c;它涉及到将一个完整的电子系统的所有组件集成到一个单一的芯片上&#xff0c;包括处理器核心、内存、输入/输出端口以及可能的其他功能模块。这种集成不仅要求设计…