ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

I2C(inter-integrated circuit) 学习笔记

2021-08-02 10:01:47  阅读:416  来源: 互联网

标签:I2C circuit 应答 总线 传输 SDA 信号 inter


文章目录


前言

本片博文主要总结I2C 通信协议的相关知识,以及学习过程中的一些体会、遇到的问题,望可以帮助有需要的人。

笔记内容多为自己总结、心得,如有错漏不恰当之处望不吝指正。

一、I2C 是什么?

I2C(inter-integrated circuit)总线,是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

二、I2C 物理层

1.总线引脚定义

SCL: 串行时钟线,用于同步传送数据;
SDA: 串行数据线,用于传输数据;

2.物理层

I2C 通讯设备之间的常用连接方式如下图所示:
在这里插入图片描述
I2C 特点如下:
►支持多个设备的总线;

►总线由SCL、SDA总线组成,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步;

► 每个连接到总线的设备都有一个设备地址,用于主机与多个设备之间的选择性通信;

► 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平;

► 当多个主机同时使用总线时,使用仲裁方式决定哪个设备占用总线,防止数据传输冲突;

► 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式;

► 由于总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量;

3.协议层

I2C 协议层主要包含如下部分:
► 起始信号
► 数据传输
► 应答信号
► 停止信号

1)起始/停止信号

在这里插入图片描述
SCL = 1时,SDA存在四种状态:高电平、低电平、上升沿和下降沿,因此排列组合如下:

SCLSDA信号定义
1下降沿Start信号
1上升沿Stop信号
11数据1
10数据0

2)应答(ACK)信号

在这里插入图片描述
► I2C 数据传输 需要接收方响应信号,以指示数据是否正确收到;
► 响应信号传输位于第9个时钟,此时主机释放SDA控制权,由从机端控制SDA;
► 响应信号如下:
应答信号(ACK): SDA = 0;
非应答信号(NACK): SDA = 1;

3)数据传输

在这里插入图片描述
► SCL = 0 :允许SDA进行数据切换;
► SCL = 1 :锁定SDA状态输出(SDA = 1,则输出数据为1,SDA = 0,则输出数据为0);
► 数据传输以 字节为单位,

4)数据分类

传输的数据包含 地址字节和要传输的数据字节

【地址字节】
在这里插入图片描述
► I2C 协议规定设备地址可以是 7 位或 10 位,实际中 7 位的地址应用比较广泛;
► 先传输MSB,后传输LSB;
► 第8/11位为读写控制位:0:读/ 1:写;

【数据字节】
数据字节为要传输的数据,无特定格式;

4.通信示例

【字节写入 】
在这里插入图片描述
通信过程为:
► 主机发送Start信号;
► 开始传输设备地址,先传输MSB,后LSB,R/W位 = 0
► 从机收到设备地址,进行匹配,若匹配,则发送应答信号(ACK),否则保持不变;
► 主机收到应答信号,发送写入的地址和写入的数据;
► 从机接收到每个字节后,发送一个应答信号(ACK);
► 数据传输完成,主机发送Stop信号,结束本次传输;

【字节读取 】
在这里插入图片描述
通信过程为:
► 主机发送Start信号;
► 开始传输设备地址,先传输MSB,后LSB,R/W位 = 0
► 从机收到设备地址,进行匹配,若匹配,则发送应答信号(ACK),否则保持不变;
► 主机收到应答信号,发送要读取的数据的地址
► 从机接收到数据地址后,发送一个应答信号(ACK);
► 主机发送Start信号;
► 开始传输设备地址,先传输MSB,后LSB,R/W位 = 1
► 从机收到设备地址,进行匹配,若匹配,则发送应答信号(ACK),否则保持不变;
► 主机释放SDA控制权,从机接收SDA控制区,发送数据至主机;
► 主机收到数据后,无需发送ACK应答;
► 数据传输完成,主机发送Stop信号,结束本次传输;

Reference

[1] 《零死角玩转 STM32F103》 - 第24章 I2C—读写 EEPROM
[2] 《AT24C02》- ALL

标签:I2C,circuit,应答,总线,传输,SDA,信号,inter
来源: https://blog.csdn.net/qq_35701387/article/details/119315176

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有