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.

[参考译文] TMS320F28377S:SPIB 杂散时钟脉冲

Guru**** 2574655 points
Other Parts Discussed in Thread: TMS320F28377S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1563154/tms320f28377s-spib-spurious-clock-pulses

器件型号:TMS320F28377S


工具/软件:

您好 TI 支持部门、

我观察到 杂散时钟脉冲(干扰) 在 LAUNCHXL-F28377S 板的 SPIB 模块上、SPIA 可在相同的设置下正常工作。

设置:

  • 器件:TMS320F28377S、LSPCLK = 50MHz

  • 模式:16 位主模式、模式 0、CS 硬件、FIFO 禁用

观察结果:

  • SPIA: 稳定的时钟、1、2 和 5MHz 上无需额外的脉冲

  • SPIB:

    • 当 5MHz→时、CLK 和 MOSI(2–4 组)上都有额外脉冲

    • 当 2MHz→时、仅 CLK 上出现额外脉冲

    • 在 1MHz→时、未观察到任何干扰

  • 当 SPIB 引脚配置为 GPIO 时、干扰会消失。 启用 Re 的 SPI 多路复用器会恢复干扰。

  • 使用不同的逻辑分析仪通道进行测试、以排除测量伪影。

附加测试:

  • 将 SPIB 时钟映射到 GPIO65 (SPICLKB) →出现 3 μ s 干扰

  • 将 SPIB 时钟映射到 GPIO58 (SPICLKB) →干扰消失

  • 但是、在我的应用中、SPIA MOSI 也需要 GPIO58、因此不能直接使用此权变措施。

附件:

  1. 逻辑分析仪屏幕截图 (SPIA 与 SPIB)

  2. 带杜邦接线的电路板照片(为了清晰的设置)

  3. 极少的测试代码

请您确认是不是这样 预期的硬件行为 (由于引脚多路复用器路由)或 配置问题
任何建议的权变措施都将不胜感激。

谢谢您、
Mr. Orhan Gürbüz ć




#include "driverlib.h"
#include "device.h"
#include "pin_map.h"

void SPIA_init(void);
void SPIB_init(void);

int main(void)
{
    Device_init();
    Device_initGPIO();

    // === SPIA ===
    GPIO_setPinConfig(GPIO_58_SPISIMOA);
    GPIO_setPinConfig(GPIO_59_SPISOMIA);
    GPIO_setPinConfig(GPIO_60_SPICLKA);
    GPIO_setPinConfig(GPIO_61_SPISTEA);

    // === SPIB ===
    GPIO_setPinConfig(GPIO_63_SPISIMOB);
    GPIO_setPinConfig(GPIO_64_SPISOMIB);
	GPIO_setPinConfig(GPIO_65_SPICLKB); // GPIO_58_SPICLKB
    GPIO_setPinConfig(GPIO_66_SPISTEB);

    SPIA_init();
    SPIB_init();

    while(1)
    {
        SPI_writeDataNonBlocking(SPIB_BASE, 0xAAAA);
        SPI_writeDataNonBlocking(SPIA_BASE, 0x5555);
        DEVICE_DELAY_US(20);
    }
}

void SPIA_init(void)
{
    SPI_disableModule(SPIA_BASE);
    SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_MASTER, 5000000, 16);
	SPI_disableFIFO(SPIA_BASE);
    SPI_disableInterrupt(SPIA_BASE, SPI_INT_RXFF | SPI_INT_TXFF | SPI_INT_RX_OVERRUN | SPI_INT_RXFF_OVERFLOW | SPI_INT_RX_DATA_TX_EMPTY);
    SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_RXFF | SPI_INT_TXFF | SPI_INT_RX_OVERRUN | SPI_INT_RXFF_OVERFLOW | SPI_INT_RX_DATA_TX_EMPTY);
    SPI_enableModule(SPIA_BASE);
}

