1.IIC介绍
IIC:飞利浦公司 通信方式:串行同步半双工
IIC只有两根线 CLK时钟线 SDA数据线
请求应答协议:
IIC所支持的地址位数一般为7(偏多)或者10个地址 跟一位读写标志位
起始信号:时钟线高电平,数据线为低电平
结束信号:时钟线为高电平,数据线为高电平
应答信号:(不一定必须有应答信号)在一次数据传输过程后,时钟线为高,数据线为低表示一个应答。
注意:时钟线为高时刻,此时数据线的数据为读取。当时钟线为低电平时期,数据线可以发生跳变。
支持多主多从--支持多个主机和多个从机相互通信,通过设备地址来确定具体和哪个设备通信
设备地址:7 位或 10 位设备地址,常见的都是 7 位地址
在设备地址后跟一位数据,该位数据表明主机对从机的读写方式: 0--写 1--read
硬件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:
驱动端:
创建驱动端
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
形参: adap: i2c 总线 在探测函数的第一个形参中
msgs:消息内容
num:msgs 个数