I2C学习笔记一

本文是I2C学习笔记的第一部分,介绍了I2C接口的基本概念,如两线接口SDA和SCL,以及7位和10位设备地址。讲解了内核加载I2C设备的过程,通过设备驱动与dts的交互建立设备与驱动的联系。详细阐述了I2C设备结构,并列举了数据收发的相关函数,包括i2c_transfer和smbus协议的读写操作。
摘要由CSDN通过智能技术生成

参考:http://blog.csdn.net/fanqipin/article/details/7940061

介绍

I2C(Inter-Intergratedcircuit)及子集smbus(system management Bus)接口是嵌入式系统中比较常见的接口。I2C设备主要有EEPROM,HWMON,RTC等。

I2C为两线接口,SDA和SCL。

I2C设备通常为7位地址,但也有10位地址。


在kernel加载时,会加载dts,遍历到dts文件中的i2c设备;

dts中至少包含设备名称和设备地址;

当设备驱动insmod时,driver中的name与dts中的name一致时,probe函数被调用,并将client传递给driver,如此设备与driver建立联系。

在probe中创建设备节点,供用户空间访问设备。

i2cdev->dev = device_create(i2c_dev_class, NULL, MKDEV(I2C_MAJOR, client->adapter->nr), 
NULL,"i2c-%d",client->adapter->nr);


目前linux仅支持master模式,不支持slave。
一般来说,我们都会按照I2C驱动框架,将操作I2C从设备的代码整合为一个从设备驱动,注册到I2C-CORE中,通过i2c core提供的adapter接口,与从设备进行通信。

i2c驱动架构中有4中角色:core、adapter、client_driver、client_device。
core负责维护i2c bus匹配已经存在的adapter/driver/client;
adapter负责master控制器,提供通信API
client_device:描述从设备的属性
client_driver:从设备驱动。

设备驱动主要围绕struct i2c_driver和 struct i2c_client结构。
i2c_driver对外提供诸如设备枚举、电源管理等回调;
i2c_client由core在probe时提供给driver,描述关联的设备,比如名称、地址等操作设备的必要信息。
驱动完成设备枚举后,拿到设备对应的i2c_client和i2c_adapter结构,就可以调用core的API访
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值