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.

[参考译文] AM263P4:与 AM263P4 相关的高速缓存和 MPU 问题

Guru**** 2668435 points

Other Parts Discussed in Thread: AM263P4, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1566403/am263p4-cache-and-mpu-issues-related-to-am263p4

器件型号: AM263P4
主题: SysConfig 中讨论的其他器件

工具/软件:

问题 1:

在 AM263P4 的 syscfg 配置中、区域属性配置是否仅限制为某些组合、而不是存储器类型、可共享性、可缓存性和高速缓存策略的所有可能组合?

 

我想确认我对 syscfg 中提供的“区域属性“组合的理解是否正确、尤其是突出显示的条目。?

问题 2:

根据 TRM 手册、每个 512KB 的最后 32 个字节必须配置为非缓存。 但是、在 fastboot 示例中、该区域设置为可共享。 与缓存+可共享等效不可共享?

问题 3:

在快速引导示例中、RAM 配置为缓存。 执行相关的闪存操作后、使用 CacheP_WB 实现高速缓存和 RAM 之间的数据一致性以同步数据。 在非快速引导 SBL(次级引导加载程序)中、RAM 区域配置为可共享。 鉴于可共享暗示缓存、这是否还需要使用 CacheP_WB 在缓存和 RAM 之间同步数据以确保一致性?

如果一个区域配置为可共享、则它允许多个处理内核共享数据、而缓存的处理内核则不共享数据。 这是否就是将 RAM 区域配置为缓存会阻止 R5 内核访问 OTP 数据的原因? 但是、这就引出了另一个问题:在快速启动示例中、RAM 设置为缓存、那么从闪存读取 HSM 固件如何也可以与 HSM 内核共享?

问题 4:

