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.

[参考译文] TMS570LC4357:MibSPI #1接口的时序问题

Guru**** 2452370 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

您好!

我们尝试使用 MibSPI 接口(特别是 SPI #1)与 ADC 器件通信。 功能很简单、我们希望发送和接收27个数据包、当接收到最后一个数据包时、会触发 DMA 通道、将数据从 RXRAM 复制到本地缓冲区。

当前配置:

-多缓冲模式。

IO DMA。

- SCS1、SPICLK、SIM0和 SOMI0设置为正常(其余引脚默认设置为不起作用)。

-数据格式0:

             无间隙延迟、极性偶数、奇偶校验禁用、移位方向 MSB、 全双工启用、 CS 延迟被禁用、CLK 极性高电平、相位延迟使能、预分频= 4、数据长度= 16、1线模式。

-转移组:

            TG0、TG 禁用(需要时将触发)、一次性启用、PRST 忽略、触发始终、触发源禁用、 起始索引= 0。

            TG1 (虚拟、仅限制 TG0的大小)、TG 禁用(始终)、起始索引= 27。

- SPI DMA:

            一次性禁用、触发缓冲器26、Rx DMA 线路2、Rx DMA 启用、TX DMA 禁用、无 BRK 交错。

TXRAM 数据包的配置为:

            挂起覆盖保护、CS 保持两个数据包、释放第三个数据包(沿27个数据包重复此模式)、TG 锁定(仅第27个数据包解锁)、使用数据格式0。

我们使用了其他可用总线、发送数据包时没有问题、但使用 SPI #1时会发生以下情况:

-启用 TG0后、传输开始、只有5个数据包一个接一个地发送、没有任何问题、然后发送每个数据包之间的间隔为~14ms、因此发送27个数据包需要花费大量时间。

另一项测试是创建8个 TG (0至7)并为每个 TG 分配3个数据包(总共24个数据包),我们尝试启用所有 TG,1对1, TGs 1至7会按预期发送3个数据包、但 TG0仅发送2个数据包、然后等待几 ms 后再发送最后一个数据包、可能需要~500us 的传输最后花费几 ms。

您是否知道在使用 SPI #1时、我们是否应该考虑任何差异?  

如果您需要任何其他信息来更好地描述可能发生的情况、请告诉我。

此致、

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

    尊敬的 Carlos:

    我已开始处理您的问题、我将很快提供更新。

    --

    谢谢、此致、
    Jagadish。

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

    Jagadish、您好、感谢您查看此问题。

    我们已经运行了更多测试、并发现了以下内容(如果它能帮助您更好地了解正在发生的情况):

    我们有一个调度程序、其中包含一个用于触发传输(启用 TG)的函数、另一个用于稍后调用以读取接收到的数据。 显然、每个发送的数据包之间的间隔是调度程序帧的持续时间。 由于某种原因、当启用 TG 时、它仅发送一个数据包。

    如果我们添加一个循环来等待 TG 传输完成标志所有数据均按预期发送、那么我们需要的功能是启用 TG、 让 CPU 处理其他任务、然后尝试在数据 应该可用时读取数据。  

    此致、

    卡洛斯。

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

    尊敬的 Carlos:

    [引用 userid="527234" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface "]我们使用了其他可用的总线,发送数据包时没有问题,但使用 SPI #1时会发生以下情况

    我不知道这一点、您是否使用任何其他 SPI 进行了测试? 它是否可以与其他 SPI 正常配合工作、并且仅存在 SPI #1实例问题?

    [引用 userid="527234" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface~14ms、因此传输27个数据包需要花费大量时间。

    SPI 不应发生这种延迟、如何确保它不是从器件延迟? 控制器的工作方式类似于 SPI 主设备、对吧?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="524805" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface/4495342 #4495342">我不知道这一点、您是否使用任何其他 SPI 进行了测试? 它是否能够与其他 SPI 正常配合工作、并且仅在[/QUERPILE]中出现 SPI #1问题?

    正确、我们使用 SPI#5、SPI#2、SPI#3开发了其他驱动程序、我们仅遇到 SPI#1问题。

    [引用 userid="524805" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface/4495342 #4495342"> SPI 不应出现这种延迟,如何确保它不是从器件延迟? 控制器的作用类似于 SPI 门架[/报价]

    是的、控制器是主器件、其运行方式与之类似。 但在最近的测试中、我们发现此延迟取决于启用 TG 的频率、我们面临的问题是、每次启用 TG (触发传输)时、总线不会发送属于 TG 的所有数据包(在本例中为27个)、 它只发送一个。 由于我们每14ms 调用一次触发器函数、因此我们看到一个数据包以该速率传输。 但是、预期的行为是在每次启用 TG 时传输所有数据包、对吧?

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

    尊敬的 Carlos:

    我能否仅获得具有 SPI 功能的代码的最低版本? 因此、我可以在我结束时轻松地测试和调试您的问题

    --

    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、  

    我们使用 Halcogen 创建了一个小型应用程序为了获得一个只为我们的应用运行 SPI 的程序、我们发现 SPI 在那里工作正常。  

    这就是为什么我没有向您发送您要求的最低版本。

    但是、 在我们的最终应用中、我们发现了 SPI #1出现问题的原因。 为了安全/认证、我们明确禁用未使用的所有模块、很明显、当我们禁用 I2C 时、SPI 开始出现一些时序问题。

    #define SYS_I2C1_BIT_POSITION 禁用8.
    #define SYS_I2C2_BIT_POSITION 禁用9.
    /*禁用 I2Cx 模块*/
    pcrREG3->PSPWRDWNSET0 |= 1U<<(uint32) SYS_I2C1_bit_POSITION 禁用;
    pcrREG3->PSPWRDWNSET0 |= 1U<<(uint32) SYS_I2C2_bit_POSITION 禁用;
    在对上述两行进行注释后、我们使 SPI #1按预期工作。
    我们仍然希望禁用 I2C、因为我们不使用 I2C、您知道这会影响 SPI 接口的原因吗?
    此致、
    卡洛斯。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Carlos:

    对于具有 I2C 位的 SPI、不应有任何依赖关系、

    您是否检查了编程的其他部分是否也使用了您提到的宏?

    --

    谢谢、此致、
    Jagadish。

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

    您好 Jagadish、

    事实证明、我们禁用模块的逻辑不正确、我们实际上是禁用 MIBSPI1模块而不是 I2C1模块。

    但是、知道了这一点、我们想知道在模块应该被禁用的情况下、我们如何仍然能够与它交互...

    MIBSPI1被错误地禁用、在 PSPWRDNSET0寄存器中为 PCR3设置位8和9 (外设选择2、象限0和1)来禁用它。 虽然 MIBSPI1外设未按预期工作、但在我们能够传输数据的地方、它确实部分工作、考虑到它应该被禁用、这是令人惊讶的... 此时、我们想知道如何使用这些  PSPWRDNSET 寄存器。  禁用模块是否还需要其他任何资源?

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="531255" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface/4513444 #4513444"]实际禁用 MIBSPI1模块而不是 I2C1模块。

    如果我们这么做、MIBSPI1就不应该再正常工作了?

    [引用 userid="531255" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191677/tms570lc4357-timing-issues-with-mibspi-1-interface/4513444 #4513444"]但是,我们知道,在模块应该已禁用的情况下,我们仍然无法与模块进行交互。

    您能不能准确地验证哪些寄存器位会影响注释行。 我的意思是、在我们取消注释和注释行时、确切地验证哪些位状态发生变化。 最好在调试模式下执行此操作、这是可行的吗?

    然后、我们将看到这些位的定义。

    --

    谢谢、此致、
    Jagadish。