主题 : Tiny210v2/Smart210 linux2.6.35.7内核SPI驱动问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 65934
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-03-24
最后登录: 2014-06-03
楼主  发表于: 2014-03-26 17:53

 Tiny210v2/Smart210 linux2.6.35.7内核SPI驱动问题

我的板子是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。
请教如何解决此问题????????