关于2.6 的 spi驱动,spidev,使用从设备.
2009-08-18 16:41
267 查看
基于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这个文件,里面的probe函数用的名称就是"mtd_dataflash"
又比如说我接的的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.
这下各位有点明白了吧.
大家可以先看下这篇文章的分析:
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这个文件,里面的probe函数用的名称就是"mtd_dataflash"
又比如说我接的的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.
这下各位有点明白了吧.
相关文章推荐
- 关于2.6 的 spi驱动,spidev,使用从设备.
- 在Zynq 7000平台上使用Linux spidev.c驱动,调试spi设备
- 关于2.6 的 platform_data,以spi驱动说明之
- 应用程序和驱动中使用SPI设备的流程
- 应用程序和驱动中使用SPI设备的流程
- SPI驱动及设备节点使用讲解
- 关于2.6 的 platform_data,以spi驱动说明之
- linux 2.6.x spi驱动,spidev,使用从设备
- uClinux2.6(bf561)的NorFlash驱动实现分析(9): 驱动的使用
- linux 下spi的使用 ,cc2500模块驱动
- linux2.6字符设备驱动开发模板
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- Linux 下Altera SPI驱动使用
- CE设备驱动的页面使用
- 【转】linux2.6驱动-设备结构
- Android/Linux驱动开发之使用dev_dbg调试设备驱动
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 关于在iOS设备上探测WIFI,3G,GPRS使用情况的细节 .
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化