내 Cubieboard2 spi는 64바이트보다 작은 배열에서는 제대로 작동하지만 64바이트보다 큰 배열에서는 "작업이 허용되지 않음" 오류가 발생합니다.
dmesg 출력:
[spi-err] sun7i_spi_handler: spi0 ERR comes, irq status = 0x00003f01
[spi-err] sun7i_spi_handler: spi0 master mode error: txFIFO overflow/rxFIFO underrun or overflow
[spi-err] sun7i_spi_xfer: spi0 cpu transfer data time out
[spi-err] sun7i_spi_xfer: spi0 xfer failed
제 생각에는 SPI의 DMA에 문제가 있는 것 같습니다. 장치 트리에 아무 작업도 수행하지 않았으며 arch/arm/boot/dts/ 디렉토리가 존재하지 않습니다. 또한 irq 상태를 확인하여 irq 상태의 비트 13이 1임을 확인했습니다.
Arch/arm/mach-sun7i/include/mach/spi.h에서:
#define SPI_STAT_RO (0x1 << 5) /* rxFIFO overflow, 0: rxfifo is available;1:rxfifo has overflowed! */
#define SPI_STAT_RU (0x1 << 6) /* rxFIFO underrun,fectch data with no data available in FIFO */
#define SPI_STAT_TO (0x1 << 13) /* txFIFO overflow 0:not overflow;1:overflow */
#define SPI_STAT_ERR (SPI_STAT_TO|SPI_STAT_RU|SPI_STAT_RO) //Slave mode,no SPI_STAT_TU
이 문제를 해결하는 방법을 알려주십시오. 나는 이 일에 2주 동안 매달렸습니다.
답변1
내 잘못. 이전 Kbuild 파일에는 SPI_SUNXI_NDMA가 있었고 SUNXI를 SUN7I로 대체했으며 SPI_SUN7I_NDMA가 아닌 SUN7I_SPI_NDMA를 작성했어야 했습니다.