YTM32B1ME0 SPI Slave DMA 是否支持连续双缓冲或 Ram Reload?
未解决
YTM32B1M系列
-
使用环境:
- MCU:YTM32B1ME0
- SDK:1.4.1
- SPI3 Slave,Mode 0,8-bit
- DMA:TX Channel 0、RX Channel 1
- Master 时钟约 8 MHz
- 每次 CS 完成固定 512 Byte 全双工传输,Master 可能连续发起下一帧
目前使用
SPI_DRV_SlaveTransfer()。查看 SDK 实现发现,RX DMA 完成后,SPI_DRV_SlaveCompleteDMATransfer()会先调用SPI_DRV_SlaveAbortTransfer(),然后才调用应用层的SPI_EVENT_END_TRANSFER回调。应用在回调中再次调用SPI_DRV_SlaveTransfer()装载下一组 TX/RX buffer。这样在相邻两个 CS transaction 之间会有一段 Slave DMA 未装载的窗口。长时间连续通信时,Master 偶发收到整帧
0xFF;如果 Master 等待 MCU 重新装载完成后再发下一帧,则不会出现。想请教:
- YTM32B1ME0 的 SPI Slave DMA 是否有官方 continuous、ping-pong、double-buffer、queue 或 descriptor ram-reload 接口,使当前帧结束后自动切换到下一组 TX/RX buffer,中间不 Abort、不关闭 DMA、不清 FIFO?
- 通用 DMA 驱动已有
DMA_DRV_ConfigRamReloadTransfer(),是否有与 SPI Slave 正式集成的官方 Demo、SDK补丁或推荐配置?应用层不希望绕过 SPI Driver 直接操作 DMA/SPI 寄存器。 - 如果当前 SDK 不支持连续 Slave DMA,官方推荐的用法是否是增加一根 READY GPIO:Slave 完成后先 deassert READY,在任务上下文重新调用
SPI_DRV_SlaveTransfer(),成功后再 assert READY,Master 每一帧发送前都等待 READY? - SPI Slave 的
SPI_EVENT_END_TRANSFER回调运行在 DMA ISR 上下文。是否允许在该回调中立即再次调用SPI_DRV_SlaveTransfer()?如果不允许,建议的最小安全重装流程是什么?
希望能提供适用于 YTM32B1ME0 SDK 1.4.1 的官方接口名称、示例或补丁,谢谢。
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...