I2C总线协议详解(特点、通信过程、典型I2C时序)
目录
1、I2C总线简介
2、通信过程
3、寻址方式
4、起始信号和停止信号
5、 字节传送与应答
6、同步数据信号
7、时钟同步与仲裁
(1)时钟同步
(2)仲裁
8、典型I2C时序
(1)主机向从机发送数据
(2)从机向主机发送数据
(3)主机先向从机发送数据,然后从机再向主机发送数据
1、I2C总线简介
I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化了PCB布线,降低了系统成本,提高了系统可靠性,因此在各个领域得到了广泛应用。
I2C总线是一种多主机总线,连接在 I2C总线上的器件分为主机和从机。主机有权发起和结束一次通信,从机只能被动呼叫;当总线上有多个主机同时启用总线时,I2C也具备冲突检测和仲裁的功能来防止错误产生;每个连接到I2C总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(但同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;I2C总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器。
I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也有利于标准化和模块化,缩短开发时间。
I2C总线上可挂接的设备数量受总线的最大电容400pF限制。
串行的8位双向数据传输速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。
总线具有极低的电流消耗,抗噪声干扰能力强,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。
2、通信过程
- 主机发送起始信号启用总线
- 主机发送一个字节数据指明从机地址和后续字节的传送方向
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送应答信号回应发送器
- ........ (循环步骤4、5)
- 通信完成后主机发送停止信号释放总线
第4步和第5步用的是发送器和接收器,不是主机和从机,这是由第一个字节的最后一位决定主给从发,还是从给主发。
也就是说,第一个字节和最后的停止信号一定是主机发给从机,但中间就不一定了。
发送数据过程中不允许改变发送方向(除非重启一次通信,详见后文典型I2C时序(3)部分)。
3、寻址方式
I2C总线上传送的数据是广义的,既包括地址,又包括真正的数据。
主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,‘0’表示主机发送数据给->从机,‘1’表示从机发送数据给->主机。
总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器。
4、起始信号和停止信号
SCL为高电平时,SDA由高变低表示起始信号;
SCL为高电平时,SDA由低变高表示停止信号;
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线被释放,处于空闲状态。
空闲时,SCL与SDA都是高电平。
停止情况有两种:
- 主机不想发了,就发送停止信号;
- 从机不想接了,不应答,主机就发送停止信号结束此次通信。
5、 字节传送与应答
I2C总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器,即一帧共有9位。
I2C每次发送数据必须是8位。
MSB固定,先发高位,再发低位。
6、同步数据信号
I2C总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。
7、时钟同步与仲裁
(1)时钟同步
时钟同步是通过I2C总线上的SCL之间的线“与”(wire-AND)来完成的,即如果有多个主机同时产生时钟,那么只有所有master都发送高电平时,SCL上才表现为高电平,否则SCL都表现为低电平。
线“与”特性由开漏电路实现。如果控制开漏输出INT为0,低电平,则VGS >0,N-MOS管导通,使输出接地,若控制开漏输出INT为1 (它无法直接输出高电平) 时,则N-MOS 管关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。正常使用时必须外部接上拉电阻。也就是说,若有很多个开漏模式引脚(C1、C2....)连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平,0 伏。
(2)仲裁
总线仲裁与时钟同步类似,当所有主机在SDA上都写1时,SDA的数据才是1,只要有一个主机写0,那此时SDA上的数据就是0.
一个主机每发送一个bit数据,在SCL为高电平时,就检查SDA的电平是否和发送的数据一致,如果不一致,这个主机便知道自己输掉了仲裁,然后停止向SDA写数据。也就是说,如果主机一致检查到总线上数据和自己发送的数据一致,则继续传输,这样在仲裁过程中就保证了赢得仲裁的master不会丢失数据。
输掉仲裁的主机在检测到自己输了之后也就不再产生时钟脉冲,并且要在总线空闲时才能重新传输。
仲裁的过程可能要经过多个bit的发送和检查,实际上两个主机如果发送的时序和数据完全一样,则两个主机都能正常完成整个数据传输。
注意:多个主机仲裁时,因为线“与”特性,谁低谁能强制SDA为低,也就是跟自己匹配,所以先高(高电平1)的那个就会仲裁失败。
8、典型I2C时序
(1)主机向从机发送数据
(2)从机向主机发送数据
(3)主机先向从机发送数据,然后从机再向主机发送数据
注:S:起始信号,A:应答信号,A非表示非应答,P:终止信号,
阴影部分表示数据由主机向从机传送,无阴影部分表示从机向主机发送数据。
数据传输中间如果想转换发送方向,不用发P停止信号,就不会释放总线,直接再发起始信号。
怎么发起始信号,怎么发停止信号,这些都不用关心,由I2C控制器完成,我们使用的时候只需要正确配置控制器相应的寄存器就可以了。
参考学习视频:
https://www.bilibili.com/video/BV1WK4y1o7rd?p=7
https://www.bilibili.com/video/BV1264y1y7oX?from=search&seid=4461481906739954380&spm_id_from=333.337.0.0
I2C总线协议详解(特点、通信过程、典型I2C时序)相关推荐
- IIC(I2C)协议详解
1.简介 IIC,即I²C,全称 Inter-Integrated Circuit,字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫 集成电路总线 ,它是一种串行通信总线,使用多 ...
- FPGA ——I2C总线 原理详解
目录 I2C传输模式 同步总线&异步总线 I2C硬件 I2C总线协议 I2C数据写流程 I2C数据读流程 I2C总线为PHILIPS公司推出的串行通信总线,具有接线少,控制方式简单,通信速率高 ...
- 细说汽车电子通信总线之CAN 2.0 总线协议详解
引言 1. CAN总线发展历史与ISO规范 2. CAN总线主要功能特性 3. CAN 2.0总线协议的物理层电气特性 4. CAN 2.0总线协议消息报文详解 4.1 CAN2.0总线的通信报文帧格 ...
- 细说汽车电子通信总线之LIN总线协议详解
内容提要 1. LIN总线概述 1.1 LIN总线特点及发展历史 1.2 LIN 总线协议的物理层(收发器) 2. LIN总线报文帧结构(Message Frame Structure)详解 2.1 ...
- can总线不加末端电阻_细说汽车电子通信总线之CAN 2.0 总线协议详解
引言 1. CAN总线发展历史与ISO规范 2. CAN总线主要功能特性 3. CAN 2.0总线协议的物理层电气特性 4. CAN 2.0总线协议消息报文详解 4.1 CAN2.0总线的通信报文帧格 ...
- 五种通信总线协议详解
基础: UART硬件连接 UART控制器 一般情况下处理器中都会集成UART控制器,我们使用UART进行通信时只需要对其内部的相关寄存器进行设置即可 Exynos4412下的UART控制器(Exyno ...
- UART总线协议详解
文章目录 1.UART概念 1.1硬件连接 2. RS232总线协议 2.1硬件连接 3. RS485总线协议 3.1硬件连接 1.UART概念 UART(Universal Asynchrono ...
- AMBA总线—AHB总线协议详解
文章目录 一.AMBA总线介绍 1.1.AMBA发展史 1.2.典型的AMBA系统 二.AHB总线(宏观构造) 2.1.AHB总线组成 2.2.AHB总线组成互连 2.3.AHB操作概述 2.4.AH ...
- 【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
一. I2C标准协议流程 1. I2C协议--规定命令 开始:当SCL为高电平时,SDA从高电平向低电平切换 停止:当SCL为高电平时,SDA从低电平向高电平切换 应答(ACK):发送侧发送完8bit ...
- LIN总线协议详解7(LIN帧收发的硬件实现)
帧收发的硬件实现 目录 帧收发的硬件实现 一.组成 二.协议控制器 1.协议控制器介绍 2.实现方法 三.总线收发器 1.实现方案 2.采用IC厂家的集成方案 四.LIN 总线 五.时钟源 六.EMI ...
最新文章
- DAY74-Django框架(五)
- 简单介绍python迭代器和生成器
- EventBus in SAP UI5 and Kyma
- 微信小程序设置底部导航栏目方法
- Android应用开发—TabLayout定制化Tab样式
- image pil 图像保存_使用PIL保存图像
- ScrollView 里面嵌套 listview 使得listview只显示一行问题解决
- 设计模式综和实战项目x-gen系列一
- css background背景拉伸
- Chrome浏览器下载
- 基于python的电影推荐系统论文_一种电影推荐系统的设计与实现
- 计算机一级考试基本操作是什么,计算机一级等级考试试题基本操作总结
- i219v微星 驱动_intel英特尔网卡驱动下载-intel英特尔i217/i218/i219系列网卡驱动电脑版 - 极光下载站...
- Python利用fitz库提取pdf中的图片(针对多种类型pdf)
- java实现 洛谷 P1427 小鱼的数字游戏
- Windows 系统引导过程
- 单片机C语言GRB888和RGB565的互相转换
- 7段并行数码管显示实验C语言,七段数码管显示十进制数字 (15)
- 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
- manster网易云音乐大数据分析