AURIX TC3XX Cached PFLASH与Non-Cached PFLASH的区别
Cached ? Non-Cached?
在阅读TC3XX的用户手册时,在内存映射表中,有两个segment都是Program Flash,而且大小都一样是3M,一个是segment 8
另一个是segment10
这难免让人产生疑惑,二者区别在哪?
通过搜索在infineon开发者论坛中发现有人在问类似的问题,我将该问题的解答分析一下。
同一块物理闪存存在于缓存区域和非缓存区域。主要的区别在于CPU访问它们的方式。
-
缓存地址访问:如果CPU通过缓存地址访问闪存,那么获取的数据会存储在CPU的缓存中。后续的任何访问都会使用缓存中的数据,而不是物理读取闪存。这可以显著加快程序的执行速度。
-
非缓存地址访问:如果使用的地址是非缓存的,那么读取操作总是物理执行的,也就是每次都直接从闪存中读取数据,而不使用CPU缓存。
需要注意的是,使用缓存数据的方法有一定的风险。如果你更改了闪存中的基础数据,但CPU缓存中的数据还未更新,那么CPU读取到的将是旧的数据。这可能会导致数据的不一致性。所以在处理闪存中的数据时,我们需要考虑到这种可能的情况,并设计出正确的数据同步或者更新策略。
二者的访问机制对比与安全机制的选择
进一步了解闪存读写的一些操作和可能的问题。
数据一致性的检查
最好在非缓存的闪存(Non-cached)上做检查,因为这样可以确保读取操作真正发生。因为如果使用缓存地址进行读取操作,那么如果闪存中的数据在读取到缓存后被修改,那么CPU缓存中的数据将会与实际的闪存中的数据不同,从而可能引发问题。
闪存的写入和擦除是通过reflashing完成的。但是,写入/擦除操作是通过DMU(数据管理单元)中的命令序列完成的。所以,如果CPU已经从闪存读取数据到其缓存,然后有一些操作reflash了PFlash,那么你会发现CPU缓存中的数据和PFlash中的数据不同。
需要注意的是,reflash需要花费大量的时间,所以在运行代码时,CPU可能会尝试加载其他数据到缓存,并且会注意到闪存不可用,因为它正在被更改。这里期望的是,进行这样操作的软件程序员会在代码中添加一些检查机制,但是也有可能出现没有做这样的检查。
因此,设计好的数据一致性策略和正确的程序检查机制在处理闪存数据时十分重要,以防止因数据不一致而引发的问题。
假设你的安全机制是想要检查闪存数据的安全性。因此,如果你从缓存地址运行,如果数据已经在缓存中,你所做的只是检查缓存内容是否正确 - 你不会检查到闪存本身路径的安全性。当数据进入缓存时,你已经证明了路径是正常的,但你并没有检查之后会发生什么。如果数据因为尚未在缓存中而必须被获取,那么你无论如何都不会获得速度提升,因为你仍然需要获取数据。
所以总结一下,对于一个安全机制,我会使用非缓存地址,以确保我们真正测试的是我们感兴趣的路径的安全性。
数据安全机制的选择
数据管理单元(DMU)会在需要的时候被用于重新编程闪存,所以在标准操作中,它不应该被运行。
当数据存储在缓存中时,应该受到ECC(错误检测和纠正)的保护(ECC值与数据一起存储)。因此,当从缓存中读取数据时,CPU将检查ECC并在出现不匹配时标记错误,因此缓存中的数据是受保护的。
ECC是一种用于检测和纠正单个数据位错误的技术。在数据被存储到缓存中时,会生成对应的ECC值。然后在读取缓存中的数据时,会重新计算ECC并与原来的ECC值进行比较,如果出现不匹配,说明数据在存储过程中或者存储期间发生了错误,CPU就会触发一个错误信号。
ESM(错误信号模块)旨在检查PFlash的内容 - 如果你从缓存中获取内容,那么你的安全机制将不再测试PFlash,你每次只是重新读取缓存的内容,假设所有的数据都在那里。
因此,如果你反复从缓存中读取,你可以看到你在缓存中是否有永久性或非永久性的错误,但你不会标记PFlash为损坏并刷新/替换一个字线。为了确保你真的在测试PFlash,我认为ESM必须使用非缓存地址。这确保你真的在检查PFlash本身是否被损坏,然后你可以使用结果来看你是否需要更换或刷新闪存。
对缓存的访问机制
闪存在物理上是相同的。所以当CPU使用缓存地址进行读取时,它首先会检查缓存内容,如果命中了,它就会从缓存中返回数据。如果没有命中,它会从PFlash中进行256位(BTR4)的读取,并把内容存入缓存。如果它在顺序执行一个程序,那么它很可能会去读取闪存中的下一个256位数据。还要注意,PFlash内置了一个预取机制 - 它会去获取下一个256位的数据,假设这就是CPU接下来需要的。
如果你从非缓存地址访问,那么缓存将不会被检查,它将直接从PFlash访问。然而,它会获取它需要的数据,而不是总是做一个BTR4/256位的读取。为了保持性能,PFI(PFlash接口)会将从PFlash读取的256位数据存储在本地缓冲区中,并从中提供获取,直到地址进入下一个256位,那时它将获取该数据(尽管如果有空闲的预取缓冲区,它可能会去获取下一个256位数据)。
CPU是否继续步进和获取将取决于程序和它预测接下来需要什么。
所以闪存在物理上同时存在于两个地址空间,而缓存则被用以提高CPU的访问速度。然而,你的安全机制是为了测试实际的PFlash,这就是为什么使用非缓存地址是一个更好的主意,因为这样你就可以确保你正在测试你打算测试的内容。并且,通过获取10个页面,你还可以确保你已经清空了所有可能的缓冲区,并且真正从闪存返回了数据。
相关文章:

