有没有esp32s2的例程DMA实现的SPI传输

djqlyy
Posts: 52
Joined: Wed Oct 23, 2019 12:46 am

有没有esp32s2的例程DMA实现的SPI传输

Postby djqlyy » Mon Dec 07, 2020 5:45 am

有没有esp32s2的例程DMA实现的SPI传输,IDF中有SPI的例程,哪个例程是实现中断的,哪个例程是实现DMA的?
还有SPI支持乒乓操作吗?
我预期的应用是SPI每收到512B就发一个中断,在现有的SPI_SLAVE例程中,是在循环中调用spi_slave_transmit(),什么时候收到了512B,我不知道啊,
1,如果这个是阻塞语句,由于配置的bus_size是512*8,当运行完成的时候是不是就是512B传输完成的时候?
当然就算答案是肯定的,显然这种实现也是不现实的,因为这会占用大量资源,我别的程序还跑不跑了?
2,如果用spi_slave_queue_trans(),再一直查询,可能比上面这个好一点,但我觉得也很不好啊,有中断吗?收到预定数量的数据发一个中断!!
Last edited by djqlyy on Wed Dec 09, 2020 8:06 am, edited 2 times in total.

djqlyy
Posts: 52
Joined: Wed Oct 23, 2019 12:46 am

Re: 有没有esp32s2的例程DMA实现的SPI传输

Postby djqlyy » Wed Dec 09, 2020 7:44 am

官方人士呢?国产当自强,服务也要跟上啊,这有问题没有理,指望谁?

TheFireDelight
Posts: 1
Joined: Wed Dec 09, 2020 10:44 am

Re: 有没有esp32s2的例程DMA实现的SPI传输

Postby TheFireDelight » Wed Dec 09, 2020 11:02 am

spi_slave的example是可以在s2上运行的,并且使用了中断和dma.

1. spi_slave_transmit()的最后一个参数可以设置timeout。如果设置为max,则收不到足够长度的数就会一直阻塞。如果不为max,在timeout内收不到足够长度的数会一直阻塞,timeout时间后解除阻塞。
2. spi_slave_transaction_t这个结构体中,有一个trans_len的成员。每次spi_slave_queue_trans()后,这个trans_len里面的是实际接收到的长度。

djqlyy
Posts: 52
Joined: Wed Oct 23, 2019 12:46 am

Re: 有没有esp32s2的例程DMA实现的SPI传输

Postby djqlyy » Thu Dec 10, 2020 1:14 am

谢谢您的回答,
不过spi_slave里面用的不是中断啊,收发都是在while循环里的!
另外您说“每次spi_slave_queue_trans()后,这个trans_len里面的是实际接收到的长度”这个trans_len是个只读信号,表示的是目前接收到的数据量吗??

我的应用是这样的:FPGA通过SPI一直给ESP32发数据,512B一个包,一直不停的发(20Mhz的时钟频率),ESP32收到1024B时,启动一次WIFI传输,将收到的数据通过WIFI发出去。我首先能想到的就是类似于STM32那种,设置DMA中断,收到1024B时产生一个DMA中断,启动一次处理,但在ESP32里没找到类似的功能,例程里一直在WHILE循环里进行传输,就算设置成队列的方式,好像也要不停的查询,这个感觉不大好,有什么好的办法吗?

Who is online

Users browsing this forum: No registered users and 135 guests