我的板子是Smart210,使用2.6.35内核。
内核选项
Device Drivers ---> [*] SPI support ---> <*> Samsung S3C64XX series type SPI
<*> User mode SPI device driver support
可以在/dev/下看到spidev0.0和spidev1.0
编译linux自带SPI测试程序,Documentation/spi/spidev_test.c,测试LOOPBACK,完全正常。
在SPI驱动spidev.c中,驱动向用户层提供的接口有: .open, .ioctl,.write,,read等等。
spidev_test.c中使用了ioctl发送数据,是全双工模式。
我修改spidev_test.c,使用write发送数据,当buffer长度小于64时,也没有问题。但是buffer长度大于64时,就会出错,打印”I/O Error: rx- tx- res:rx- tx- len- “ 。
查找原因,在drivers/spi/spi_s3c64xx.c里,handle_msg函数中,status = wait_for_xfer(sdd, xfer, use_dma);返回错误(在发送数据buffer长度大于64时,use_dma=1; 否则use_dma=0;)。由此可判断是DMA出错。
在3.0.8内核中没有这个问题。但是3.0.8的SDIO模块驱动有问题,所以只能用2.6.35。
请教如何解决此问题????????