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.

[参考译文] MSPM0G3507:MCU SPI (从器件)发送数据、但 FIFO 为空?

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1519690/mspm0g3507-mcu-spi-slave-sending-data-but-fifo-is-empty

器件型号:MSPM0G3507

工具/软件:

你好。

MCU 是从器件。

我有一个 RPI 作为主轮询 MCU....see 附件。

MCU 在 RPI 轮询时执行任务、但即使 TX FIFO 为空且充满0x00、MISO 上似乎有数据;

这是一个问题、因为这些 SPI 转换(实际上是 LVDS SPI)在数据采集期间引起噪声。

有什么想法为什么我似乎不能用0x00填充 FIFO ?

16位模式下的 SPI ...在 RPI 轮询 MCU 时、您可以看到两组八个时钟。

我想我不清楚如何用零填充 TX FIFO ...

谢谢。

--

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

    请参阅 TRM 中的这一部分:

    https://www.ti.com/lit/ug/slau846b/slau846b.pdf

    19.2.2.5 FIFO 操作发送 FIFO

    您可以在 SPI 传输之前填充外围设备 TXFIFO、确保如果没有有效的 SPI 数据、则您发送的数据为0x00。

    您使用 CS 来控制每个 SPI 外设的启用还是禁用? 我认为、使用 CS 更容易处理 POCI、只需在每个 SPI 级的 M0中添加更多 Tx 处理功能。

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

    是的,我已经读过…

    我填充 FIFO:

    DL_SPI_enablePackaging (SPI_0_INST);
    DL_SPI_transmitData32 (SPI_0_INST、0);
    四个主器件读数为零、但在这之后、我将数据从...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当控制器向目标器件发送数据时、目标器件还会将数据发送回控制器、这是正常的 SPI 工作流程。

    因此、如果您要在控制器发送数据期间将 MISO 保持为低电平、可以首先用0x00来填充目标 FIFO。

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

    这正是我在上面所做的。

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

    我看到 MSPM0发出了一些0x00、您是否希望进入 MSPM0和 M0的 SPI 输出引脚的所有 SCLK 在接收数据期间保持低电平?

    也许您需要检查 TXFIFO 状态、如果该状态为空、则需要使用0x00继续填充 TXFIFO。

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

    这似乎没有道理。

    如果我用全零填充 FIFO、这是我的做法、那么当 FIFO 为空时、我希望它发送 FIFO 中的最后一个字节。

    它不应发送某个随机值。

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

    我认为 PACKEN 选项无法正常工作。 我不太确定(我没有尝试)如果您设置它会发生什么情况:

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1412230/mspm0g3507-spi-controller-to-transmit-18bit-spi-frame

    我大概记得、当 FIFO 为空时、它会循环使用 FIFO 存储器。

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

    谢谢 Bruce ...你描述的 FIFO 操作是有意义的;所以,如果我填充它的所有零*一次*那么它也应该喷出所有零的时间。

    我会尝试填充另一种方式。

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

    这似乎有效:

    SPI_0_INST->TXDATA=0
    DL_SPI_transmitData16 (SPI_0_INST、0);
    DL_SPI_transmitData16 (SPI_0_INST、0);
    一旦 TXFIFO 为空(我想)、它就会捕捉 TXDATA 中的任何内容??
    因此、我需要 将此值显式设置为零以及将 FIFO 设置为零。
    如果你看附件,你现在可以看到我得到所有零(忽略干扰)。