您的位置:首页 > 运维架构 > Linux

Linux I2C驱动个人理解(一)

2016-12-01 14:18 267 查看
首先是i2c_driver,i2c_client,i2c_adapter,i2c_algorithm。这四个结构体至关重要,先来梳理一下关系以及作用。

1)i2c_adapter i2c_algorithm

i2c_adapter对应于物理上的一个适配器,i2c_algorithm为一个通信方法。i2c_adapter需要i2c_algorithm 提供的的通信函数来控制,所以i2c_adapter的中需要使用i2c_algorithm 的指针。i2c_algorithm 中最重要的函数master_xfer()也就是数据传输函数,需要用到一个结构体。

struct i2c_msg{
__u16 addr; //地址
__u16 flags;//标志
__u16 len; //长度
__u8 *buf; //数据

}

2)i2c_driver  i2c_client

i2c_driver重要提供了驱动方法:probe(),remove(),suspend(),resume()。i2c_client对应的是设备,简单的说你要有设备要连接板子,怎么连接的,用了哪些管脚就怎么写。

下面举个例子:

static struct i2c_boart_info __initdata sc2xx_i2c_board_info[]={

I2C_BOARD_INFO("xx_i2c",0x14),
.irq =IRQ_PF4,
...

}

3) i2c_adpater i2c_client

i2c_adpater与i2c_client的关系与I2C硬件体系中的适配器和设备关系保持一致。

********************************************************分割线***************************************************************

如何写一个I2C驱动:

1)提供一个I2C设备适配器的硬件驱动

2) 配置适配器,也就是说用algorithm来配置i2c_adapter 

3)具体实现i2c_driver的接口

4)也就是最后要的字符设备读写接口了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: