Linux I2C总线应用编程
1-1、I2C硬件框架
①在一个SOC内部,有一个或多个I2C控制器(master)
②在一个I2C控制器上,可以有一个或多个I2C设备(slave)
③I2C总线只需要两条线:SCL(串行时钟线)、SDA(串行数据线)
④在I2C总线的SCL、SDA线上,都有上拉电阻
1-2、 I2C软件框架
以I2C接口的存储设备AT24C02为例:
APP:
①提出要求:把字符串"www.100ask.net"写入AT24C02地址16开始的地方
②它是大爷,不关心底层实现的细节
③它只需要调用设备驱动程序提供的接口
AT24C02驱动:
①它知道AT24C02要求的地址、数据格式
②它知道发出什么信号才能让AT24C02执行擦除、烧写工作
③它知道怎么判断数据是否烧写成功
④它构造好一系列的数据,发给I2C控制器
I2C控制器驱动
①它根据I2C协议发出各类信号:I2C设备地址、I2C存储地址、数据
②它根据I2C协议判断
2-1、I2C协议的硬件连接
I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线
在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻
线与的功能(开漏输出)
将多个开漏输出的引脚连接到一条线上,这样就形成“线与逻辑”关系。注意这个公共点必须接一个上拉电阻。当这些引脚的任一路变为逻辑0后,开漏线上的逻辑就为0了。在I2C等接口总线中就用此法判断总线占用状态。