1.IIC介绍

IIC:飞利浦公司  通信方式:串行同步半双工

IIC只有两根线  CLK时钟线   SDA数据线

请求应答协议:

Linux下的IIC_位或

IIC所支持的地址位数一般为7(偏多)或者10个地址    跟一位读写标志位

起始信号:时钟线高电平,数据线为低电平

结束信号:时钟线为高电平,数据线为高电平

应答信号:(不一定必须有应答信号)在一次数据传输过程后,时钟线为高,数据线为低表示一个应答。

注意:时钟线为高时刻,此时数据线的数据为读取。当时钟线为低电平时期,数据线可以发生跳变。


支持多主多从--支持多个主机和多个从机相互通信,通过设备地址来确定具体和哪个设备通信

设备地址:7 位或 10 位设备地址,常见的都是 7 位地址

在设备地址后跟一位数据,该位数据表明主机对从机的读写方式: 0--写 1--read

Linux下的IIC_位或_02

硬件IIC最高传输速率400kbit/s--普通情况下100kbit/s

2.Linux下IIC

eg:EXYNOS4412 有 9 路多主从 IIC 总线(8 路通用,1 路 HDMI 专用),开发板引出一路 IIC 接口--》IIC0

支持的 7 位从机地址

8 位数据传输

支持中断或轮询事件

使用硬件 IIC,时序不用管,只需要做对应配置即可

3.IIC总线API

BH1750 挂载到 i2c 总线上, 内核有 i2c 总线,分别设备端和驱动端

设备端: 获取适配器(也就是挂载的i2c 总线)

struct i2c_adapter *i2c_get_adapter(int nr)

形参: nr : 0 表示 设备在 i2c0 总线上

创建 I2C 设备

struct i2c_client * i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)

形参:infor:

Linux下的IIC_数据传输_03


驱动端:

创建驱动端

Linux下的IIC_开发板_04



int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)

形参: adap: i2c 总线 在探测函数的第一个形参中

Linux下的IIC_开发板_05

msgs:消息内容

Linux下的IIC_数据传输_06

num:msgs 个数