AURIX TC3XX Cached PFLASH与Non-Cached PFLASH的区别
Cached ? Non-Cached? 在阅读TC3XX的用户手册时,在内存映射表中,有两个segment都是Program Flash,而且大小都一样是3M,一个是segment 8 另一个是segment10 这难免让人产生疑惑,二者区别在哪? …...

uniapp开发小程序-显示左滑删除效果
一、效果图: 二、代码实现: <template><view class"container"><view class"myorderList"><uni-swipe-action><uni-swipe-action-item class"swipe-action-item" :right-options"option…...

FPGA 的数字信号处理:Verilog 实现简单的 FIR 滤波器
该项目介绍了如何使用 Verilog 实现具有预生成系数的简单 FIR 滤波器。 绪论 不起眼的 FIR 滤波器是 FPGA 数字信号处理中最基本的模块之一,因此了解如何将具有给定抽头数及其相应系数值的基本模块组合在一起非常重要。因此,在这个关于 FPGA 上 DSP 基础…...

使用粒子群优化算法(PSO)辨识锂电池二阶RC模型参数(附MATLAB代码)
目录 一、原理部分 二、代码详解部分 三、结果及分析 一、原理部分 PSO算法由美国学者于 1995 年提出,因其算法简单、效果良好,而在很多领域得到了广泛应用。该算法的起源是模拟鸟群的觅食过程,形成一种群体智能搜索算法。 其核心是&#…...

如何利用地面控制点实现倾斜摄影三维模型数据的几何坐标变换和纠正?
如何利用地面控制点实现倾斜摄影三维模型数据的几何坐标变换和纠正? 倾斜摄影是一种在空中拍摄地表物体的技术,可以获得高分辨率、高精度的三维模型数据,广泛应用于城市规划、建筑设计、土地管理等领域。然而,由于航拍时无法避免姿…...
设计规则之里氏替换原则
tip: 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 相关规则: 推荐:体系化学习Java(Java面试专题) 1.6大设…...

【叠高高】叠蛋糕游戏的微信小程序开发流程详解
记得小时候玩过的搭积木游戏吗,和叠高高游戏原理差不多的,与之类似的还有盖高楼游戏,就是看谁盖的(叠的)最高,这里讲一下比较基础的叠高高游戏小程序实现过程,对编程感兴趣的同学可以参考学习一…...

