хм! есть у меня подобная задача, вопросов не возникало софтовый фифо для SPI DMA в который пихаю данные такой структуры
typedef struct
{
gpio_set_t cs_pin;
uint8_t com;
uint32_t adr;
uint8_t *buf;
uint16_t size;
spi_func_t return_func;
bool *complete;
uint8_t mode;
} spi_data_t;
в прерывании по завершению приема-передачи DMA ? вытаскиваю из фифо и заряжаю на отправку