I2C基础知识学习

1、I2C串行通信协议

采用串行总线技术可以使系统的硬件设计大大简、系统的体积减小、可靠性提高。同时,系统的更改和扩展极为容易。
单片机应用系统中常用的串行扩展总线有:IIC(Inter IC BUS)总线单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线等。

2、I2C总线概述

IIC(Inter-Intergrated Circuit)总线,也可以写作I2C,主要用于同一电路板内各集成电路模块(IC)之间的连接。采用双向两线制串行数据传输方式,简化了IC之间的通信连接。IIC协议由PHILIPS公司于二十世纪八十年代初提出,其后,PHILIPS和其他厂商提供了种类丰富的IIC兼容芯片。目前,IIC总线标准已经成为世界性的工业标准。各大半导体公司推出了大量的带有IIC接口的芯片,如RAM、EEPROM、Flash ROM、A/D、D/A转换、LED/LCD驱动、实时时钟等。

3、I2C总线特点

在硬件结构上,它采用数据(SDA)和时钟(SCL)两根线来完成数据的传输及外围器件的扩展,任何一个具有IIC总线接口的外围器件,不论其功能差别有多大,都具有相同的电气接口,因此都可以挂接在总线上,不需设计总线接口;增加和删减系统中的外围器件,不会影响总线和其他器件的工作,便于系统功能的改进和升级。
对各器件的寻址采用软寻址方式,因此节点上没有必须的片选线 ,器件地址完全取决于器件类型於单元结构,简化了IIC系统的硬件连接。
在这里插入图片描述

4、I2C总线的相关术语

①主机(主控器):在IIC总线通信时,提供时钟信号,对总线时序进行控制的器件 。主机负责总线上各个设备信息的传输控制,检测并协调数据的发送和接收。主机对整个数据传输具有绝对的控制权,其他设备只对主机发送的控制信息作出响应。如果在IIC系统中只有一个MCU,那么由MCU担任主机。
②从机(被控器):在IIC总线通信中,除主机外的其他设备均为从机。主机通过从机地址访问从机,对应的从机作出响应,与主机通信。从机之间无法通信,任何数据传输都必须通过对主机进行
③地址:每一个IIC器件都有自己的地址,以供自身在从机模式下使用。在标准的IIC中定义从机地址是七位(扩展IIC允许10位地址)
④发送器:发送数据到总线的器件
⑤接收器:从总线接收数据的器件
⑥SDA(Serial Data):串行数据线
⑦SCL(Serial Clock):串行时钟线

5、I2C总线通信协议

下图给出一个由MCU作为主机,通过IIC总线带3个从机的单主机IIC总线系统。这是最常用、最典型的IIC总线连接方式。
在这里插入图片描述
IIC总线系统上由一条串行数据线SDA和一条串行时钟线SCL组成。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,讲使总线的信号变低,即各器件的SDA及SCL都是线与关系

一、I2C总线的数据传送

1、IIC总线是以串行方式传输数据,I2C总线进行数据传送时,从数据字节的最高位开始传送,每一个数据位在SCL上都有一个时钟脉冲相对应。时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
在这里插入图片描述
2、起始、终止信号和应答与非应答

起实信号(START):如下图所示,当SCL为高电平时,SDA由高电平向低电平跳变,主机就向从机产生开始信号。当总线空闲的时候,主机通过发送(START)信号建立通信。
在这里插入图片描述
停止信号(STOP):当SCL为高电平时,SDA由低电平向高电平跳变,产生停止信号。主机通过发送停止信号,结束数据通信。

注意:
起始和终止信号都是由主机发出,在起始信号产生后,总线就处于被占用的状态,其他器件不能再产生开始信号。在终止信号产生后,总线就处于空闲状态。
连接到IIC总线上的器件,若具有IIC总线的硬件接口,则很容易检测到起始和终止信号。
在这里插入图片描述
应答信号(A):接收数据的IC在接收到8位数据后,向发送数据的IC发出的低电平脉冲应答。每一个数据字节后面都要跟一位应答信号,表示已经收到数据。应答信号在第9个时钟周期(SCL=1)出现,这时发送器必须在这一时钟位上释放数据线,由接收设备拉低SDA电平来产生应答信号。所以,一个完整的字节数据传输需要9个时钟脉冲。

非应答信号:如果接收设备保持SDA的高电平则产生非应答信号。
如果从机作为接收方向主机发送非应答信号,主机就认为此次数据传输失败;
如果是主机作为接收方,在从机发送器发送完一个字节数据后,发送了非应答信号,从机就认为数据传输结束,并释放SDA线,不论是以上哪种情况都会终止数据传输。
应答信号由接收器产生,总线上带有IIC总线接口的器件很容易检测到这些信号。

3、数据传送格式

IIC总线发送器送到SDA线上的每个字节必须位8位长,传送时高位在前,低位在后。与之对应,主器件在SCL线上产生8个脉冲,第9个脉冲低电平期间,发送器释放SDA线,接收器把SDA线拉低,以给出一个接收确认位(即应答信号);每传1个字节需要9个时钟脉冲。
在这里插入图片描述
4、主机向从机读写数据的过程

IIC总线上传送的数据是广义的,既包括地址信号,又包括真正的数据信号。
(1)主机向从机写入一个字节数据的操作过程
在这里插入图片描述
(2)主要要从从机读出1个字节数据的操作过程
在这里插入图片描述
5、从机的寻址约定

为了消除IIC总线系统中主控器与被控器的地址选择线,最大限度简化总线连接线,IIC总线采用了独特的寻址约定,规定开始信号后的第一个字节为寻址字节(从机地址),用来寻址被控器件,并规定数据传送方向。
寻址字节各位的定义:
D7~D1维组成从机的地址;D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据(规律:以主机看,高度低写)。
在这里插入图片描述
主控器发送开始信号后,立即发送寻址字节,这时,总线上的所有器件都将寻址字节中的7位地址与自己器件地址比较。如果两者相同,则该器件认为被主控器寻址,并发送应答信号,被控器根据读写位确定自身是作为发送器还是接收器。
从机的地址由固定部分和可编程部分组成。在一个系统中可能接入多个同类的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定为,3位是可编程位,这时仅能寻址8个同样的器件,即可以有八个同样的器件接入到该I2C总线系统中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章