器件型号: MSPM0G1518
我将一个 SPI 外设配置为使用两个 DMA 通道进行发送和接收。 我始终看到一个非常短的 SPI 发送位、然后 SPI 外设似乎发生了位移。
我检查了勘误表、其中没有任何内容可以描述此错误。 我的第一个问题是为什么会发生这种情况? 第二个问题是在 CS 处于非活动状态时复位 SPI 外设的唯一恢复方法吗?
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.
器件型号: MSPM0G1518
我将一个 SPI 外设配置为使用两个 DMA 通道进行发送和接收。 我始终看到一个非常短的 SPI 发送位、然后 SPI 外设似乎发生了位移。
我检查了勘误表、其中没有任何内容可以描述此错误。 我的第一个问题是为什么会发生这种情况? 第二个问题是在 CS 处于非活动状态时复位 SPI 外设的唯一恢复方法吗?
尊敬的 Owen:
短脉冲不是噪声。 MOSI 和 MISO 的前两个字节应相同 — 0xAA55。 您可以看到第一个字节是正确的 — 0xAA、但第二个字节在该短脉冲之后向左移动位、之后的所有数据都向左移动 1 位。
我的 SPI 外设配置为三线、因为无法确定何时选择和取消选择 SPI、我需要在取消选择时设置发送缓冲器以准备下一个选择事件。 我有点惊讶、没有办法使用外设 ISR 来确定何时选择 SPI 以及何时取消选择 SPI。
我是否正确从这个位移状态中恢复的唯一方法是复位 SPI 外设?
您好 Rob、
感谢您的澄清。
短脉冲很有趣、让我想相信这是一个与 DMA 传输/填充 FIFO 的时序有关的问题。
您可以使用另一个 GPIO 引脚来监控 CS 线路、以确定外设当前是已选择还是已取消选择。 另一种方法是使用 DL_SPI_IIDX_IDLE 中断来确定 FIFO 是否已准备好填充。
如果您使用 3 线制 SPI 并且无法使用 CSCLR 功能、则复位 SPI 外设将是恢复移位寄存器计数器的唯一方法。
此致、
Owen
好的、我有更多信息、非常感谢 TI 提供的所有支持。
所附内容将 SPI 控制器的顶部布线捕获、SPI 外设的底部布线捕获。 SPI 外设是进行位移的接口。 下面是我目前所发现的:
1 — 如果两条 SPI 总线都在运行并且以大约 1Mbps 的速率输入/输出数据、则 SPI 外设位移位始终发生并且非常早。
2 — 如果我禁用 SPI 控制器、但保留其他所有内容(1Mbps SPI 外设)、则永远不会发生位移位。
下一步是在 SPI 外设时钟线上放置一个模拟探头。 这实际上解决了我的位移问题、因此这个问题肯定是一个信号完整性问题、我认为 SPI 控制器的一个或多个信号通过 SPI 外设的时钟传输并干扰 SPI 外设。 我们已经向 SPI 线路添加了串联电阻。
再次感谢 TI 提供的所有支持。
未来的 MSPM0 反馈 — 能够在 4 线模式下使用 SPI 外设会非常棒、这样我可以利用 CSCLR 功能、并在选择和取消选择 SPI 时能够中断。 除非我缺少某些内容、否则除了切换到 3 线模式之外、目前无法知道何时选择或取消选择 SPI、因此会丢失 CSCLR 功能并将 CS 引脚用作通用 GPIO。