当我尝试通过 i.MXRT 1062 MCU 上的 LPSPI 作为 SPI 主机进行
通信时,在使用连续传输命令(TCR.CONT 和 TCR.CONTC 集)与 TCR.TXMSK 时,我遇到了一些奇怪的行为。
所需的通信顺序:
这意味着实现(伪代码;当然,命令字已准备好,然后以原子方式写入 TCR):
- TCR = { 继续 = 1; FRAMESZ = 7(在 CPOL、PCS 等之间)}
- TDR = 要发送的字节
- TCR = { 继续 = 1; CONTC = 1; TXMSK = 1; 框架 = 31 }
- TCR = { CONTC = 1; TXMSK = 1; 框架 = 15 }
出乎意料的是,在第二次 TCR 访问(第 3 步)之后,传输立即开始,但在 32 个 SPI 时钟后并没有停止,而是不停地计时(通过设置 CR.DBGEN 可以清楚地重现,执行到第 3 步,并在之后停止TCR 写访问)。
随后,RX-FIFO 确实溢出,即使未
设置CFGR1.NOSTALL (这意味着,当接收 FIFO 已满时,传输应该停止)。
问题似乎没有发生,如果
- 下一个命令(见第 4 步)被推送到 TX FIFO,然后执行有责任的命令(我们对此 100% 确定)
- 不使用 TCR.TXMSK,而是通过 TDR 提供虚拟数据(我当前的解决方法)
对我来说,这看起来像是一个 LPSPI 问题。但是我在 RM 或芯片勘误表中找不到任何提示。
有没有更好的解决方案而不是解决方法?