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.

[参考译文] TMDS62LEVM:(NORTOS) 如何禁用高速缓存

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1515808/tmds62levm-nortos-how-to-disable-cache

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

工具/软件:

您好、

对于硬件验证、我们希望禁用缓存以确保所有数据都是原始数据和直接数据。 但是、如果我注释掉了此函数下的 CACHE_ENABLE、整个应用程序将无法启动。 是否有办法进入无缓存环境?

/*此函数由__system_start */调用
void _MMU_init ()
  muP_init()
  CacheP_ENABLE (CacheP_TYPE_ALL);
}
谢谢您、
Dazong
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dazong:

    您可以从 SysConfig 为特定的存储器区域配置此功能。 在 MMU ARMv8 配置中、必须将特定存储器区域的 Attribute 属性设置为 ATSR 索引 4:正常内部和外部不可缓存 、如果要使其不可缓存。 请参阅以下示例、其中设置了 DDR_REGION 的属性、使其不可缓存:

    此致、

    会面。

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

    尊敬的会议:

    我尝试在 SysConfig 中进行修改、然后甚至无法启动示例代码。 您可以尝试 mmcsd_raw_io_am62lx-evm_a53ss0-0_freertos_gcc-Aarch64 吗?

    谢谢、

    Dazong

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

    尊敬的 Dazong:

    让我尝试在我的最后运行一次、看看问题可能是什么、能否确认您是否只在更改缓存设置后才遇到此问题? 此外、我假设您仅更改了 DDR 区域的 MMU 属性、如果您还进行了任何其他更改、请告诉我。

    此致、

    会面。

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

    您好、Meet/Dazong、

    我觉得上述设置对 ATF 也是影响深远的。

    我建议将 DDR 区域拆分为两个区域:一个区域用于 ATF、另一个区域用于应用。

    将 ATF 缓存和 Application 保留在未缓存的位置。

    而且、看看上述建议是否有效。

    此致、

    Anil.

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

    尊敬的会议:

    在我这边,我尝试了两件事

    1.严格按照你的屏幕截图,包括区域地址和区域大小

    2.不更改区域地址设置、而只更改索引 4 的属性

    两者都无法正常工作。

    我尝试调试示例代码、但收到错误消息 :<Source file 'portable\gc\arm_CA53\portasm.S' was not found.>

    然后我尝试调试我自己的工程、我看到这两种情况下它都将进入无穷大的 while 循环  

    HwiP_ARMv8_Handlers_nortos.c 下的 void HwiP_abortHandler (uint64_t *exStack)  
    在我们的工程中、我们不使用 SysConfig、否则它会始终更新我们的设置。 粘贴代码下面的两件事,我尝试上面提到
    1.
    MmuP_RegionConfig gMmuRegionConfig[CONFIG_MMU_NUM_REGIONS] =
    {
        {
            .vaddr = 0x0u,
            .paddr = 0x0u,
            .size = 0x80000000u,
            .attr = {
                .accessPerm = MMUP_ACCESS_PERM_PRIV_RW_USER_NONE,
                .privExecute = 1,
                .userExecute = 0,
                .shareable = MMUP_SHARABLE_OUTER,
                .attrIndx = MMUP_ATTRINDX_MAIR0,
                .global = 1
            }
        },
        {
            .vaddr = 0x82000000u,
            .paddr = 0x82000000u,
            .size =  0x02000000u,
            .attr = {
                .accessPerm = MMUP_ACCESS_PERM_PRIV_RW_USER_NONE,
                .privExecute = 1,
                .userExecute = 0,
                .shareable = MMUP_SHARABLE_OUTER,
                .attrIndx = MMUP_ATTRINDX_MAIR4,
                .global = 1
            }
        },
    };
    2.
    MmuP_RegionConfig gMmuRegionConfig[CONFIG_MMU_NUM_REGIONS] =
    {
        {
            .vaddr = 0x0u,
            .paddr = 0x0u,
            .size = 0x80000000u,
            .attr = {
                .accessPerm = MMUP_ACCESS_PERM_PRIV_RW_USER_NONE,
                .privExecute = 1,
                .userExecute = 0,
                .shareable = MMUP_SHARABLE_OUTER,
                .attrIndx = MMUP_ATTRINDX_MAIR0,
                .global = 1
            }
        },
        {
            .vaddr = 0x80000000u,
            .paddr = 0x80000000u,
            .size = 0x80000000u,
            .attr = {
                .accessPerm = MMUP_ACCESS_PERM_PRIV_RW_USER_NONE,
                .privExecute = 1,
                .userExecute = 0,
                .shareable = MMUP_SHARABLE_OUTER,
                .attrIndx = MMUP_ATTRINDX_MAIR4,
                .global = 1
            }
        },
    };

    谢谢、

    Dazong

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

    您好、Dazong、


    请尝试以下 MPU 配置设置:
    •将 ATF 代码放置在缓存的 DDR 存储器中。


    •将应用程序保留在未缓存的 DDR 内存中。


    •确保 AMP 共享缓冲区驻留在缓存的内存中。

    我附上了代码供您参考。

    请注意:
    如果将 DDR 存储器的任何部分移动到未缓存状态、性能会降低。


    如果这种降级对于您的用例来说是可以接受的、则可以继续使用这些设置。
    否则、建议将所有内容都保存在缓存中、以获得更好的性能。

    代码:  

    /cfs-file/__key/communityserver-discussions-components-files/791/mmcsd_5F00_raw_5F00_io_5F00_am62lx_2D00_evm_5F00_a53ss0_2D00_0_5F00_freertos_5F00_gcc_2D00_aarch64.zip

    请告诉我,如果你遇到任何问题..

    此致、

    Anil.

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

    谢谢 Anil、

    是的、这是有效的。

    Dazong

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

    嘿 Anil、  

    当以 100kHz 的频率运行时、此更新似乎导致了一些 I2C 测试错误、但在 400kHz 的频率下运行正常。   您是否知道为什么会这样。  程序正在此处挂起

    HwiP_abortHandler:

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

    您好、Brody、

    您能否为新问题打开新主题(尝试在私人论坛中发布)?

    您是否在主 ISR 中放置了断点并从哪里可以看到异常?

    当您以 100KZ 运行时、您是否更改了 I2C 的任何 FCLK 频率? 什么是 I2C FCLK?

    是否正在启用或禁用缓存中尝试上述测试?

    此致、

    Anil.

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

    嘿 Anil、  

    我想我会继续这里的讨论、因为它与缓存禁用有关。  所以、我测试的是我使用了与 MMC 示例相同的设置和代码、我能够构建和运行示例 MMC 代码。  但是、当我将 MMU ARMv8 的设置复制到 I2C Led 闪烁示例时、一旦我将 DDR_MEM_REGION 的属性从 Attr 索引 7 更改为 Attr 索引 4、I2C Led 闪烁的该示例代码将不起作用



    您能否请尝试一侧对 MMU ARMv8 的 MMC 示例模拟上述相同的设置、看看您是否能够使用它来运行 I2C led 闪烁示例。   

    谢谢

    e2e.ti.com/.../i2c_5F00_led_5F00_blink_5F00_am62lx_2D00_evm_5F00_a53ss0_2D00_0_5F00_nortos_5F00_gcc_2D00_aarch64.zip

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

    您好 Broody、

    我看着你的查询,你可能会期待明天答复.

    此致、

    Anil.

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

    您好 Broody、

     我正在将您的查询转至 I2C 专家对上述问题进行评论。

    此致、

    Anil.

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

    谢谢 Anil。 请让我了解最新信息。  

    Brody

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

    尊敬的 Brody:

    我能够在我这边重现问题并进行调试。

    请等待一段时间恢复。

    此致、

    Tushar