目录

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、通信过程

  1. 主机发送起始信号启用总线
  2. 主机发送一个字节数据指明从机地址和后续字节的传送方向
  3. 被寻址的从机发送应答信号回应主机
  4. 发送器发送一个字节数据
  5. 接收器发送应答信号回应发送器
  6. ........ (循环步骤4、5)
  7. 通信完成后主机发送停止信号释放总线

第4步和第5步用的是发送器和接收器,不是主机和从机,这是由第一个字节的最后一位决定主给从发,还是从给主发。

也就是说,第一个字节和最后的停止信号一定是主机发给从机,但中间就不一定了。

发送数据过程中不允许改变发送方向(除非重启一次通信,详见后文典型I2C时序(3)部分)。

3、寻址方式

I2C总线上传送的数据是广义的,既包括地址,又包括真正的数据。

主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,‘0’表示主机发送数据给->从机,‘1’表示从机发送数据给->主机。

总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器。

4、起始信号和停止信号

SCL为高电平时,SDA由高变低表示起始信号;

SCL为高电平时,SDA由低变高表示停止信号;

起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线被释放,处于空闲状态。

空闲时,SCL与SDA都是高电平。

停止情况有两种:

  1. 主机不想发了,就发送停止信号;
  2. 从机不想接了,不应答,主机就发送停止信号结束此次通信。

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时序)相关推荐

  1. IIC(I2C)协议详解

    1.简介 IIC,即I²C,全称 Inter-Integrated Circuit,字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫 集成电路总线 ,它是一种串行通信总线,使用多 ...

  2. FPGA ——I2C总线 原理详解

    目录 I2C传输模式 同步总线&异步总线 I2C硬件 I2C总线协议 I2C数据写流程 I2C数据读流程 I2C总线为PHILIPS公司推出的串行通信总线,具有接线少,控制方式简单,通信速率高 ...

  3. 细说汽车电子通信总线之CAN 2.0 总线协议详解

    引言 1. CAN总线发展历史与ISO规范 2. CAN总线主要功能特性 3. CAN 2.0总线协议的物理层电气特性 4. CAN 2.0总线协议消息报文详解 4.1 CAN2.0总线的通信报文帧格 ...

  4. 细说汽车电子通信总线之LIN总线协议详解

    内容提要 1. LIN总线概述 1.1 LIN总线特点及发展历史 1.2 LIN 总线协议的物理层(收发器) 2. LIN总线报文帧结构(Message Frame Structure)详解 2.1 ...

  5. can总线不加末端电阻_细说汽车电子通信总线之CAN 2.0 总线协议详解

    引言 1. CAN总线发展历史与ISO规范 2. CAN总线主要功能特性 3. CAN 2.0总线协议的物理层电气特性 4. CAN 2.0总线协议消息报文详解 4.1 CAN2.0总线的通信报文帧格 ...

  6. 五种通信总线协议详解

    基础: UART硬件连接 UART控制器 一般情况下处理器中都会集成UART控制器,我们使用UART进行通信时只需要对其内部的相关寄存器进行设置即可 Exynos4412下的UART控制器(Exyno ...

  7. UART总线协议详解

    文章目录 1.UART概念 1.1硬件连接 2. RS232总线协议 2.1硬件连接 3. RS485总线协议 3.1硬件连接 1.UART概念   UART(Universal Asynchrono ...

  8. AMBA总线—AHB总线协议详解

    文章目录 一.AMBA总线介绍 1.1.AMBA发展史 1.2.典型的AMBA系统 二.AHB总线(宏观构造) 2.1.AHB总线组成 2.2.AHB总线组成互连 2.3.AHB操作概述 2.4.AH ...

  9. 【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析

    一. I2C标准协议流程 1. I2C协议--规定命令 开始:当SCL为高电平时,SDA从高电平向低电平切换 停止:当SCL为高电平时,SDA从低电平向高电平切换 应答(ACK):发送侧发送完8bit ...

  10. LIN总线协议详解7(LIN帧收发的硬件实现)

    帧收发的硬件实现 目录 帧收发的硬件实现 一.组成 二.协议控制器 1.协议控制器介绍 2.实现方法 三.总线收发器 1.实现方案 2.采用IC厂家的集成方案 四.LIN 总线 五.时钟源 六.EMI ...

最新文章

  1. DAY74-Django框架(五)
  2. 简单介绍python迭代器和生成器
  3. EventBus in SAP UI5 and Kyma
  4. 微信小程序设置底部导航栏目方法
  5. Android应用开发—TabLayout定制化Tab样式
  6. image pil 图像保存_使用PIL保存图像
  7. ScrollView 里面嵌套 listview 使得listview只显示一行问题解决
  8. 设计模式综和实战项目x-gen系列一
  9. css background背景拉伸
  10. Chrome浏览器下载
  11. 基于python的电影推荐系统论文_一种电影推荐系统的设计与实现
  12. 计算机一级考试基本操作是什么,计算机一级等级考试试题基本操作总结
  13. i219v微星 驱动_intel英特尔网卡驱动下载-intel英特尔i217/i218/i219系列网卡驱动电脑版 - 极光下载站...
  14. Python利用fitz库提取pdf中的图片(针对多种类型pdf)
  15. java实现 洛谷 P1427 小鱼的数字游戏
  16. Windows 系统引导过程
  17. 单片机C语言GRB888和RGB565的互相转换
  18. 7段并行数码管显示实验C语言,七段数码管显示十进制数字 (15)
  19. 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
  20. manster网易云音乐大数据分析

热门文章

  1. 编程时,如何在vs中更换舒服的代码字体
  2. 那些让您相见恨晚的app
  3. 解析音视频网络传输技术之一
  4. mysql字符串查询_mysql字符串查询常用命令
  5. 目前大数据工具主要哪些?
  6. 数据结构课程设计-(三)哈夫曼编码器
  7. 值得收藏的微软Windows系统蓝屏代码大全以及修复方法
  8. plc组态编程需要学多少c语言,快速学习PLC编程,其实很简单!
  9. Nodejs写的搬家工具知识分享
  10. 计算机二级考试公共基础知识都是一样的吗,计算机二级公共基础知识全国一样吗?...