2268809_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2268809_zh-CN

2268809_zh-CN

S32K314 LPSPI - 在 DMA 下出现异常 CS toogle

你好@DanNguyenDuy

如下图所示,在 LPSPI DMA 模式下发生了意外的 CS 切换。

alexyang_0-1766638396051.png

帧大小为 8 位,默认配置下 DMA 传输大小为一个字节。SPI 波特率为 10 Mbps。

绿色信号代表 CS,在使用 " Keep " 选项时,CS 应在传输过程中保持钳位状态。然而,它却意外地发生了切换。在中断模式下,CS 保持钳位状态。此外,使用基于 GPIO 的 CS 而不是 PCS,在不切换的情况下也能正常工作。

这种现象在波特率较高时比在波特率较低时出现得更频繁,这表明原因可能是 SPI 端 TX 欠运行。

我试着启用散点采集模式和调整 SPI 时序,但都没有解决问题。

我认为,默认 DMA 配置可能不具备处理高速 LPSPI 传输的能力。
请问如何解决 CS 意外切换的问题?

谢谢。
BRs,
Alex Yang


RTDRe: S32K314 LPSPI - Unexpected CS toogle under DMA

@DanNguyenDuy

我共享 Mobis 的 arxml 文件。
热电阻版本为 4.0.0_HF04(适用于HKMC)

Re: S32K314 LPSPI - Unexpected CS toogle under DMA

@DanNguyenDuy

我分享 Mobis 的 LPSPI DMA 配置屏幕截图。在捕获的图像上,使用的频道名称是 Vsp。

alexyang_1-1766712372307.png

alexyang_2-1766712402162.png

alexyang_0-1766712585362.png

alexyang_1-1766712607621.png

alexyang_2-1766712649220.png

alexyang_3-1766712657986.png


Re: S32K314 LPSPI - Unexpected CS toogle under DMA

你好@alexyang

你使用了哪个软件包版本?

能否将您的示例或配置文件(.xdm 或 .arxml文件)?

顺祝商祺!

Re: S32K314 LPSPI - Unexpected CS toogle under DMA

你好@alexyang

1.我查看了配置,没有发现任何问题。

2.因为我没有 S32K314,所以我在 S32K344 上检查了这个问题,我这边没有发现这个问题(传输过程中 PCS 保持低电平)。

DanNguyenDuy_0-1766988650045.png

3.能否检查调用前后 LPSPI2_TCR 寄存器的值

Spi_AsyncTransmit() 函数?

  • 如果在发送过程中的任何时候 TCR[CONT] = 0,则 PCS 引脚将被置为高电平。
  • 否则,当 LPSPI 从 TX FIFO 空数据移位时,可能会出现此问题,因为在 FIFO 空之前,DMA 没有将数据传输到 TX FIFO。这种情况将触发信号 PCS,因为 LPSPI 会检测到终端传输信号,这看起来像是设计限制。

顺祝商祺!


Re: S32K314 LPSPI - Unexpected CS toogle under DMA

你好@DanNguyenDuy

CS 切换的原因似乎是 TX FIFO 空了,因为 TX 水印降低了 CS 切换率。
不过,这一改动并没有完全解决 CS 切换问题。在 TX 水印的基础上,您还有什么其他建议可以完全防止 CS 切换?


alexyang_0-1767336705906.png


alexyang_1-1767336768724.png

此外,如果TX watermark = 0 是 Lpspi_ErrataHandle() 函数之后的意外动作,您是否有计划进行修正?Autoever 希望得到 NXP 对 TX 水印处理的确认,并在需要修正时得到 NXP 的补丁计划。

谢谢。
BRs,
Alex Yang

Re: S32K314 LPSPI - Unexpected CS toogle under DMA

你好@alexyang..、

在联系 RTD 团队之前,我希望他们尝试两种测试方案:

  • 情况 1:在 Lpspi_ErrataHandle() 函数之后设置 Dma 优先级中断为最高,且 TX watermark = RX watermark = 3。
  • 场景 2:场景 1 + 禁用 RX DMA 并通过轮询方法接收数据。

顺祝商祺!


Re: S32K314 LPSPI - Unexpected CS toogle under DMA

@DanNguyenDuy
TCR[CONT] 已设置,因此这不是 CS 意外切换的原因。
我对 LPSPI 的 TX 水印有疑虑,据我估计,这可能是 TX FIFO 空的原因。

在 Lpspi_Ip_Init 中将 TX 水印设置为 2,如下所示。

alexyang_1-1767319532749.png

但是,ERR_IPV_LPSPIV2_0001 的 Lpspi_ErrataHandle(Base,State)将其设置为 0,据我估计,这是意料之外的操作。

alexyang_0-1767319360552.png

因此,在我的审查中,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?

Re: S32K314 LPSPI - Unexpected CS toogle under DMA

你好@alexyang

在我看来,TX 水印等于 0 会导致此问题。我建议你在测试时提高 Dma 中断的优先级,并在 Lpspi_ErrataHandle() 函数 后添加一条语句,将 TX 水印修改为 3(最大值) 。

顺祝商祺!

Tags (1)
No ratings
Version history
Last update:
‎01-03-2026 02:30 AM
Updated by: