Linux I2C
来源:互联网 发布:暴风影音软件 编辑:程序博客网 时间:2024/06/06 19:23
1.3
2. Linux I2C 结构分析
2.1 层次分析
1. I2C Core
static LIST_HEAD(adapters);
static LIST_HEAD(drivers);
I2C core提供接口函数,允许一个I2C adatper,I2C driver和I2C client初始化时在I2C core中进行注册,以及退出时进行注销。具体可以参见i2c_core.c代码。
同时还提供了I2C总线读写访问的一般接口(具体的实现在与I2C控制器相关的I2C adapter中实现),主要应用在I2C设备驱动中。
常用的主要是
i2c_master_send()
i2c_master_recv()
i2c_transfer()
2. I2C
总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在在那里,等待设备驱动调用其函数。
在系统开机时,首先装载的是I2C总线驱动。一个总线驱动用于支持一条特定的I2C总线的读写。一个总线驱动通常需要两个模块,一个struct i2c_adapter和一个struct i2c_algorithm来描述:
在 buses目录下的i2c-pxa.c中实现了PXA的I2C总线适配器,I2C adapter 构造一个对I2C core层接口的数据结构,并通过接口函数向I2C core注册一个控制器。I2C adapter主要实现对I2C总线访问的算法,iic_xfer() 函数就是I2C adapter底层对I2C总线读写方法的实现。同时I2C adpter 中还实现了对I2C控制器中断的处理函数。
1) i2c-pxa.c定义了i2c_algorithm,并且实现了master的发送函数i2c_pxa_xfer(),以及设备查询总线的模式的函数i2c_pxa_functionality()
};
2) i2c-pxa.c中,实现了i2c_adapter,主要是在定义pxa-i2c时进行初始化,并且i2c_pxa_probe()中进行填充parent指针,并且调用
ret = i2c_add_adapter(&i2c->adap);
进行添加。
};
总的来说,在i2c-pxa中,使用platform驱动模型,完成了i2c的总线两种模块struct i2c_adapter和struct i2c_algorithm
3. I2C device driver
I2C只有总线驱动是不够的,必须有设备才能工作。这就是I2C device driver的必要性。I2C的device是有两个模块来描述的,struct i2c_driver和struct i2c_client。
在介绍chips目录下的device driver前有必要介绍一下i2c-dev.c文件。
static struct i2c_driver i2cdev_driver = {
};
struct i2c_dev {
};
该文件提供了用户层对I2C设备的访问,包括open,read,write,ioctl,release等常规文件操作,我们可以通过open函数打开 I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过 read和write函数完成对I2C设备的读写操作。
};
注:通过I2C driver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的操作数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中完成对特定的数据格式的解释以及实现一些专用的功能。
在chips目录下包含着各种device 的driver,完成各种从设备的注册。作为一般的I2C设备,使用i2c-dev.c里的操作足够完成操作了。
当然如果不能完成,则需要独立完成该驱动,这就是chips目录下的代码。因为i2c-dev.c已经实现了I2C设备的文件操作接口,所以只要实现struct i2c_driver就可以了。对于某些特殊的操作,可以使用command接口进行控制。 当然,对于i2接口的fm芯片,则将struct i2c_driver放在i2c的chips目录下,而将另外fm操作相关的代码放在了/media/radio目录下了。在这个目录下需要完成读写接口的完成,这个大部分使用V4L2架构。
- linux i2c
- Linux I2C
- linux i2c
- linux i2c
- linux i2c
- Linux I2C
- Linux I2C子系统分析-I2C总线驱动
- Linux I2C子系统分析-I2C设备驱动
- Linux I2C子系统分析-I2C总线驱动
- linux I2C 驱动之---- i2c 编程接口
- Linux I2C子系统分析-I2C总线驱动
- Linux I2C子系统分析-I2C总线驱动
- Linux I2C子系统分析-I2C设备驱动
- Linux I2C工具查看配置I2C设备
- Linux I2C工具查看配置I2C设备
- Linux I2C工具查看配置I2C设备
- LINUX:i2c 驱动架构
- linux i2c驱动笔记
- extjs使用回车绑定查询按钮的两种方式
- How to use json with as3corelib in flex( JSON )
- i2总线驱动分析
- 函数分析
- 好几件事
- Linux I2C
- 1. I2C 协议
- MFC控件大小随窗体改变而改变
- 总结@ 在C# 中的用法
- 选择排序
- 数列的排列组合求解
- MINI2440i2c驱动学习二
- w3school学习7-jQuery CSS 操作
- supersocket 调试