AM263P4 目前是否仅支持写回和写分配高速缓存策略? 因此、每当 RAM 区域配置为缓存时、只能通过回写来保持数据一致性。 这是否意味着自动数据一致性理论上只能通过直写实现? 如何确定缓存将处理哪些数据、即何时执行手动数据同步(回写)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 fastboot 示例中、RAM 配置为缓存。 执行相关的闪存操作后、使用 CacheP_WB 实现高速缓存和 RAM 之间的数据一致性以同步数据。 在非快速引导 SBL(次级引导加载程序)中、RAM 区域配置为可共享。 鉴于可共享暗示缓存、这是否还需要使用 CacheP_WB 在缓存和 RAM 之间同步数据以确保一致性?

    默认情况下、对于当前 SDK 实现、如果区域标记为 Sharable、则默认情况下将其标记为缓存、但反之则不成立。 如果我将该区域标记为“缓存“、则该区域不可共享。 让我与团队讨论这个潜在的错误。

    理想情况下,如果该区域是“共享和非缓存“,我们不需要 CacheP_WB,但如果它是“共享和缓存“,我们确实需要它。

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

    感谢您的答复! 关于您的回答、我还有几个问题:

    问题 1:  

    根据 ARMv7-M 架构参考手册中的介绍我回顾了内存类型、可共享性、可缓存性和缓存策略的组合。 我摘要中的第二列显示了 TI 的 syscfg 提供的预设选项。 我的理解是否正确?

      

    因此、如果我在 TI 的 SysConfig 中将一个内存区域设置为 Shareable、这是否 一定意味着 该区域也可缓存?如果我要使用非预设配置、必须使用下面所示的方法? 是否有相应的文档解释每个参数的含义?

    在此基础上、 问题 2 的正确方法不应该是将每个 512KB 段的最后 32 个字节设置为“非缓存“、而不是“可共享“ ? 关于问题 3、 是否确实有必要使用 CacheP_WB 等函数进行数据同步? 此外、对于问题 3 的后一部分、当存储器配置为“缓存“(即不可共享)时、为什么 HSM 固件仍然可以从闪存读取数据并将数据加载到 HSM 的 M4 内核中? 我认为允许多个内核共享数据需要 Shareable 属性?

    问题 2:  

    对于 AM263P4、哪些存储器区域必须配置为严格排序、哪些区域必须设置为器件、哪些区域应为正常存储器类型?

    问题 3:
    您提到、要将 CPU 缓存中的数据同步到 RAM、    可以同时使用 CacheP_WB() 和 CacheP_wbInv()。 根据我的理解, CacheP_wbInv() 不 是一个更可靠的选项吗? 因为它不仅会写回数据、而且还会强制 CPU 之后从 RAM 中获取最新数据。 如果另一个内核修改了 RAM 中的数据、我们只能使用 CacheP_inv () 强制 CPU 从 RAM 中检索更新后的数据、对吧?

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

    你(们)好

    我摘要中的第二列显示了 TI 的 syscfg 提供的预设选项。 我的理解是否正确?

    是的、预设被严格排序、缓存、非缓存、可共享。 我共享了以下所有预设的默认行为:

    严格订购:

    可缓存:

    不可缓存:

    可共享:

    您可以从下面随附的 ARM Table 屏幕截图推断出确切的配置。

    如果需要其他配置、您可以选择高级配置并根据需要进行设置。 请确保按照 ARM 的下表进行正确配置。 适当地配置 C、B、S 和 TEX 位。

    此致、
    Shaunak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、如果我在 TI 的 SysConfig 中将一个内存区域设置为  “可共享“、这是否一定意味着它也是可缓存的?

    使用“Shareable"预设“预设时、SYSCFG 会将其标记为可缓存  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“655954" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1566403/am263p4-cache-and-mpu-issues-related-to-am263p4/6040808 问题 3:
    您提到、要将 CPU 缓存中的数据同步到 RAM、    可以同时使用 CacheP_WB() 和 CacheP_wbInv()。 根据我的理解, CacheP_wbInv() 不 是一个更可靠的选项吗? 因为它不仅会写回数据、而且还会强制 CPU 之后从 RAM 中获取最新数据。 如果另一个内核修改了 RAM 中的数据、我们只能使用 CacheP_inv () 强制 CPU 从 RAM 中检索更新后的数据、对吗?

    是的、您是对的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“655954" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1566403/am263p4-cache-and-mpu-issues-related-to-am263p4/6040808

    问题 2:  

    对于 AM263P4、哪些存储器区域必须配置为严格排序、哪些区域必须设置为器件、哪些区域应为正常存储器类型?

    [/报价]

    严格排序的内存 用于访问顺序至关重要且必须严格维护的区域。 所有访问均按程序顺序进行、没有进行优化。

    应配置为:
    -具有严格排序要求的内存映射 I/O
    -外部 FIFO 设备
    -访问时间的副作用至关重要的内存区域
    -确切的访问顺序至关重要的处理器间通信区域

    器件存储器中 专为外设寄存器和控制模块而设计。 它保留了访问大小和部分顺序。

    应配置为:
    -所有外设寄存器空间:
    - GPIO 寄存器
    -计时器控制器
    - UART/SPI/I2C 控制器寄存器
    - DMA 控制寄存器
    -控制模块
    -配置寄存器
    -中断控制器等

     正常内存 用于具有标准存储器行为的典型代码和数据存储。 (TCM、OCRAM,闪存)

    此致、
    Shaunak

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

    非常感谢你先前的答复。我还有一个问题没有得到答复、即问题 1 的后一部分。 在快速启动示例中将 RAM 配置为缓存(不可共享)时、为什么 HSM 固件仍然可以从闪存读取数据并将其加载到 HSM 的 M4 内核中? 我的理解是、只有 Shareable 属性允许在多个内核(例如 R5_Core0-r5_Core3、HSM M4)之间进行数据访问

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

    您好、戴明哲:

    非常感谢您先前的答复。我还有一个问题没有回答、这是问题 1 的后一部分。 在快速启动示例中将 RAM 配置为缓存(不可共享)时、为什么 HSM 固件仍然可以从闪存读取数据并将其加载到 HSM 的 M4 内核中? 我的理解是、只有 Shareable 属性允许在多个内核(例如 R5_Core0-r5_Core3、HSM M4)
    ) 之间进行数据访问

    MPU 不用作存储器防护。 我们在 R5 的 MPU 配置中将区域标记为缓存和不可共享、这不会阻止 M4 内核无法访问该区域。  

    另请注意、HSM FW 不会直接从闪存读取。 R5 始终从闪存读取并存储在其 RAM 中。 在快速引导的情况下、正在实现应用程序身份验证的并行化。  在从闪存复制应用映像到 R5 内核的 ram 和通过 HSM 内核进行身份验证之间发生这种并行化。

    请查看此应用手册以了解更快的引导: https://www.ti.com/lit/ab/spradm8/spradm8.pdf?、ts = 1759215348745&ref_url=https://www.253A%252F%252Fwww.ti.com%252Fproduct%252FAM263P4

    当区域被标记为缓存和共享时、意味着缓存一致性得到保持。 如果数据仅从闪存复制到 RAM、并且在标记的区域中未进行数据更新(写入)、则即使未启用 SHARED、也应该是可行的。   

    此致、

    Aswin

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

    非常感谢您的答复。

    1、“保持高速缓存一致性“是什么意思? 它是否指自动同步高速缓存中的数据以确保数据一致性? 但是、在您之前的回复中、您提到 AM263P4 的回写和写分配 (WB、WA) 缓存策略需要手动保持一致性。

    2、理论上、如果我需要执行内核间通信(R5 和 M4 之间)、将内存设置为共享(缓存+共享)比缓存(缓存+不共享)更合适吗?

    3、根据我之前的研究、共享属性允许在多个内核(例如 R5_Core0-R5_Core3 和 HSM M4)之间进行数据访问。 但是、根据您的解释、no shared 属性不会阻止其他内核(如 M4 内核)访问相同的数据。 这似乎与我的理解相矛盾,我对这一点很困惑?

    再次感谢您的帮助!

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

    尊敬的 Dai  Mingzhe Dai:

    您的意思是“保持高速缓存一致性“? 它是否指自动同步高速缓存中的数据以确保数据一致性? 但是、在您之前的回复中、您提到 AM263P4 的回写和写分配 (WB、WA) 缓存策略需要手动保持一致性。

    数据不会自动同步。  MPU 中的缓存取回配置意味着当缓存中的数据被修改时、该值不会突然写入到其原始位置。 原始位置的值将在缓存 回写时更新、并且 是手动完成的。 但当多个总线主器件访问的区域时、HIS 是相关的。 如果多个总线主访问一个位置、则如果它已缓存、则需要手动执行缓存回写操作。

    理论上、如果我需要执行内核间通信(R5 和 M4 之间)、将内存设置为共享(缓存+共享)是否比缓存(缓存+不共享)更合适?

    必须将该区域配置为共享区域。

    根据我之前的研究、共享属性允许在多个内核(例如 r5_Core0-r5_Core3 和 HSM M4)之间进行数据访问。 但是、根据您的解释、no shared 属性不会阻止其他内核(如 M4 内核)访问相同的数据。 这似乎与我的理解相矛盾、我对这一点很困惑?

    请告诉我,非共享属性在这里的含义是什么? 我们只有共享属性。 在使用属性组合进行还原时、引用此表也很有用。 我们将能够了解 MPU 的行为方式(根据配置)。  

    S-B-C 和 tex 值可以从 sysconfig 或 ti_pl_config.c 文件中获取  

    此致、

    Aswin

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

    感谢您的答复。
    我的实际问题与 FastBoot 将 RAM 区域配置为缓存的例程有关。

    在 TI 的 SysConfig 中、“Cached"等“等效于“Cached + Non-shareable“、这两个属性绑定在一起。 理论上、它们不应相互约束。

    在快速启动例程中、HSM 固件会从闪存重定位到 RAM。 验证之后、R5 内核和 M4 内核执行 IPC 通信、以将 HSM 固件传输到 M4 内核。 根据您的解释、由于这涉及核心间通信、因此应将其配置为可共享。 那么、为什么这个例程仍然正常运行?

    此外、根据 TRM、AM263P4 中每个 512KB RAM 块的最后 32 个字节需要配置为非高速缓存。 但是、在最新的 SBL(次级引导加载程序)例程中、这些特定区域仍设置为共享(在 TI 的 SysConfig 中、这意味着共享+缓存,因为它们已绑定)。 这是错误吗? 此外、为什么“Hello World“示例等例程没有专门为这些区域配置 MPU? 有没有必要?

    再次感谢您的帮助!

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

    尊敬的 Dai Mingzhe Dai:

    在 FastBoot 例程中、HSM 固件会从闪存重定位到 RAM。 验证之后、R5 内核和 M4 内核执行 IPC 通信、以将 HSM 固件传输到 M4 内核。 根据您的解释、由于这涉及核心间通信、因此应将其配置为可共享。 那么、为什么此例程仍然可以正常运行?

    问题是有效的。 在此用例中、即使 RAM 保持缓存状态、我们也会在 HSM 相关事务之前执行缓存写回失效操作。 因此、缓存一致性  得以保持。  

    这是错误吗? 此外、为什么“Hello World“示例等例程没有专门为这些区域配置 MPU? 是否有必要?

    示例不使用整个 ram 区域。 因此没有显式配置。

    此致、

    Aswin