I2C总线通信协议
(1)I2C概述
I2C(Inter-Intergrated Circuit)集成电路总线,该总线是由飞利浦公司在1980年代初设计出来的。主要是用来连接整体电路,是一种多向控制总线,也就是说多个器件可以连接到同一总线结构下,同时每个器件都可以作为实施数据传输的控制源。
I2C属于半双工同步串行通信方式。
(2)I2C硬件拓扑结构
I2C总线一般有两根线,一个是双向传输的数据线(SDA),另一个是时钟线(SCL),所有接到I2C总线设备上的串行数据线SDA都接到总线的数据线SDA上,各设备的时钟线SCL都接到总线的时钟线SCL上。硬件连接如下图1所示,数据线SDA与时钟线SCL都通过一个上拉电阻连接到电源,初始电平都为高电平,处于空闲状态。每个连接到I2C总线的元器件都有唯一的地址。
(3)I2C协议
I2C总线在数据传输过程中时钟线SCL始终由主机控制,数据传输期间共有三种信 产生:开始信 ,停止信 和应答信 。简单概况如下:
①数据有效性
在时钟线SCL高电平期间内,数据线SDA上的数据必须保持稳定,数据线SDA的数据仅允许在时钟线SCL为低电平时改变,如下图2所示。
②开始信
当时钟线SCL处于高电平期间,数据线SDA产生由高电平向低电平的跳变,如下图3所示。
③停止信
当时钟线SCL处于高电平期间,数据线SDA产生由低电平向高电平的跳变,如下图3所示。
④应答信
总线上的接收器每收到一个字节(8bit)就产生一个应答信 ACK。接收器拉低数据线SDA表示应答,并在应答脉冲期间保持稳定的低电平。若主器件作为接收器时,必须发送数据传输结束的信 给发送器,即它在接收最后一个字节数据的应答脉冲期间不会产生应答信 (NACK,不拉低数据线SDA),如下图4所示。
⑤数据帧格式
I2C总线传输的数据信 是广义的,既包括地址信 ,又包括真正的数据信 。在开始进行数据传输时,主机发出开始信 后,先传输一个器件地址(共7位,前4位是固定,后3位由硬件决定,即同一设备上可接8个同一器件)以及一位读/写位(”0″表示主机发送数据W,”1″表示主机接收数据R),再传输一个字节地址(8位,用来选择从器件内部的第几个字节读/写),最后传输数据。每次数据传输总是由主机发出停止信 而结束。
1)主机向从机发送数据(以E2PROM为例)
1、主机发送起始信 ;
2、主机发送从器件地址以及读/写位(”0″),主机释放总线,等待从器件应答;
3、主机发送需写入的内部寄存器地址,等待从器件应答;
4.、主机发送数据
5、主机发送停止信
6、E2PROM收到停止信 之后,内部进入写周期,大概需要5ms,此期间之内任何操作都不会被E2PROM响应(因此以这种方式的多次写入,需要插入一个延时,否则会导致失败);
注:阴影部分由主机向从机传送,无阴影部分表示从机向主机传送。A表示应答信 (低电平),ā表示非应答信 (高电平);START表示起始信 ,STOP表示停止信 。
2)主机向从机读取数据(以E2PROM为例)
1、主机发送起始信 ;
2、主机发送从器件地址以及读/写位(”0″),主机释放总线,等待从器件应答;
3、主机发送需写入的内部寄存器地址,等待从器件应答;
4、主机再次发送起始信 ,即Restart;
5、主机发送从器件地址以及读/写位(”1″),主机释放总线,等待从器件应答;
6、主机读取数据。主机在接收到最后一个字节数据后,不会发出应答ACK信 ,于是从器件释放数据线SDA,以允许主机发送停止信 ;
7、主机发送停止信
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115731 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!