我们正在研究 ST32MP1。当
电路板在工程模式下工作时,SPI3 可以与结合了 DMA2 和 FIFO 的 CubeMX 软件一起正常工作。但是如果我执行由 Linux 加载的相同软件(rproc 启动),如果我使用函数 HAL_SPI_Transmit_DMA() 而不是使用 HAL_SPI_TransmitReceive_DMA(),则 DMA2 SPI 流停止工作。例如,如果要传输的字节数大于 33,则 DMA 将在 NDTR DMA 寄存器中的字节数处停止。
在工程模式下,这可以在相同的设置下正常工作。我测试了很多(链接器、堆栈、内存、FIFO 开/关...),但不知道为什么在 M4 only 模式下,一切正常。此外,如果我占用 30 个字节,则第一批数据由 DMA 传输,然后 SPI_ISR 被更新大约 15 次以发送其余数据......对于 40 个字节,DMA IRQ 是一个,但在大约 15 个字节之后并且不调用 SPI IRQ。
有点好奇,但实际上,我不知道仅在生产模式下使用传输会出现什么问题。
有任何想法吗?