主题中讨论的其他器件:TMDSEVM437X
您好!
我在 TMDSEVM437X 评估板上使用 SPI1接口。
在单个块中发送的字节少于160个时、它都按预期工作。 在这种情况下、驱动程序使用 PIO 模式。
对于160字节或更多字节、驱动程序使用 DMA 模式、至少这是目的。 然而、CS0变为低电平、SCLK 保持低电平、D1 (MOSI)保持高电平、并且驱动器在此状态下挂起。
经过大量的阅读和实验、仍然不清楚如何启用 DMA 的魔法。 希望有人能让我走上正确的轨道。
编辑:更新了后续帖子中的详细信息。
我可以看到、驱动程序在txrxdone
以下标志上一直旋转:
static unsigned omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer, struct dma_slave_config cfg, unsigned es) { /* ... */ ret = mcspi_wait_for_completion(mcspi, &mcspi->txrxdone); /* ... */ }
以下是一些图、其中展示了该问题以及用于测试的命令:
root@am437x-evm:~# spi-pipe -d /dev/spidev1.0 -m 0 -s 100000 -n 1 -b 8 < /dev/urandom > /dev/null
root@am437x-evm:~# spi-pipe -d /dev/spidev1.0 -m 0 -s 100000 -n 1 -b 159 < /dev/urandom > /dev/null
root@am437x-evm:~# spi-pipe -d /dev/spidev1.0 -m 0 -s 100000 -n 1 -b 160 < /dev/urandom > /dev/null
命令挂起
为避免疑义、在 DTS 中注释的两行即 DMA 被禁用的情况下、可以在一个块中传输多达4096个字节、而没有明显的问题。