1、基本概念
I2C的全称是Inter-Integrated Circuit,译为集成电路总线,是一种同步、双向、半双工的两线式串行接口总线。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。主设备通常是一个微控制器或微处理器,用来控制通信的启动和停止、时钟信号(SCL)的产生,以及数据传输;从设备则是等待来自主设备的命令并响应命令接收。
I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上,不同的I2C设备有不同的器件地址,主设备通过I2C设备的器件地址访问指定的I2C从设备,连接方式如下图:

I2C采用的开漏输出,SDA跟SCL两根线都需要加上拉电阻,当总线空闲时候两根线是高电平。I2C的优点在于其简单性、灵活性、易于集成、通信速度快、占用引脚少、连接简单等。然而,由于其半双工的工作方式,以及在同一总线上连接的设备数量有限,I2C在某些应用中可能不是最佳选择,也具有传输距离短、信号干扰大等缺点。
2、工作原理
I2C是一种双线总线,分别是时钟线SCL和数据线SDA。在正常工作中,总线协议有起始条件与停止条件。
起始条件:SCL为高电平,SDA由高电平变为低电平。
停止条件:SCL为高电平,SDA由低电平变为高电平。
起始跟停止条件由主机控制。当主机发出起始条件后,I2C总线会被认为忙碌状态。当主机发出停止条件后,I2C总线会被认为空闲状态。当主机发送一个重新起始条件替代停止位I2C总线也会被认为处于忙碌状态。

主机发出起始条件后,开始读取数据,但这里要注意的是数据的有效性。
数据有效性:SCL时钟线在高电平期间,SDA必须是稳定的。SCL时钟线在低电平时候SDA数据线才允许高电平或者低电平变化。每传送一个数据位产生一个时钟。

在数据传输时,SDA线上面的每个字节数据长度必须是8位。每次传输的字节不受限制,每个字节后面跟随着一个应答位,数据以高有效位传输。如果从机不能够接收数据或者传输一个完整的数据字节,直到他完成某些其他功能。例如一个内部中断,它可以保持SCL为低电平状态,迫使主服务器进入等待状态。当从机准备好接收数据后它会释放SCL时钟线数据继续传输。
-
单片机
+关注
关注
6060文章
44836浏览量
645296 -
嵌入式
+关注
关注
5127文章
19458浏览量
313607 -
开发板
+关注
关注
25文章
5435浏览量
101288 -
I2C接口
+关注
关注
1文章
133浏览量
25829
发布评论请先 登录
利用数字示波器调试嵌入式I2C总线
I2C总线介绍 I2C读写时序介绍

基于CPLD的I2C总线接口设计

基于嵌入式Linux演示I2C设备调试
I2C LCD 器件通过驱动带有 I2C 接口的 2 线式 16 字符 LCD

基于嵌入式Linux下的I2C设备驱动的总体思路与框架设计

I2C系列的合集,可以系统学习I2C协议
嵌入式linux应用读写i2c示例

物联网嵌入式软件中的I2C总线设计详解

ElfBoard嵌入式教育科普|UART接口全面解析

评论