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.

[参考译文] DRA821U:GPIO 输出值更改/MCSPI 配置性能

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1510094/dra821u-gpio-output-value-change-mcspi-config-performance

器件型号:DRA821U

工具/软件:

您好的团队、

客户发现、写入 器件寄存器(例如 GPIO 输出值变化或配置 MCSPI 需要很长时间、几乎1us。  对于如此强大的芯片、这种性能似乎非常低。

关于这方面的几个问题:

-他们会做什么错误,导致这种行为?

-这是一个正确的解决方案,以增加 CBASS 时钟?

    • 他们尝试使用第5.4.5.7.4段(DRA821U TRM 修订版)中介绍的程序在 u-boot 中实现此目的 D)、但对 PLLDIV1和 PLLDIV2寄存器的写入无效。 这些选项保留的值为24 (0x8017)和1 (0x8000)。
    • 它们能够更改 PLL0_FREQ_CTRL0寄存器的值、但会影响太多其他内容。

欢迎提供有关如何提高绩效的任何建议!

此致、

Luke

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

    您好的团队、  

    有任何更新吗?

    -卢克

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

    Luke、  

    哪个内核尝试访问该测量中的哪个 McSPI?  

    您知道他们是如何测量延迟的吗? 如果测量只进行了一次访问、则访问 PMU 寄存器(如果它们使用 PMU)的开销不能忽略不计、并且代码优化也很重要。  

    我当前没有访问任何 J7200 EVM。 因此、我尝试测量 J784S2中的 SPI 访问;从 MCU R5f 读取 MCU_MCSPI0_CFG 的 MCSPI_REVISION 寄存器。 其读取延迟为312ns。 此值还包括 PMU 寄存器访问和代码优化的一些开销。 我认为实际的访问延迟小于此值。  

    我预计 J7200与 J784S2之间的 MCU 域结构不应有太大不同。

    ——Junbok  

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

    您好 Junbok、

    他们使用示波器和其他一些工具(如 VxWorks 系统查看器)测量了延迟。

    我必须强调的是、他们的 SPI 没有问题、它工作正常。 它们的开销有问题。 访问控制和状态寄存器需要很多时间。 例如、包括 CS ON 和 CS OFF 在内的整个过程大约需要8-9us、而 SPI 传输只需要2.5us (32位传输12.5MHz)。

    也存在 GPIO 问题。 例如、他们有一个使用 JTAG 协议的英特尔卡塞播放器代码。 播放器控制连接到 JTAG 时钟和数据线的 GPIO 引脚。 当他们在旧芯片上使用此代码时、该过程花费的时间几乎减少了两倍。

    此致、

    Luke

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

    您好的团队、

    我知道可能有许多请求、但我们能否获得一些反馈、了解导致上述功能的原因?  
    -卢克

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

    Luke、  

    我将向 SPI 专家请教一些有关分析 SPI 初始化延迟的帮助信息。

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

    Junbok、

    谢谢、但 这里真正关心的是切换 GPIO 引脚的时间量。 他们修改了 GPIO 驱动程序、以便仅在状态发生变化时访问 GPIO 引脚。 这在某种程度上掩盖了问题、但实际上并没有什么帮助。

    此致、

    Luke

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

    您好:

    事件 CPU 内核 软件 用于控制 GPIO 吗?   这是 Linux、FreeRTOS 还是其他系统?  似乎很可能正在使用的软件栈可能会增加开销和/或正在使用的 CPU 可能无法完全计时。  所有内核都提供 JTAG 工具可以使用的硬件跟踪功能。 只需简单地"逐步"执行 GPIO 切换 C/C++函数、即可完整跟踪所执行的所有指令及其完成时间。   在描述的例子中、您可能会由于软件开销而看到许多意外的指令正在执行。  

    在对 GPIO 进行读写的情况下、Junbok 提到 IO 空间的往返时间(启动请求、数据、响应)"触摸"花费~300nS。  如果您的代码对未缓存的 IO 地址进行多次访问、那么在1uS 的时间内累积指令似乎不难相信。  "重磅"GPIO 库可能会读取块以确保其已启用、然后读取/写入以设置 GPIO 方向、再读取(要获取当前值、请应用掩码)、然后写出值。   ETM 跟踪"完全"发生的事情将会显示正在发生的事情。 如果是 A72、CPU 可能能够从本地缓存中淘汰许多@2GHz 的指令、但如果它通过总线并与可能正在运行20MHz (甚至重新同步到32KHz 去抖)的 IO 块通信、则根据设计、它需要更长的时间。

    使用的软件、实际指令数以及"where"和相对时钟速度(源<->互连<->模块)都很重要。

    此致、
    理查德·W·