CFI(Common Flash Interface)简介
CFI定义了符合CFI规则设备的基本Query接口,包括已知或待拟定的flash Read/Write/Program/Erase控制接口。Query接口以结构体形式定义与flash设备相关的关键参数,但是CFI不会对单个flash设备厂家指定详细的指令集、状态轮询模式以及软件算法。
1.操作概要
设备接收到Query command code后进入Query模式,允许对CFI Query数据结构进行访问。CFI Query data structure包含16bit指令集、Control Interface ID code(控制接口)、通用flash内存参数和算法指定的数据域。
上述信息主要用于给指定的flash提供读写、擦除等操作。
2. 硬件接口
2.1 Query command interface
CFI Query结构的访问与NVM现有的”ID Mode”或”JEDEC ID”访问类似,但是使用不同的指令代码。Query 访问指令为98h,JEDEC ID 模式访问为90h。
上电后,假设NvM处于制度模式,Query 结构的内容必须能够在单个系统写周期的特定地址位置读取:1)98h被写入到设备地址空间内55h的地址位置(以最大设备总线宽度),2)设备处于任何有效的读状态,如“读阵列”或“读ID数据”。其他设备状态可能存在于一长串命令或数据输入中;在编写98h Query命令代码产生有效的Query数据结构输出之前,必须先完成或终止这些序列。
设备驱动程序应该始终在地址总线上提供55h,在数据总线上提供98h以进入查询模式;或者Flash设备可以选择忽略地址总线并进入查询模式,如果98h只在数据总线上看到。
Flash供应商必须为其他模式访问定义其他命令序列。
2.2 Query structure output
Query 数据只在数据输出(D7 - D0)上显示。
因此,对于字节宽(x8)设备,Query结构的前两个字节,即ASCII中的“Q”和“R”,出现在设备地址10h和11h处,这与绝对字节地址相同。相同逻辑应用到x16、x32设备。下表Query数据输出的示例:
3 Query Structure
3.1 Query结构总览
Offset | Section名称 | 描述 |
00h | Reserved | 指令算法信息 |
10h | CFI Query Identification | 命令集ID和算法数据偏移量 |
1Bh | System Interface Information | 设备时间、电压信息 |
27h | Device Geomerty Definition | Flash设备的layout |
P | 主算法的特定扩展 | 主算法的特定扩展 |
A | 备选算法的特定扩展 | 备选算法的特定扩展 |
3.2 CFI Query Identification
Offset | Length (bytes) | Description |
10h | 03h | 三字节的“QRY”查询结构标记 |
13h | 02h | 两字节的主算法命令集和控制接口ID码 |
15h | 02h Value=P | 主算法扩展表的地址P |
17h | 02h | 备选算法命令集和控制接口ID码 |
19h | 02h Value=A | 备选算法扩展表的地址A |
3.3 System Interface Information
Offset | Length(Bytes) | 含义 | 举例(Intel 28 F800BVT) |
10H | 03H | 查询ASCII字符串“QRY” | 10:0051H ‘Q’ 11:0052H ‘R’ 12:0059H ‘Y’ |
13H | 02H | 制造商命令集和控制接口识别码ID | 13:0003H 14:0000H |
1BH | 01H | 逻辑供电Vcc最小电压。位7-4:BCD伏 位3-0:BCD100毫伏 | 1B:0030H(3伏) |
1CH | 01H | 逻辑供电Vcc最大电压。位7-4:BCD伏 位3-0:BCD100毫伏 | 1C:0055H(5.5伏) |
1DH | 01H | 编程/擦除供电Vpp最小电压。位7-4:HEX伏 位3-0:BCD100毫伏 | 1D:0045H(4.5伏) |
1EH | 01H | 编程/擦除供电Vpp最大电压。位7-4:HEX伏 位3-0:BCD100毫伏 | 1E:00C6H(12.6伏) |
1FH | 01H | 典型单字节/字写周期定时时间,2Nus | 1F:0003H(3.8us) |
21H | 01H | 典型单块擦除定时时间,2Nms | 21:000AH(1.024s) |
22H | 01H | 典型整片擦除定时时间,2Nms | 22:0000H(不支持) |
23H | 01H | 单字节/字写周期最大定时时间,2Nx典型单字节/字写周期定时时间 | 23:0004H(24x8us) |
25H | 01H | 单块擦除最大定时时间,2Nx典型单块擦除定时时间 | 25:0004H(24x1.024s) |
26H | 01H | 整片擦除最大定时时间,2Nx典型整片擦除定时时间 | 26:0000H(不支持) |
3.4 Device geometry definition
Offset | Length(Bytes) | 含义 | 举例(Intel 28 F800BVT) |
28H | 02H | Flash器件接口识别码ID | 28:0002H 29:0000H |
2CH | 01H | 器件可擦除块区域个数。Bit7-0=可擦除块个数 | 2C:0004H 4个擦除块 |
2DH | 04H | 擦除块信息域1。Bit31-16=z(高两字节表示擦除块大小对于256字节的倍数,0表示128B)。Bit15-0=y(低两字节+1表示擦除块的个数,0表示没有块) | 2D:0006H 2E:0000H 7个擦除块 2F:0000H 30:0002H 256x200H=128K字节 |
31H | 04H | 擦除块信息域2。 | 31:0000H 32:0000H 33:0080H 34:0001H |
35H | 04H | 擦除块信息域3。 | 35:0001H 36:0000H 37:0020H 38:0001H |
39H | 04H | 擦除块信息域4。 | 39:0000H 3A:0000H 3B:0040H 3C:0000H |
3.5 主算法的特定扩展
如下表所示:
Offset | Length (bytes) | Description |
Ph | 03h | 主算法扩展查询表标记字符串“PRI” |
(P+3)h | 01h | 主版本号 |
(P+4)h | 01h | 次版本号 |
(P+5)h | Variable | 主算法扩展查询结构内容 |
3.6 备用算法的特定扩展
如下表所示
Offset | Length (bytes) | Description |
Ah | 03h | 备用算法扩展查询表标记字符串“ALT” |
(A+3)h | 01h | 主版本号 |
(A+4)h | 01h | 次版本号 |
(A+5)h | Variable | 备用算法扩展查询结构内容 |
4. CFI代码示例
Std_ReturnType Fls_HwCfiQuery(uint32 CfiBaseAddr,uint8 CfiCmd, _CfiValueType *CfiValueBuf)
{Std_ReturnType retVal = E_NOT_OK;uint16 i=0;/* #10 Handle CFI query cmd */Fls_lCmdProcessing((_FLS_CFI_BASE_ADDRESS + CfiBaseAddr),CfiCmd);/* #20 Check that the CFI interface is operable */if ((Fls_lCfiReadValue(_FLS_CFI_BASE_ADDRESS + _FLS_CFI_QUERY_OFFSET_ONE) != 0x51U)||(Fls_lCfiReadValue(_FLS_CFI_BASE_ADDRESS + _FLS_CFI_QUERY_OFFSET_TWO) != 0x52U)||(Fls_lCfiReadValue(_FLS_CFI_BASE_ADDRESS + _FLS_CFI_QUERY_OFFSET_THREE) != 0x59U)){retVal = E_NOT_OK;}else{/* #30: Read the required CFI Info */for(i = 0; i < 256; i++){CfiValueBuf[i] = Fls_lCfiReadValue(_FLS_CFI_BASE_ADDRESS + (uint32)i);}retVal = E_OK;}return retVal;
相关文章:

CFI(Common Flash Interface)简介
CFI定义了符合CFI规则设备的基本Query接口,包括已知或待拟定的flash Read/Write/Program/Erase控制接口。Query接口以结构体形式定义与flash设备相关的关键参数,但是CFI不会对单个flash设备厂家指定详细的指令集、状态轮询模式以及软件算法。 1.操作概要…...

linux、windows 查看java等进程占用资源情况
linux查看进程占用资源情况: top -o %MEM -b -n 1 | grep java | awk {print "PID: "$1" \t 虚拟内存: "$5" \t 物理内存: "$6" \t 共享内存: "$7" \t CPU使用率: "$9"% \t 内存使用率: "$10"%&…...

听GPT 讲Rust源代码--library/core/src(7)
题图来自 Hello, crustaceans.[1] File: rust/library/core/src/ptr/metadata.rs 在Rust的源代码中,rust/library/core/src/ptr/metadata.rs 文件的作用是定义了与指针(ptr)和元数据(metadata)相关的结构体和 trait&am…...
html:lang属性设置为中文zh-CN
默认的lang属性 <html lang"en"> </html>声明网页语言格式: 语言-国家/地区示例 <html lang"zh-CN"> </html>ISO 639-1 语言代码 语言ISO 代码Chinese (简体)zh ISO 639-1 国家/地区代码 国家/地区ISO 代码CHINA…...

滴滴 Redis 异地多活的演进历程
为了更好的做好容灾保障,使业务能够应对机房级别的故障,滴滴的存储服务都在多机房进行部署。本文简要分析了 Redis 实现异地多活的几种思路,以及滴滴 Redis 异地多活架构演进过程中遇到的主要问题和解决方法,抛砖引玉,…...

前端实现页面内容的截图与下载(html2canvas)
今天是一个发文的好日子😀~ 👇👇👇 一个需求,要截取页面中的内容并截图保存,来看一看我是怎么实现的吧: 这里需要使用到插件--html2canvas 1.安装并引入html2canvas npm install html2canv…...

VS2017 IDE 编译时的 X86、x64位 是干什么的
指定编译出的程序是x86架构下的32位程序还是64位程序 VS2017项目配置X86改配置x64位_winform:把项目由x86改为x64-CSDN博客 vs平台选项:Any CPU,x86,x64_vs anycpu-CSDN博客...

微信小程序 解决tab页切换过快 数据出错问题
具体问题:切换tab页切换过快时,上一个列表接口未响应完和当前列表数据冲突 出现数据错误 具体效果如下: 解决方式:原理 通过判断是否存在request 存在中断 并发送新请求 不存在新请求 let shouldAbort false; // 添加一个中断标志 let re…...

Taro编译警告解决方案:Error: chunk common [mini-css-extract-plugin]
文章目录 1. 背景2. 问题分析3. 解决方案3.1 更新 Taro 版本3.2 更新相关依赖3.3 调整 webpack 配置3.4 检查依赖版本 4. 拓展与分析4.1 拓展4.2 避免不必要的依赖4.3 查阅 Taro GitHub 仓库 5. 总结 🎉欢迎来到Java学习路线专栏~Taro编译警告解决方案:E…...

基于JavaWeb+SpringBoot+Vue电子商城微信小程序系统的设计和实现
基于JavaWebSpringBootVue电子商城微信小程序系统的设计和实现 源码获取入口前言系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 身处互联网时代,互联网无形中影响着人们的吃穿住行,人们享受着不…...

JS进阶——作用域、解构、箭头函数
1、作用域 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问。 1.1 局部作用域 局部作用域可分为函数作用域和块作用域。 1.1.1 函数作用域 在函数内部声明的变量只能在函数内部被访问,外部无…...

centos下安装mysql8版本
1、如果服务器没有wget,先下载wget工具 sudo yum install wget 2、下载指定mysql版本的tar包 sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar 3、解压tar包 sudo tar -xvf mysql-8.0.21-1.el7.x86_64.rpm…...
C++面试常考手写题目
C面试常考手写题目 vectorstringauto_ptrshared_ptrunique_ptrweak_ptrsingleton快排非递归heapheap_sortmerge_sort vector #include <bits/stdc.h> using namespace std;template<typename T> class vector {public:typedef T value_type;typedef T* iterator;p…...

LLM建模了什么,为什么需要RAG
LLM近期研究是井喷式产出,如此多的文章该处何处下手,他们到底又在介绍些什么、解决什么问题呢?“为学日增,为道日损”,我们该如何从如此多的论文中找到可以“损之又损以至于无”的更本质道或者说是这个方向的核心模型。…...

为开发GPT-5,OpenAI向微软寻求新融资
11月14日,金融时报消息,OpenAI正在向微软寻求新一轮融资,用于开发超级智能向AGI(通用人工智能)迈进,包括最新模型GPT-5。 最近,OpenAI召开了首届开发者大会,推出了GPT-4 Turbo、自定…...

创邻科技亮相ISWC 2023,国际舞台见证知识图谱领域研究突破
近日,第22届国际语义网大会 ISWC 2023 在雅典希腊召开,通过线上线下的形式,聚集了全球的顶级研究人员、从业人员和行业专家,讨论、发展和塑造语义网和知识图谱技术的未来。创邻科技CEO张晨博士作为知识图谱行业专家受邀参会&#…...

开源博客项目Blog .NET Core源码学习(6:雪花算法)
Blog .NET项目中有多种数据类生成对象实例时需要唯一标识,一般做法要么使用GUID,也可以保存到数据库时使用数据库表的自增长ID,也可以自定义规则以确保产生不重复的唯一标识,而在Blog .NET项目中使用雪花算法生成唯一标识。 关…...

【Python】集合与字典
按照输入顺序输出 将输入的名字去重,同时按照输入顺序输出 sinput().split(,) blist(set(s)) bsorted(b,keys.index) print(b) 删除集合元素、更新集合 根据操作删除更新集合 update括号里可以是一个集合,add只能是一个元素 discard用于删除元素&#x…...
【LeetCode】88. 合并两个有序数组
88. 合并两个有序数组 难度:简单 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 …...

Linux文件权限
R 代表可读 W 代表可写 X 代表可执行 文档类型有如下表示方法: d - 目录,例如上表档名为『.gconf』的那一行; - - 文档,例如上表档名为『install.log』那一行; l - 链接档(link file); b …...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...