linux i2c总线协议(一)

来源:互联网 发布:spring 事务源码 编辑:程序博客网 时间:2024/06/07 01:03

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

一种两线式总线协议
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
原创粉丝点击