void SPIB_init(void)
{
    SPI_disableModule(SPIB_BASE);
    // GPIO_setPinConfig(GPIO_65_GPIO65);
    SPI_setConfig(SPIB_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_MASTER, 5000000, 16);
	SPI_disableFIFO(SPIB_BASE);
    SPI_disableInterrupt(SPIB_BASE, SPI_INT_RXFF | SPI_INT_TXFF | SPI_INT_RX_OVERRUN | SPI_INT_RXFF_OVERFLOW | SPI_INT_RX_DATA_TX_EMPTY);
    SPI_clearInterruptStatus(SPIB_BASE, SPI_INT_RXFF | SPI_INT_TXFF | SPI_INT_RX_OVERRUN | SPI_INT_RXFF_OVERFLOW | SPI_INT_RX_DATA_TX_EMPTY);
    SPI_enableModule(SPIB_BASE);
    // GPIO_setPinConfig(GPIO_65_SPICLKB);
}

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

    Orhan、

    这是一个奇怪的问题。 查看我们的已知问题文档、我看不到任何类似的内容。

    • 您的 GPIO 配置不包括示例中调用的“GPIO_setPadConfig ()“和“GPIO_setQualificationMode ()“函数。 我认为这不可能解决问题、但您能否添加它们以确定?
    • 您是否还可以为每个毛刺脉冲引脚添加 GPIO_setControllerCore ()?
    • 最后、为每个毛刺脉冲引脚添加对 GPIO_setDirectionMode () 的适当调用。

    这些都不 会 导致您看到的问题、但这些类型的检查/验证非常重要。

    此致、
    Jason Osborn

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

    我已按照建议检查了 GPIO 设置。

    • SPIB 引脚配置为GPIO_QUAL_ASYNC、这是高速通信的正确选项。

    • 为了进行验证、我还尝试了其他限定模式(,,)SYNC3SAMPLE6SAMPLE、但行为没有改变。

    • 无论所选限定模式如何、SPIB(时钟和 MOSI)上的杂散脉冲都保持不变。

    因此、该问题似乎与 GPIO 设置无关。

    谢谢您、
    Mr. Orhan Gürbüz ć

    GPIO_setPinConfig(GPIO_63_SPISIMOB);
    GPIO_setPadConfig(63U, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(63U, GPIO_QUAL_ASYNC);
    GPIO_setControllerCore(63U, GPIO_CORE_CPU1);
    GPIO_setDirectionMode(63U, GPIO_DIR_MODE_OUT);
    
    GPIO_setPinConfig(GPIO_64_SPISOMIB);
    GPIO_setPadConfig(64U, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(64U, GPIO_QUAL_ASYNC); // Checked
    GPIO_setControllerCore(64U, GPIO_CORE_CPU1);
    GPIO_setDirectionMode(64U, GPIO_DIR_MODE_IN);
    
    GPIO_setPinConfig(GPIO_65_SPICLKB);
    GPIO_setPadConfig(65U, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(65U, GPIO_QUAL_ASYNC);
    GPIO_setControllerCore(65U, GPIO_CORE_CPU1);
    GPIO_setDirectionMode(65U, GPIO_DIR_MODE_OUT);
    
    GPIO_setPinConfig(GPIO_66_SPISTEB);
    GPIO_setPadConfig(66U, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(66U, GPIO_QUAL_ASYNC);
    GPIO_setControllerCore(66U, GPIO_CORE_CPU1);
    GPIO_setDirectionMode(66U, GPIO_DIR_MODE_OUT);

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

    感谢您的演示。

    我在这里提到 IO 配置的原因是因为除了 SPI 之外、它似乎正在尝试驱动这些信号。 您是否能够在未将这些引脚配置为 SPI 时监控它们、以查看是否仍然看到类似的行为?

    此外、请注意、为了进一步提高高速、您应在 SPI 中启用一个特定的位、 但 您描述的速度不够高、因此应该是相关的。 driverlib 函数应该像 spi_enableHighSpeedMode() 或类似的函数。

    除了这些想法,我不能确定什么可能导致这种情况。 我当前正在尝试重现此问题。

    此致、
    Jason Osborn

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

    尊敬的 Jason:

    如前所述、我将 SPIB 引脚测试为 GPIO(切换)、并观察到没有干扰。 杂散脉冲仅在启用 SPI 多路复用器后出现。 我还尝试启用 SPI 高速模式、但干扰保持不变。

    这证实了在测试的 SPI 时钟速率下、问题特定于此电路板/配置上的 SPIB。 根据我的测试、只有当 SPIB 通过其默认 SPICLKB 引脚 (GPIO_65) 路由时、才会出现干扰。 通过多路复用器通过不同的可用 GPIO 引脚路由 SPIB 时钟可消除干扰。 这说明了潜在的引脚多路复用器路由问题、而不是软件配置问题。

    此致、
    Orhan

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

    尊敬的 Orhan:

    很抱歉、我将接管对这一主题的支持。 经过一段时间后、您能否更新我有关问题的当前状态:您是否仍看到该问题? 您还有其他问题想要解决吗?

    此致、

    Delaney