收集关键词的方法有哪些?(如何查找精准的行业流量关键词)
关键词的收集通常可以通过以下几种方法: 关键词收集方法 1.根据市场价值、搜索词竞争性和企业实际产品特征进行筛选:确定您的关键词列表之前,建议先进行市场分析,了解您的竞争对手、行业状况和目标受众等信息,以更好地了解所需的特…...
【GreenDao】RxQuery查询并修改GreenDao数据库,完成后更新UI
GreenDao是一个轻量级的ORM(对象关系映射)数据库,而RxJava是一个响应式编程库,可以帮助我们更轻松地处理异步事件。在 Android 应用程序中,您可以使用这两个库一起处理数据库查询和更新,并使用观察者模式来…...
Modifier ‘public‘ is redundant for interface methods错误
java中接口的方法默认是 public abstract 的 所以放心的删掉public即可,如果改为protected 或者 private还会报错 接口的方法及变量的默认修饰符 1.接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract (只能是 public abst…...

Redis缓存击穿及解决问题
缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个 Key有大量的并发请求过来,这些请求发现缓存过期- -般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把DB压垮。 解决方案有两种…...

环境感知算法——2.CenterNet基于KITTI数据集训练
1. CenterNet简介 CenterNet采用了一种新的检测思路,即以目标中心点为基础,直接回归出目标的位置和大小。而传统的目标检测算法通常会先产生大量候选框(Anchor),再通过分类器进行筛选,这种方法比较复杂。C…...

JUC 高并发编程基础篇
JUC 高并发编程基础篇 • 1、什么是 JUC • 2、Lock 接口 • 3、线程间通信 • 4、集合的线程安全 • 5、多线程锁 • 6、Callable 接口 • 7、JUC 三大辅助类: CountDownLatch CyclicBarrier Semaphore • 8、读写锁: ReentrantReadWriteLock • 9、阻塞队列 • 10、ThreadPo…...

【十二】设计模式~~~行为型模式~~~命令模式(Java)
命令模式-Command Pattern【学习难度:★★★☆☆,使用频率:★★★★☆】 1.1. 模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个…...

可再生能源的不确定性和储能系统的时间耦合的鲁棒性和非预期性区域微电网的运行可行性研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Revit中如何使创建的族文件内存变小
族文件的大小直接影响到项目文件的大小和软件运行速度,如何将族文件做的最小并且满足项目需求呢? 方法一:清除未使用项 1. 族制作完成可以把族文件中未用到的外部载入族或其他多余数据删掉,点击“管理”选项卡下拉的“清除未使用项”命令; 2…...

ClassLoader源码
介绍 ClassLoader 顾名思义就是类加载器 ClassLoader 是一个抽象类 没有父类 作用 1.负责将 Class 加载到 JVM 中 2.审查每个类由谁加载(父优先的等级加载机制) 3.将 Class 字节码重新解析成 JVM 统一要求的对象格式 常量&变量 //注册本地方法…...

Kafka分区消息积压排查指南
针对某个TOPIC只有几个分区积压的场景,可以采用以下方法进行排查: 消息生产是否指定key? 如果指定了消息key,那么消息会指定生产到hash(key)的分区中。如果指定了key,那么有下列几种可能: 生产该key的消息体…...

数据库 期末复习(4) 概念数据库的设计
第一部分 为啥要引入概念数据库 感觉只有一个重点 实体联系模型----ER模型 第二部分-----实体联系模型 这个例子可以全看完之后再来看 举个例子:根据COMPANY数据库的需求来构造数据库模式:The company is organized into DEPARTMENTs. Each department has a name, number …...
WuThreat身份安全云-TVD每日漏洞情报-2023-05-26
漏洞名称:Barracuda Email Security Gateway TAR文件命令注入 漏洞级别:严重 漏洞编号:CVE-2023-2868,CNNVD-202305-2128 相关涉及:Barracuda Email Security Gateway 5.1.3.001 漏洞状态:在野 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-12949 漏洞名称…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...