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.

[参考译文] TMS320F28P650DK:当 CPU 未重新启动或下电上电时、在实现 BiSS-C 通信(使用 TI 提供的库程序)后、无法切换到 Endat/tformat 通信(使用 TI 提供的库程序)。

Guru**** 2439710 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1529527/tms320f28p650dk-when-the-cpu-does-not-restart-or-power-cycle-after-implementing-biss-c-communication-using-the-library-program-provided-by-ti-it-is-unable-to-switch-to-endat-tformat-communication-using-the-library-program-pro

器件型号:TMS320F28P650DK

工具/软件:

您好、工程师:

当 CPU 上电时、它会根据编码器类型参数运行 TI 提供的库程序中的 PM_tformat_setupPeriph ()/ PM_endat22_setupPeriph ()/ PM_bissc_setupPeriph () 函数、所有函数都可以正常通信。 我的 CLB 是多路复用的。现在、我需要切换编码器类型、而无需重新启动或下电上电、以实现与另一个编码器的通信。 切换编码器类型后、将运行相应的 setupPeriph() 函数、并且只有在函数运行完成后才会尝试通信。  

在这种情况下、tformat 和 Endat 之间切换没有问题、但在切换到 BiSS-C 通信后、再次选择 tformat/Endat 无法通信。

我猜想、以下情况造成了这种情况、并作出了修改、但没有一个是有效的:
  1. CLB 配置未完全切换。
    等待 setupPeriph() 函数完全运行、并检查相应的 CLB 寄存器以确认 CLB 开关配置已完成。
  2. CLB 中 FSM 和 Counter 的值未完全清除。
    在运行 setupPeriph() 函数之前、运行 tformat_resetclb()、bissc_resetclb()、endat22_resetclb()、并检查相应的 CLB 寄存器以确认清除已完成。
  3. CLBINPUTXBAR、CLBOUTPUTXBAR、SPI 等未完全配置和初始化。
    检查相应的寄存器、以确认修改已完成且未锁定。
 如果可能、工程师可以尝试在 BiSS-C 和 tformat 之间切换 CLB 通信程序、而无需关闭、重新启动或重新启动 CPU。

此致、

林浩南

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

    BiSS C 将 TXeN 线路保持为低电平 — 它是否已发布?  

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

    您好 Lori、

    程序的哪个部分会将 TxEn 信号保持为低电平? 这可能是造成这种情况的原因。

    此外、在初始化 Endat 和 Tformat 时、我将 TxEn GPIO 重新配置为 clboutputxbar。 这是否会受到将 TxEn 信号配置为保持低电平的 BiSS-C 程序的影响?

    我记得在切换通信(从 BiSS-C 切换到 Tformat 和 Endat)时、命令发送是正常的、编码器返回数据、但 SPI 不会正常接收数据。 spiRxFIFO 只有一段全为零的数据。 spiRxFIFO 中的这个数据应该是发送命令时 SPI 接收到的数据。我对此有点不确定。

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

    对于 BiSS-C、由于它不会改变、因此通过写入 GPIO 寄存器的 CPU 将 TxEN 保持低电平。 对于另外两个字节、CLB 会在需要时切换引脚。  

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

    您好 Lori、

    我明白你说的。 但在 tformat/endat 例程的初始配置中、TxEn 的 GPIO 被重新配置为 CLBOUTPUTXBAR、由 CLB 的输出控制。 这应该会覆盖 BiSS-C 中的保持低电平、其中 CPU 写入 GPIO 寄存器以控制 TxEn 信号?

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

    是的、我记得对于 T-format 和 EnDat、TxEn 由 CLB 控制。 对于 BiSS、我认为它仅由 GPIO 控制。 尝试监控引脚并检查其行为是否符合预期?

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

    我检查了开关后 tformat 和 endat 的 CLB 输出、包括 TxEn 引脚信号和生成的 SPICLK、所有这些都是正常的。 无法正常通信的原因是 SPIRX 未按预期工作。SPIRXFIFO 中的数据数量正确、但 RXFIFO 中的数据不正确。

    ① μ s

    ② μ s

    ③ μ s

    ④ μ s

    ⑤ μ s

    最终接收到的数据为:

    我在程序中检查了 SPI 的配置、发现没有任何区别:

    void BISSC_SPI_init(){
          SPI_disableModule(BISSC_SPI_BASE);
          SPI_setConfig(BISSC_SPI_BASE, DEVICE_LSPCLK_FREQ_20M, SPI_PROT_POL1PHA0,
                              SPI_MODE_PERIPHERAL, BISSC_SPI_BITRATE, BISSC_SPI_DATAWIDTH);
          SPI_enableTalk(BISSC_SPI_BASE);
          SPI_enableFIFO(BISSC_SPI_BASE);
          SPI_disableLoopback(BISSC_SPI_BASE);
          SPI_setEmulationMode(BISSC_SPI_BASE, SPI_EMULATION_FREE_RUN);
          SPI_enableModule(BISSC_SPI_BASE);
    }

    void PM_tformat_Spi_Init(void)
    {
        SPI_disableModule(PM_TFORMAT_SPI);
        SPI_setConfig(PM_TFORMAT_SPI, DEVICE_LSPCLK_FREQ_20M, SPI_PROT_POL0PHA0,
                      SPI_MODE_PERIPHERAL, 2500000, 10);
        SPI_enableTalk(PM_TFORMAT_SPI);
        SPI_enableFIFO(PM_TFORMAT_SPI);
        SPI_reset(PM_TFORMAT_SPI);
        SPI_disableLoopback(PM_TFORMAT_SPI);
        SPI_setEmulationMode(PM_TFORMAT_SPI, SPI_EMULATION_FREE_RUN);
        SPI_enableModule(PM_TFORMAT_SPI);
    }

    void endat22_spi_fifo_init() {
    
        //
        // Initialize SPI FIFO registers
        //
        SPI_disableModule(PM_ENDAT22_SPI);
        SPI_setConfig(PM_ENDAT22_SPI, DEVICE_LSPCLK_FREQ_20M, SPI_PROT_POL1PHA0,
                      SPI_MODE_PERIPHERAL, 200000, 9);
        SPI_enableTalk(PM_ENDAT22_SPI);
        SPI_enableFIFO(PM_ENDAT22_SPI);
        SPI_reset(PM_ENDAT22_SPI);
        SPI_disableLoopback(PM_ENDAT22_SPI);
        SPI_setEmulationMode(PM_ENDAT22_SPI, SPI_EMULATION_FREE_RUN);
        SPI_enableModule(PM_ENDAT22_SPI);
    }

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

    检查接收到的信号是否已正确重新连接到 SPI PICO。 在 BiSS-C 解决方案中、响应通过逻辑块进行路由、并从 CLB 馈送到 SPI PICO。 因此、响应具有类似于生成的时钟的延迟。 其他解决方案不是这样做的。  

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

    您好 Lori、

    如您所述、我检查了 CLB 的输出配置、发现 BiSS-C 程序确实与您所描述的一样。 初始化配置时、我还初始化了输出配置、后续切换没有问题。 感谢您的及时支持。

    此致、

    林浩南