- 论坛徽章:
- 0
|
在2.4下面调用SPI驱动进行数据传送,用以下的方式打开spi设备,然后直接调用读写函数。结果提示无法打开设备。
testSPI = open("/dev/spi",O_RDWR,O_NDELAY); if ( testSPI == -1 )
{
printf("Cann't open device spi \n");
return 0;
}
当用testSPI = open("/dev/spi",0,O_RDWR,O_NDELAY);时可以没有报错打不开设备。0可以为1,2,3
当用testSPI = open("/dev/spi/0",O_RDWR,O_NDELAY);时可以没有报错打不开设备。
这种情况下能检测到NPCS0上的片选波形和SPCK波形,可是在执行write的情况下,MOSI同样没有输出,这是怎么回事?
在linux下查看用ls命令dev目录,显示如下
[root@AT91RM9200DK /dev]$ls
spi
用ls -l spi命令显示如下:
[root@AT91RM9200DK /dev]$ls -l spi
crw------- 1 root root 153, 0 Jan 1 00:00 0
crw------- 1 root root 153, 1 Jan 1 00:00 1
crw------- 1 root root 153, 2 Jan 1 00:00 2
crw------- 1 root root 153, 3 Jan 1 00:00 3
用上面的方式写了个程序打开设备,再读写,然后用示波器看SPI片选波形,什么么都没有,压根没任何反映。这是怎么回事啊?
疑惑:
1,次设备号需要这么传进去吗?还是这个0根本在这部代表次设备号?open("/dev/spi",0,O_RDWR,O_NDELAY);
2,总觉得调用spi总得对它进行必要的配置吧,驱动也应该以ioctl的形式提供一个接口啊,可是看了哈驱动里面什么都没有
static int spidev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
int spi_device = MINOR(inode->i_rdev);
if (spi_device >= NR_SPI_DEVICES)
return -ENODEV;
switch(cmd) {
default:
return -ENOIOCTLCMD;
}
}
请各位高手指点指点!谢谢各位了!
[ 本帖最后由 yjz98 于 2009-6-4 22:13 编辑 ] |
|