如下图所示,在 LPSPI DMA 模式下发生了意外的 CS 切换。
帧大小为 8 位,默认配置下 DMA 传输大小为一个字节。SPI 波特率为 10 Mbps。
绿色信号代表 CS,在使用 " Keep " 选项时,CS 应在传输过程中保持钳位状态。然而,它却意外地发生了切换。在中断模式下,CS 保持钳位状态。此外,使用基于 GPIO 的 CS 而不是 PCS,在不切换的情况下也能正常工作。
这种现象在波特率较高时比在波特率较低时出现得更频繁,这表明原因可能是 SPI 端 TX 欠运行。
我试着启用散点采集模式和调整 SPI 时序,但都没有解决问题。
我认为,默认 DMA 配置可能不具备处理高速 LPSPI 传输的能力。
请问如何解决 CS 意外切换的问题?
谢谢。
BRs,
Alex Yang
我共享 Mobis 的 arxml 文件。
热电阻版本为 4.0.0_HF04(适用于HKMC)
@DanNguyenDuy
我分享 Mobis 的 LPSPI DMA 配置屏幕截图。在捕获的图像上,使用的频道名称是 Vsp。
你好@alexyang、
你使用了哪个软件包版本?
能否将您的示例或配置文件(.xdm 或 .arxml文件)?
顺祝商祺!
丹
你好@alexyang、
1.我查看了配置,没有发现任何问题。
2.因为我没有 S32K314,所以我在 S32K344 上检查了这个问题,我这边没有发现这个问题(传输过程中 PCS 保持低电平)。
3.能否检查调用前后 LPSPI2_TCR 寄存器的值
Spi_AsyncTransmit() 函数?
顺祝商祺!
丹
CS 切换的原因似乎是 TX FIFO 空了,因为 TX 水印降低了 CS 切换率。
不过,这一改动并没有完全解决 CS 切换问题。在 TX 水印的基础上,您还有什么其他建议可以完全防止 CS 切换?
此外,如果TX watermark = 0 是 Lpspi_ErrataHandle() 函数之后的意外动作,您是否有计划进行修正?Autoever 希望得到 NXP 对 TX 水印处理的确认,并在需要修正时得到 NXP 的补丁计划。
谢谢。
BRs,
Alex Yang
你好@alexyang..、
在联系 RTD 团队之前,我希望他们尝试两种测试方案:
顺祝商祺!
丹
@DanNguyenDuy
TCR[CONT] 已设置,因此这不是 CS 意外切换的原因。
我对 LPSPI 的 TX 水印有疑虑,据我估计,这可能是 TX FIFO 空的原因。
在 Lpspi_Ip_Init 中将 TX 水印设置为 2,如下所示。
但是,ERR_IPV_LPSPIV2_0001 的 Lpspi_ErrataHandle(Base,State)将其设置为 0,据我估计,这是意料之外的操作。
因此,在我的审查中,ERR_IPV_LPSPIV2_0001 解决方法意外地使 TX 水印为 0。另一位客户 Autoever 也报告了这一情况。
在 Autoever 报告中,发生了 SPI TX 欠运行,Autoever 发现 Lpspi_TransmitTxInit 清除了 TX 水印。因此,Autoever 通过添加"Base->FCR = LPSPI_FCR_TXWATER((uint32)LPSPI_IP_FIFO_SIZE_U8-(uint32)2u);" ,将 TX 水印返回到 2,从而减少了 TX 欠运行。
您如何看待 TX 水印?TX 水印为 0 是否会导致 DMA 意外切换 CS?
你好@alexyang、
在我看来,TX 水印等于 0 会导致此问题。我建议你在测试时提高 Dma 中断的优先级,并在 Lpspi_ErrataHandle() 函数 后添加一条语句,将 TX 水印修改为 3(最大值) 。
顺祝商祺!
丹