linux 2.6.x spi驱动,spidev,使用从设备

Links:  blog.csdn.net/lanmanck/archive/2009/08/18/4459699.aspx 基于atmel的spi模型,大家可以先看下这篇文章的分析: http://blog.chinaunix.net/u3/96265/showart_1925533.html 【转帖注明出处】http://blog.csdn.net/lanmanck 但是有的细节没有提到,我补充一下,不对请指出: 1、驱动中有总线和设备的概念。 spi控制器就是总线(spi总线),对应atmel_spi.c spi控制器上外接的芯片,比如串行flash、can收发器、时钟芯片等,就是设备。这就涉及到设备驱动的问题. 2、这些spi设备可以对应spidev.c,或者具体的文件. 比如说,我接的是flash芯片,那么可以定义spi_board_info 数组的时候指定: static struct spi_board_info at_spi_board_info_all_devices[] = { { /* DataFlash chip mc13783*/ .modalias = "mtd_dataflash", .chip_select = 0, //表示bus_num spi设备的片选号 .max_speed_hz = 20000000, .bus_num = 0, //表示用第几个spi .irq = INT_NUM_MIX1, }, } 注意这个modalias,这里定义为"mtd_dataflash",是因为mtd_dataflash.c这个驱动文件中定义的驱动名称为"mtd_dataflash",这两个名称也保持一致。 static struct spi_driver dataflash_driver = { .driver = { .name = "mtd_dataflash", .bus = &spi_bus_type, .owner = THIS_MODULE, }, .probe = dataflash_probe, .remove = __devexit_p(dataflash_remove), /* FIXME: investigate suspend and resume... */ }; static int __init dataflash_init(void) { return spi_register_driver(&dataflash_driver); } 又比如说我接的的ads7846触摸屏芯片,可以这样定义: { .modalias = "ads7846", .chip_select = 2, .max_speed_hz = 125000 * 26, /* (max sample rate @ 3V) * (cmd + data + overhead) */ .bus_num = 0, .platform_data = &ads_info, .irq = AT91SAM9261_ID_IRQ0, }, 这里的.modalias = "ads7846",也因为有了ads7846.c这个文件,否则设备驱动无法probe成功,这样/dev下面就看不到设备了. 3、那如果我不想写具体的芯片驱动,就用自带的spi总线驱动怎么办呢?比如我接了一个can收发器。这就要用到spidev.c了. 打开spidev.c就可以发现标准的ioctl/read/write函数,这就是对应用户层的read write函数了,那么 spi_board_info的modalias需要这样定义: .modalias = "spidev", //不想写从设备驱动的话,就必须指定为"spidev",因为spidev.c就是这个设备的probe函数,里面有read/write/ioctl 函数这样设备启动后就可以在/dev看到spidev0.0字样. 0.0 就是bus_num.chip_select.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值