linux i2c总线协议(一)

应用:
触摸屏
电源管理
摄像头(控制接口)

一种两线式总线协议
SCL: 串行时钟线
SDA: 串行数据线
总线上可以同时挂接多个器件
两种设备类型
主机: 初始化发送、产生时钟信号、终止发送
从机: 被寻址
两种角色
发送器: 发送数据到总线上
接受器: 接受数据、产生应答

起始与停止
SCL 线是高电平时,SDA 线从高电平向低电平切换,表示起始条件;
SCL 线是高电平时,SDA 线由低电平向高电平切换,表示停止条件。

起始和停止条件由主机产生。
 寻址
第一个字节的前7 位为从机地址,最低位是传输方向标志
0:主机向从机写数据
1:主机读取数据

 

字节格式
发送到SDA线上的每个字节必须为8 位,每次传输发送的字节数量不受限制;每个字节后必须跟一个响应位;首先传输的是数据的最高位(MSB)。

 应答
接收器接收到一字节后,必须产生应答(通过拉低SDA线);否则传输将终止。

例外:
如果主机作为接收方,在读取最后一个字节后,通过产生非应答(保持SDA为高电平)标志不再读取数据,接着发送停止条件,终止该次传输。

 

示例:主机向从机写2字节

示例:主机读取2字节

inux下的i2c驱动,通过struct i2c_msg描述一次传输                    /A  非应答,通知从机不再读取数据

addr  保存器件地址
flags   bit0保存读写标志位
len      要操作的数据长度
*buff   如果是写操作,指向发送数据的起始地址
  如果是读操作,指向返回数据的缓冲区


2. I2C 控制器

TWI_DATA  -- 数据寄存器
 写模式:保存需要发送的数据(包括从机地址)
 读模式:保存接收到的数据
 TWI_CNTR -- 控制寄存器
bit5:写1,控制器向总线上发送起始信号(获得总线控制权)
bit4:写1,控制器向总线上发送停止信号(释放总线控制权)
bit2:应答使能(读模式下使用)
 TWI_STAT -- 状态寄存器
 标示当前控制权状态

写模式:

读模式:

3. i2c驱动框架

分为3层:
 硬件控制层(i2c-sum.c)
注册总线控制器
初始化i2c_adapter
驱动总线控制器收发数据
处理i2c中断
 i2核心层(i2c-core.c)
维护adapter、client、driver
提供注册接口
提供通用的读写函数
   i2c_transfer
 驱动层
实现具体i2c设备的驱动

4. 硬件控制层

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值