Page 1 of 1

esp32的spi半双工的问题

Posted: Wed Jun 03, 2026 2:56 am
by szsheep
背景:
我的一个mcu通过spi (mosi,miso,clk,cs) + gpio连接esp32c3,然后我使用的是esp32 spi半双工的协议。

现象:

我目前使用spi半双工的segmenet模式,初始化的时候,我就初始化16个桶并用spi_slave_hd_queue_trans连续加了16个。 开机后,主机假设第一次连续执行了2次 (WRDMA + WR_DONE)事务操作后,接下来,我再让主机再次执行一样的2次(WRDMA+WR_DONE)的事务操作。 结果如下:

第一次的2次操作, 从机调用spi_slave_hd_get_trans_res都能获得正确的数,每次都正确。
第二次的2次操作,从机调用spi_slave_hd_get_trans_res,获得第一次数据是错误的数据,第二次数据才正确。
而且,从第一次过后,以后所有的WRDMA+WRDONE事务连续操作的数据,第一次收到的都是错误的,后面的就正确。


实在找不到有什么地方导致,难道第一次操作后,dma需要什么状态恢复?请大家帮忙