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.

[参考译文] AM3352:如何以 SPL 方式向 RAM (非 CPU 高速缓存)写入数据和从 RAM 读取数据

Guru**** 2540720 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1227004/am3352-how-to-write-data-to-and-read-from-the-ram-not-cpu-cache-in-spl

器件型号:AM3352

尊敬的先生:

我使用的是 AM3352处理器、但已获取 SDK 的版本为(PROCESSOR-SDK-LINUX-AM335X Ver.8.2.0.24)。
在程序中、我希望在启动 Linux 时检查电路板上的 SDRAM 设置、因此我只在 SPL 中编写了如下所示的代码。

例如、

*(int*)(0x80000000) = 1 ;  /* sdram address */

/* do something to flush data to memory from the cache,  */
/* and set invalidate to guarantee data read from memory.  */

a = *(int*)(0x80000000) ; /* read data from memory */

if ( a != 1 ){
    /* bad memory */
}

我的问题是:
在 SPL 过程中,我可以使用哪个函数来保证数据写入主存储器(DRAM)并从中读取,而不是 CPU 缓存数据?

此致

张希通

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

    尊敬的 Xitong:

    我们的 U-Boot 专家离开办公室几天。 请预计响应会延迟。

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

    你好,刘先生

    感谢您的回答。 但是、我应该等待多长时间呢?

    此致

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

    您好 Xitong:

    您是否尝试过使用关键字 volatile?

    此致、

    朱迪斯

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

    您好、Judith:

    感谢您的回复、但我对您所说的 volatile 关键字有点困惑。
    在我看来、设置关键字 volatile 是为了避免编译器进行优化、通常用于设置寄存器等。

    但我的问题是、如果我将一些数据写入存储器(DRAM)地址并进行读取、那么实际上将读取 CPU 缓存中的数据。
    我不希望这样、我需要完全从存储器(DRAM)中进行写入和读取。
    应该有一些操作系统定义的函数、如"flush_cache"、但我不确定您的 CPU (AM3352)支持哪个函数。

    是的、我可以编写关键字 volatile 来在我的代码中定义变量、但我不明白它是如何解决此问题的。
    您能否向我展示此内容以了解详情?


    此致、

    张希通

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

    您好 Xitong:

    volatile:优化时会省略声明为 volatile 的对象、因为它们的值随时可能被当前代码范围之外的代码更改。 系统始终从存储器位置读取易失性对象的当前值、而不是在请求时将其值保存在临时寄存器中、即使之前的指令要求同一对象的值也是如此。

    但是、如果你想使用缓存清空、u-boot 中似乎没有 doc、但是你可以读取:arch/arm/lib/cache.c。
    功能: https://elixir.bootlin.com/u-boot/latest/source/arch/arm/lib/cache.c#L22
    示例: https://elixir.bootlin.com/u-boot/latest/source/arch/arm/cpu/armv7/s5p4418/cpu.c#L48

    此致、

    朱迪斯

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

    您好 Judith、ñ a

    感谢您的答复。 我将在我的板上放大它。

    此致、

    张希通

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

    您好!

    当然、请告诉我。

    ~朱迪斯