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.

[参考译文] AM2431:OSPI 直接访问长度

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1168224/am2431-ospi-direct-access-length

器件型号:AM2431
Thread 中讨论的其他器件: SysConfig

我正在使用 AM2431尝试使 ospi 外设与 PSRAM 通信。 为了满足其中一个 PSRAM 时序要求、我需要能够控制 DAC 读取期间的数据量。 存取的接缝数据量是32字节的倍数、但我无法确定它如何决定该倍数的大小。

此外、

我在 TRM 中发现并在逻辑分析仪上看到、在使总线信号时序正确所需的 ospi 输入时钟频率与最小分频值之间存在关系。 对于输入时钟频率和分频值的有效组合、几乎没有什么指导、您能否提供有关有效配置的更多信息?  

谢谢、

|Nick

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

    您好、Nick、

    [引用 userid="522882" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1168224/am2431-ospi-direct-access-length "]访问的接缝数据量是32字节的倍数,但我无法确定它如何决定多个的长度。

    AM243x 具有32位总线、但传输的数据量不取决于设备上的 MMR 值、如果是您所要求的。 在 OSPI 通信中、传输的数据量通常由您的外部存储器支持的命令类型来控制。 我建议您查看 PSRAM 的数据表、具体了解它在运行期间支持的多读/写命令。 您很可能会找到允许您一次访问整个页面及其较小块的函数

    至于第二个问题、TRM 目前是时钟配置选项的参考文档。 您可以通过不同的方式来实现、这完全取决于您的用例。

    • 您可以在 OSPI_CONFIG_REG:MSTR_BAUD_DIV_FLD 中配置波特率分频器。 在 配置该值之前、请记住第12.3.2.4.16节 OSPI PHY 模块中的注意事项
    • 如果外部存储器支持外部回路引脚、则可以将其与 AM243x 配合使用、以加快高速计时结束。 第 12.3.2.2节 OSPI 环境显示了与此相关的连接
    • OSPI_DEV_DELAY_REG 还有助于在 AM243x 器件的输出信号生成中引入相对延迟。 第  12.3.2.5.2节配置 OSPI 控制器以实现最佳使用介绍了如何使用该控制器

    希望这对您有所帮助

    最棒的

    Daniel

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

    Daniel:

    在过去几周里、我已经非常熟悉 PSRAM (APS6404L-SQRH)和 ospi 接口。 使用 Stig 或间接访问时、可以使用要传输的数据量对 ospi 寄存器进行编程。 在直接访问期间、我可以想象、访问的数据量与高速缓存、缓冲区、总线宽度和一些其他因素有关。 问题是、PSRAM 具有4us 的最大 CE 活动时间、使用1GHz 作为输入时钟、28作为分频器(我必须通过实验找到的值)可提供142个时钟、该时钟少于带有命令、地址和等待状态的64字节传输。 我如何保证在使用直接访问时、我永远不会创建耗时太长的传输?

    谢谢、

    |Nick

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

    您好、Nick、

    [引用 userid="522882" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1168224/am2431-ospi-direct-access-length/4398190 #4398190"]在直接访问期间,我可以想象,访问的数据量与高速缓存、缓冲区、总线宽度和一些其他因素有关[/quot]

    DAC 模式只是到 OSPI 区域的存储器映射访问、因此 CPU 或 DMA 确实访问了那个存储器地址、它直接输出到闪存。 在 DAC 模式下、OSPI 访问的数据量取决于 CPU 或 DMA 请求的数据量。  如果您将 R5配置为将 OSPI 作为普通不可高速缓冲存储器、则读取的数据量取决于代码(16位读取将读取2个字节、32位读取4个字节)。 DMA 受传输配置中的 ICNT0和 ICNT1的影响。

    如何使用 OSPI 控制器访问 RAM? 您使用的是任何 R5内核还是 DMA?

    Daniel

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

    Daniel:

    使用 R5内核和 ospi、目前我已将 ospi 设置为1GHz 输入时钟、32分频值以使 SPI 时钟、八进制模式、DTR、SPI 模式0、传统模式禁用、 4个地址字节(它是一个128MB PSRAM、尝试与之通信)、它使用双操作码、以便启用、上下命令寄存器都设置了相同的命令、启用 DAC 模式、启用 DDR 命令、设置器件大小、 读取和写入虚拟时钟被置位、DEV 延迟被置位、并且由于 WEL 不在 PSRAM 上使用、所以 WEL 被禁用。 我对存储器映射区域进行了缓存设置、因为我发现使用  SysConfig 的 MPU 设置中"区域属性:缓存"之外的任何其他设置会导致尝试执行 ospi 访问时崩溃。 由于勘误表的原因、我不使用 DMA、并尝试避开 PHY。 我发现、在 PSRAM 不在器件限制下运行的情况下、PHY 调优也不会收敛。 通过这种设置、我的 DAC 被映射到地址0x60000000、我使用复制如下的环路测试来访问它:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #define DATA_AMOUNT 32u
    #define TEST_LEN (262144u-1u)
    uint32_t fail = 0u;
    void testPsramForever(void)
    {
    //setup trigger pin
    setPinGpioDirection(TP128, GPIO_OUTPUT);
    setPinLogicHigh(TP128);
    dumpOspiRegs();
    uint32_t pass = 0u;
    fail = 0u;
    while(received2 != 'c')
    {
    runTest() ? pass++ : fail++;
    //waitMicroseconds(1000000u);
    printString("\n\rPSRAM SINGLE TEST DONE");
    printString("\n\rPSRAM PASS: %d", pass);
    printString("\n\rPSRAM FAIL: %d\n\r", fail);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在某些情况下、ospi 将尊重页面和块设置、但我发现、更改 for 循环大小是触发的 ospi 访问的最大决定因素。 如果我将 for 循环设置为16或32字节、页大小为32字节、我将获得32字节的倍数的 ospi 事务、但我需要保证这些访问一次不会大于64字节、不包括开销、 以确保我不违反 PSRAM 的4us 最大 CE 有效时序要求。

    谢谢、

    |Nick

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

    您好、Nick、

    [引用 userid="522882" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1168224/am2431-ospi-direct-access-length/4402290 #4402290"]我对存储器映射区域进行了缓存设置,因为我发现在  SysConfig 的 MPU 设置中使用除“区域属性:缓存”之外的任何其他设置会导致在尝试搜索时崩溃[/quot]

    当 R5在 OSPI 设置为可缓存存储器区域的情况下执行读取操作时、它将从闪存读取32字节(缓存大小)。 为了满足您的 PSRAM 时序要求、您需要避免背靠背发生超过2次的高速缓存取。  

    每个缓存未命中都会导致对 OSPI 的高速缓存取、这是观察到的32字节访问。 多个缺失将导致多个缓存取。

    [引用 userid="522882" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1168224/am2431-ospi-direct-access-length/4402290 #4402290"]我需要保证这些访问一次不会超过64字节(不包括开销),以确保我不违反 PSRAM 的4us 最大 CE 活动时序要求。

    考虑到前面的考虑因素:您首先需要确定性能需求、主要是了解您可以使用的最慢吞吐量、然后根据您的需求在 for 循环中开始添加内存障碍、以实现您的目标。

    另一种选择是在读取32个字节后、甚至在首次读取32字节边界后、设置一个较小的延迟。

    OSPI DAC 的工作方式是与 SOC 无关的 ARM 概念。 要更详细地了解它的工作原理、您可以参阅《ARM 架构参考手册》。 下面我将提供链接:

    ARM 架构参考手册: ARM 架构参考手册 ARMv7-A 和 ARMv7-R 版本

    此外、下面是指向存储器屏障部分的链接、其中包含有关这些部分的说明: ARM 架构参考手册 ARMv7-A 和 ARMv7-R 版本

    如果您仍有相同的问题或有其他问题、请仔细检查并再次联系

    最棒的

    Daniel

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

    Daniel:

    感谢您提供信息。 我之前以不同的方式使用过缓存、可以在上面摘录中的注释掉的缓存无效调用中看到部分残留。 我尝试在回路存储器映射访问之后设置数据障碍、但没有看到改进、可能我做错了、并将再次尝试。

    我的同事对 OSPI_DEV_SIZE CONFIG_REG 寄存器很好奇。 他希望页面大小会限制读取访问、但考虑到它的闪存没有读取限制。 页面大小和块大小与写入和擦除访问相关。 为什么寄存器对读取长度没有影响?  

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

    您好、Nick、

    [引用 userid="522882" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1168224/am2431-ospi-direct-access-length/4405904 #4405904"]页面大小和块大小与写入和擦除访问有关[/quot]

    是的、正确。 这将对读取访问大小没有影响。

    如果您对存储器映射访问期间的数据限制有任何疑问、请随时联系我们。 我一定会与我们团队中的 R5FSS 专家交流。

    最棒的

    Daniel