我正在使用 S32K148EVB 板。
软件使用:
- FreeRTOS
- SPI 从机(spi_pal 与 lpspi0 使用 DMA)
- Spi 从机的附加输出引脚 PTA30 请求主机启动 SPI
通信
- Spi 从机的附加输入引脚 PTA6,连接到 SPI CS 引脚并配置为中断
从 Slave 向 Master 发送数据工作正常。
使用 PTA6 中断检测 CS 引脚变化工作正常。
我们的应用程序协议以值为 0x55 的 1 个字节和可变长度(有效载荷中指示的长度)开始。
对于接收,我正在调用 API SPI_SlaveTransfer(SPI_INSTANCE, slave_send, slave_receive, BUFFER_SIZE) 并等待主机轮询 SPI。
问题是我们事先不知道主机将发送的数据包的大小。
因此,除非接收到所有字节,否则不会触发 spi 回调。
什么是我们案例的最佳解决方案(能够接收任何长度、任何时间)?我们是否应该在读取 DMA rx 缓冲区之前等待 CS 被禁用?
我希望尽可能避免修改 SDK 中提供的 spi_pal 和 lpspi 驱动程序。