函数原型:
void *spi_bus_dma_memory_alloc(spi_host_device_t host_id,
size_t size,
uint32_t extra_heap_caps);
这个函数用于为 SPI 主机(SPI Host)分配一块可用于 DMA 传输的内存 buffer,这个函数只是“开辟一块 DMA 可用的内存”,至于给 TX 用还是给 RX 用,由用户决定。
普通buffer和DMA buffer的区别:
普通的buffer一般存在栈中,而DMA buffer是专门在SRAM中开辟的一块连续的堆 空间,提供给DMA访问,以避免CPU和DMA同时访问一块内存空间造成冲突。
函数使用示例:
uint8_t *tx_buf = spi_bus_dma_memory_alloc(SPI2_HOST, 64, 0);
uint8_t *rx_buf = spi_bus_dma_memory_alloc(SPI2_HOST, 64, 0);
有些IDF版本不具有这个函数;
在 ESP-IDF 5.x(尤其 5.1+)中,SPI DMA 的内存分配被统一为
heap_caps_malloc()
heap_caps_calloc()
heap_caps_aligned_alloc()
不再提供独立的 spi_bus_dma_memory_alloc()。
旧版 v4.x 中 SPI 会用到这个函数。

1266

被折叠的 条评论
为什么被折叠?



