This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:ACP d-cache 无效问题

Guru**** 2318240 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/583960/tms570lc4357-acp-d-cache-invalidate-problem

器件型号:TMS570LC4357

(CCS 5.5、编译器5.2.4)

我正在运行报告高速缓存错误的严格 ESM 中断。 这在我激活或添加一些代码后的整个软件开发过程中是随机的。

我正在尝试弄清楚发生了什么。 MPU 设置可能是关键吗?

我们正在努力设置 MPU、以便在不干扰高速缓存的情况下使用 DMA 传输。

我知道有8个总线主控、一个用于 DMA、如何正确配置总线主控? 我的意思不仅是 DMA、而且是为了避免所有这些相关的问题。

在用户指南中、有这句话、但这对我来说并不是很重要:

«一旦用户根据其应用程序确定了 IP 总线主控在存储器系统帧上的架构存储器分区、用户就应该相应地为每个总线主控配置相应的 MPU 区。»

此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Simon、

    对于您的帖子的最后一部分和您引用的句子:

    [引用用户="Simon Lapointe"]

    在用户指南中、有这句话、但这对我来说并不是很重要:

    «一旦用户根据其应用程序确定了 IP 总线主控在存储器系统帧上的架构存储器分区、用户就应该相应地为每个总线主控配置相应的 MPU 区。»

    [/报价]

    这是指、一旦确定了特定主器件可以访问的有效地址空间范围、 您可以对特定主器件的 MPU 进行编程、使其仅访问应访问的存储器位置、并具有正确的只读或读/写权限设置。 这并不一定表示 CPU 的主 MPU、而是表示 MPU 也是如此。

    [引用 user="Simon Lapointe">我正在运行报告缓存错误的严格 ESM 中断。 这在我激活或添加一些代码后的整个软件开发过程中是随机的。

    您能否提供有关您看到的错误类型的更多信息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有办法知道哪个总线主控会干扰?

    ESM 模块提供了组1通道47、这是缓存无效的。 我在 ESM 中读取它。  我可以屏蔽这个中断、但是代码运行不正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Simon、

    您能否尝试在 CPU MPU 中将外设的相关存储器范围至少配置为直写式、并查看这是否有用。
    假设问题是由 SRAM 存储器区域或其缓存版本引起的。

    卡盘、

    我假设这个 ESM 信号被连接至 Cortex-R5F 事件总线[50]([50] ACP D 缓存无效。 - 0x73)?
    但是、遗憾的是、Cortex TRM 中没有对此信号进行说明、我想它与 BITDIRTYCSTM 相关。

    此致、
    Christian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。
    但是、当您将某些存储器范围配置为直写式时、它相当于为相关操作停用高速缓存、不是吗? 然后、它会降低性能、这对我们来说是一个重要的问题。
    例如、我们使用 DCAN。 您建议在 CAN 操作期间检查哪些 SRAM 变量是访问的、并使用直写设置将其放置在特定的 MPU 区域? RTI、MibADC1等也是如此?
    它应该有一些方法来了解哪些外设会干扰您的系统;您对此有什么提示吗?
    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Simon、

    我在上一篇文章中有点含糊、因为有许多不确定因素、我的目标是寻找问题的根源、而不是首先获得最佳性能。 确保正确地将存储器区域设置为 Write Through (直写式)将使整个系统减速、但与使用 Write Back (回写式)相比、从该设置开始更"安全"且更简单。

    直写将使高速缓存控制器几乎立即将已修改的内存内容写回 RAM,这不一定要降低 CPU 的速度。 回写将导致高速缓存控制器等待写入、直到该高速缓存行将被替换(从 RAM 读取)。 因此、写回可能会减慢对存储器的读取速度、因为必须先完成写操作。 但是、如果已经执行了写入(直写)、则可以立即执行读取。 这是一种折衷,和生活中一样,你不会得到免费的东西;)

    我的建议与所有正在访问主 SRAM 的总线主控相关、从您的第一篇帖子中我知道您正在使用 DMA。 我怀疑 DMA 在主 SRAM 和外设之间传输一些数据、反之亦然。 然而、DCAN 有自己的用于邮箱的小型 RAM、它直接访问 RAM (双端口 RAM)。 一些其他外设、如 MibSPI、MibADC、DMA、ENET、N2HET、 HTU、FlexRay、... 也有本地 RAM。 这些外设 RAM 几乎应始终配置为 CPU MPU 中的器件存储器或严格排序类型的存储器。

    作为起点、如果您使用 DMA 或任何其他总线主控(CPU 除外)来访问主 SRAM、 请将 CPU MPU 中相应的 SRAM 存储器区域设置为 Write Through (写入)或仅设置整个 SRAM 区域、看看您是否仍然面临相同的问题。

    正如我在向 Chuck 提出的问题中所指出的、ARM TRM 不会解释您所面临的这一错误是什么、我的目标是确定它的来源。

    我怀疑发生的情况是、DMA 将读取(很可能)或写入当前位于高速缓存中的存储器区域、并且高速缓存行标记为脏。 这意味着 DMA 将读取过时的数据。 请注意、DMA 直接访问主 SRAM 而不是高速缓存、高速缓存仅供 CPU 本身使用。 ACP (加速器一致性端口)和 uSCU (嵌入式微监听控制单元)用于捕获这些情况、对其进行处理、如果无法解决问题、则可能会标记错误。

    此致、
    Christian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Christian、

    我和 Charles 谈到了这一点、他也不知道 ESM 错误在事件总线上连接了哪个信号。

    但是、ESM 标志的目的是指示或提供通知、因此不是真正的错误、除非与之相关的操作是无意的。  它仅在直写式高速缓存方案中有效。 置位表示高速缓存行在 DMA 等非 CPU 主机写入 SRAM 时自动生效。  

     在 MPU 设置期间、必须确定 CPU 和 DMA 是否将使用共享的可高速缓存存储器。 共享存储器会产生数据一致性问题、因此、如果高速缓存方案是直写式的、则 d 高速缓存无效会自动解决一致性问题。 在回写高速缓存方案中不会生成 D-cache invalidate。