I2C驱动

简介

I2C驱动由I2C核心,I2C总线驱动和I2C设备驱动组成.I2C核心是I2C总线驱动和I2C设备驱动的中间枢纽,以通用的,与平台无关的接口实现了I2C中设备与适配器的沟通.I2C总线驱动填充i2c_adapter和i2c_algorithm结构体,I2C设备驱动填充i2c_driver结构体并实现本身所对应的设备类型驱动

I2C体系结构

1.I2C核心
提供I2C总线驱动和设备驱动的注册,注销方法,I2C通信上次与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等
2.I2C总线驱动
是对I2C硬件体系结构中适配器端的实现,主要包含I2C适配器数据结构i2c_adapter,I2C适配器的Algorithm数据结构i2c_algorithm和控制I2C适配器产生通信信号的函数,可以控制I2C适配器以主控方式产生开始位,停止位,等等
3.I2C设备驱动
是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,主要数据结构i2c_driver和i2c_client

Paste_Image.png
代码目录

1.i2c-core.c
实现I2C核心的功能以及proc/bus/i2c*接口
2.i2c-dev.c
实现I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备,i2c-dev.c只提供了通用接口
3.busses文件夹
包含I2C主机控制器的驱动
4.algos文件夹
实现I2C总线适配器的通信方法

重要数据结构:i2c_adapter,i2c_algorithm,i2c_driver和i2c_client
1.i2c_adapter与i2c_algorithm
i2c_adapter对应于物理上的一个适配器,而i2c_algorithm对应一套通信方法,一个I2C适配器需要i2c_algorithm提供的通信函数来控制适配器产生特定的访问周期,i2c_adapter包含i2c_algorithm
2.i2c_driver和i2c_client
i2c_driver对应于一套驱动方法,如probe,remove等,i2c_client对应于真实的物理设备,每个设备都需要一个i2c_client描述,i2c_driver与i2c_client是一对多,i2c_device_id的id_table是该驱动所支持的I2C设备的ID表
3.i2c_adapter与i2c_client
i2c_client依附于i2c_adapter,一个适配器可以连接多个i2c设备

Linux I2C核心

主要函数:
增加/删除i2c_adapter
int i2c_add_adapter(struct i2c_adapter *adap)
void i2c_del_adapter(struct i2c_adapter *adap)
增加/删除i2c_driver
int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
void i2c_del_driver(struct i2c_driver *driver)
I2C传输,发送和接收
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,int num)
int i2c_master_send(struct i2c_client *client, const char *buf, int count)
int i2c_master_recv(struct i2c_client *client, char *buf, int count)

linux I2C适配器驱动

涉及函数:
xxx_i2c_probe(..)
xxx_i2c_remove(...)
数据结构of_device_id,platform_driver

linux i2c设备驱动

数据结构i2c_driver
函数:
__init xxx_init(void)
__exit xxx_exit(void)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Linux i2c system I2C总线是由PHILIPS公司开发的两线式串行总线,每个连接到总线的器件都可以...
    Creator_Ly阅读 1,897评论 0 8
  • i2c总线协议: 历史:是飞利浦公司在80年代,为研发音视频模块的通讯而产生。因其具有的诸多优点,而沿用至今。 优...
    ibo阅读 1,492评论 1 1
  • 1 参考资料 1.\marsboard\marsboard-a20-linux-sdk-v1.2\linux-su...
    wit_yuan阅读 1,468评论 0 1
  • 硬件准备:树莓派3,安装rasbian系统的内存卡(这里用rasbian举例),支持IIC协议的OLED屏幕,杜邦...
    追梦Y少年阅读 13,426评论 0 6
  • 在我看来,“人格魅力”最重要的三点体现是什么? 1.言行一致。喜欢钱就去挣钱,喜欢权就去弄权,喜欢名就去图名。 2...
    石三英语阅读 186评论 0 0