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 漏洞名称…...
开箱即用版Sambert语音合成:多情感AI配音部署与使用
开箱即用版Sambert语音合成:多情感AI配音部署与使用 1. 引言:多情感语音合成的价值与挑战 在智能客服、有声读物、虚拟主播等应用场景中,富有情感表现力的语音合成技术正变得越来越重要。传统语音合成系统往往只能生成单调机械的语音&#…...
YOLOE零样本迁移实战案例:从LVIS预训练模型快速适配安防监控场景
YOLOE零样本迁移实战案例:从LVIS预训练模型快速适配安防监控场景 1. 引言:当通用模型遇见专业场景 想象一下,你手里有一个能识别上千种物体的“全能”AI模型,现在需要它去盯监控,专门找“可疑人员”、“遗留包裹”和…...
Keil工程管理效率翻倍:Python脚本实现构建结果自动归档与HTML报告生成
Keil工程管理效率翻倍:Python脚本实现构建结果自动归档与HTML报告生成 在嵌入式开发领域,Keil作为主流开发工具链的核心组件,其工程管理效率直接影响着团队协作和产品迭代速度。传统开发流程中,工程师往往需要手动收集每次构建生成…...
嵌入式系统调试常见问题与解决方案
嵌入式系统调试中的典型问题分析与解决策略1. 常见调试问题案例分析1.1 程序文件版本错误在嵌入式开发过程中,一个常见的低级错误是使用了错误的程序文件版本。某工程师在调试时发现单片机完全不执行程序,即使是最基本的GPIO控制也无法实现。经过以下排查…...
如何让鼠标和触控板和平共处:Scroll Reverser实现设备独立控制的效率革命
如何让鼠标和触控板和平共处:Scroll Reverser实现设备独立控制的效率革命 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 在多设备协同办公成为常态的今天࿰…...
OpenClaw技能扩展实战:基于Qwen3-32B开发自定义文件处理器
OpenClaw技能扩展实战:基于Qwen3-32B开发自定义文件处理器 1. 为什么需要自定义文件处理器 上周处理季度数据时,我又遇到了那个老问题:手头有37个CSV文件需要清洗格式、去重合并,还要按日期归档。这种重复性工作既耗时又容易出错…...
数据稠密计算的算法优化:从理论到实践
数据稠密计算的算法优化:从理论到实践 引言 作为一名在数据深渊里捞了十几年 Bug 的女码农,我见过太多因为算法选择不当导致的性能问题。在数据稠密计算中,算法的选择和优化是提升计算性能的关键因素之一。今天,我们来聊聊数据稠密…...
Visual Studio 2019安装Python组件失败?教你手动定位installer目录完成安装
Visual Studio 2019安装Python组件失败的终极解决方案 当你在Visual Studio 2019中尝试安装Python组件时,突然遇到"安装程序不完整"的错误提示,这确实令人沮丧。作为一名长期使用VS进行Python开发的工程师,我完全理解这种中断对工作…...
别再死记硬背了!用Python脚本+Modbus Poll工具,5分钟搞懂Modbus功能码怎么用
用PythonModbus Poll实战:5分钟解锁功能码核心逻辑 第一次接触Modbus协议时,那些晦涩的功能码总让我头疼——01H、03H、05H这些十六进制代码就像天书,文档里的理论描述看完就忘。直到我发现用Python脚本配合Modbus Poll工具进行实操测试&…...
避坑指南:如何在torch 2.4.0 + CUDA 12.1环境下成功安装llamafactory及其依赖
深度避坑:PyTorch 2.4.0与CUDA 12.1环境下的Llamafactory全栈部署实战 当开发者尝试在PyTorch 2.4.0和CUDA 12.1环境下部署Llamafactory时,往往会陷入依赖地狱——从Torch版本误装到vllm模块缺失,每个环节都可能成为耗时数小时的深坑。本文将…...
