I2C协议——I2C框图和I2C通信过程

article/2025/8/16 21:39:11

1.软件模拟和硬件模拟的概念

       所谓软件模拟,即直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平。如控制产生 I2C 的起始信号时,先控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL线切换为低电平,这样就输出了一个标准的 I2C起始信号。

       而硬件 I2C 是指直接利用 STM32 芯片中的硬件 I2C 外设,该硬件 I2C 外设跟 USART串口外设类似,只要配置好对应的寄存器,外设就会产生标准串口协议的时序。使用它的I2C 外设则可以方便地通过外设寄存器产生 I2C 协议方式的通讯,如初始化好 I2C 外设后,只需要把某寄存器位置 1,那么外设就会控制对应的 SCL及 SDA 线自动产生 I2C起始信号,而不需要内核直接控制引脚的电平。

       硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。在本开发板中,由于 STM32RCT6 芯片引脚较少,资源比较紧张,在设计硬件时不方便使用硬件 I2C 指定的引脚连接外部设备(EEPROM 存储器芯片),所以在控制程序上只能使用软件模拟 I2C 的方式。

2.I2C框图

I2C功能框图

       ①通讯引脚

       有三个引脚:SDA、SCL、SMB,这三个引脚是在有I2C硬件结构的STM32单片机才有的引脚,没I2C硬件结构的单片机都是用的普通GPIO口进行软件模拟的。

②时钟控制逻辑
在这里插入图片描述

       SCL线的时钟信号,由I2C接口根据时钟控制寄存器(CRR)控制,控制的参数主要为时钟频率。
       可选择I2C通讯的“标准/快速”模式,这两个模式分别对应I2C的100Kbit/s和400Kbit/s的通讯速率。
       在快速模式下可选择SCL时钟的占空比,可选Tlow/Thigh=2或Tlow/Thigh=16/9模式。
       Thigh就是SCL线输出的高电平的时间,Tlow就是SCL线输出的低电平的时间。一个SCL的时钟周期就是Thigh+Tlow,在标准模式下,SCL的时钟周期就等于Thigh+Tlow=2CCRTpclk1,要配置具体数值的SCL时钟周期,可以将SCL时钟周期带进公式,算出CCR的值,然后就可以配置SCL的时钟周期。
       CCR寄存器中12位的配置因子CCR,它与I2C外设的输入时钟源共同作用,产生SCL时钟。STM32的I2C外设输入时钟源为PLCK1(AHB1时钟,最大32MHz)。
时钟控制寄存器
时钟控制寄存器计算时钟频率:

       ③数据控制逻辑

在这里插入图片描述

       I2C的SDA信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、PEC寄存器以及SDA数据线。数据寄存器作为缓存的功能,方便STM32存储或接收。当STM32作为从机时,STM32会从SDA线接收由主机发送的从机地址,然后将从机地址和自身地址寄存器或双地址寄存器相比较(这两个寄存器都是存储自身地址,之所以存在两个寄存器,可能是I2C为了同时处理两个设备),比较相同后才能对主机做出应答。PEC寄存器是用来做数据校验的,但是很少使用。

       当向外发送数据时,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过SDA信号线发送出去。
       当从外部接收数据时,数据移位寄存器把SDA信号线采样到的数据一位一位地存储到“数据寄存器”中。

       ④整体控制逻辑

在这里插入图片描述
整体控制逻辑主要控制整个I2C的工作模式和工作状态,具体的理解可以结合I2C的通信过程来理解。

3.I2C通信过程

       使用I2C外设通信时,在通信的不同阶段它会对“状态寄存器(SR1及SR2)”的不同数据位写入参数,通过读取这些寄存器标志来了解通信状态。

       ①主发送器(I2C主模式,写)

主发送器传送时序图
       将I2C_CR1寄存器的START位置1,就会产生起始条件,如果正常产生了一个起始信号,就会产生一个EV5事件,这时I2C_SR1寄存器的SB位就会变为1,所以可以通过读取状态寄存器(I2C_SR1)的SB位来判断起始条件是否产生。
       主发送器发送地址后,如果从设备产生了应答信号,就会产生EV6和EV8事件,EV6事件是I2C_SR1寄存器的ADD=1,这表示地址发送结束,EV8事件是TxE=1,也就是数据寄存器为空,数据寄存器为空就可以继续写入新的数据,这就是判断这些EVx事件的意义(即检测这些状态位的意义就是等待I2C将要发送的数据成功发送,然后才能进行下一步工作)。当产生EV8_2事件时,TxE=1,BTF=1,BTF=1表示数据移位寄存器为空,这样就表示所有数据都被发送出去了,然后就可以产生停止位,即将I2C_CR1寄存器的STOP位置1,结束这次通信。

       ②主接收器(I2C主模式,读)

主接收器传送序列图
       起始信号发送完成后就会产生一个EV5事件,然后发送从机地址,从机产生应答信号,产生EV6事件,和主发送器不一样的是,当主机读取从机的数据后,产生的应答是主机产生的,不是从机产生的,这个应答信号的产生是将I2C_CR1寄存器的ACK位置1,然后会产生一个EV7事件,EV7事件是RxNE=1,表示数据寄存器非空,即数据寄存器有数据了,这时候内核就可以将数据寄存器里的值送到内存变量中以供使用。ACk应答信号为1的时候就会继续从从机中读取数据,然后再产生ACK应答,循环往复,当不在接收数据时,就会产生一个EV7_1事件,这个事件是RxNE=1,并设置ACK=0和STOP位(将其置1),结束数据的发送,最后产生一个EV7事件,表示最后一个数据读取完成。

       还有要注意的就是,以上哪些状态位读取后都要将其清除,每个位的清除方法都不一样,具体方法可见上面EVx事件后面的描述。


http://chatgpt.dhexx.cn/article/QPOMaFCo.shtml

相关文章

通信协议——I2C协议/IIC协议解析

目录 I2C协议概述 I2C通信原理 I2C通信时序 I2C协议概述 同步通信 半双工(分时) 串行传输 电平信号 特点:①有两根传输线(时钟线SCL、双向数据线SDA) ②主从模式:通信双方为主设备(Master&…

I2C基础

I2C基础 1 基本介绍2 特点3 硬件连接4 通信4.1 控制器4.2 协议 5 SPI VS I2C 1 基本介绍 IC (Inter-Integrated Circuit)。内部集成电路。拥有两根线,一根数据线SDA和一根时钟线SCL。 这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻&a…

I2C总线协议

1. 简介 I2C (Inter-Integrated Circuit),是一种串行通信总线,用于连接微控制器及其外围设备,实现主控制器和从器件间的主从双向通信,是一种同步半双工通信(两端时钟频率一致,双向通信,但不能同…

I2C协议最细致的讲解

I2C通讯协议(Inter—lntegrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。 I2C物理层的特…

沧小海详解面试的必答题——I2C协议

目录 第一部分:I2C协议的概述 第二部分:I2C协议的阐述 第三部分:AT24C04简述 第四部分:基于verilog的程序设计(暂无) 对于大多从事FPGA行业的应届生来说,在面试过程中很可能会被问到关于I2C…

51单片机模拟I2C协议

什么是I2C 首先需要知道什么是I2C协议。I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息(摘自百度百科)。I2C主要有两条线,一条SDA数据线,一条SCL时钟线。由…

I2C协议原理讲解

一、物理层: 1、I2C通讯设备之间的常用连接方式: 2、特点: (1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中, 可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。 (2) 一个…

一文搞懂I2C协议-硬件基础

I2C是什么 I2C总线是由飞利浦在80年代初设计的,以允许位于同一电路板上的组件之间能够轻松通信。其大大简化了电路的设计,早期的电视机中很多地方用到了I2C这种通信方式。飞利浦半导体于2006年迁移到了NXP。I2C名称翻译为“ Inter IC”。有时&#xff0…

I2C协议+实现源码

文章目录 摘要I2C通信协议简介补充空闲状态start和stop信号应答信号数据有效性规定数据传输延时 I2C协议的实现源码硬件说明头文件sys.h 主函数初始化I2C产生开始和停止信号等待应答信号产生或不产生应答I2C写操作I2C读操作 对24C02操作24C02的时序图头文件初始化IIC接口写数据…

学习笔记8-I2C协议

目录 一、关于I2C二、硬件结构三、I2C协议3.1、I2C的三种状态3.2、数据有效性3.3、应答信号3.4、总线时序3.5、读写时序3.5.1、读3.5.2、写 3.6、死锁3.7、仲裁 四、软件I2C&硬件I2C五、AT24C02六、代码编写6.1、I2C初始化6.2、开始信号6.3、ACK/NACK信号6.4、发送1byte数据…

I2C 协议 代码详解

I2C 协议 最后代码已上传!!!!   代码文章链接    github 代码链接在该文章最后 I2C 简要介绍 I2C 总线(I2C bus,Inter-IC bus)是一个双向的两线连续总线,提供集成电路&#xf…

通俗易懂的I2C协议

关注v-x-公-众-号:【嵌入式基地】 后-台-回-复:【电赛】 即可获资料 回复【编程】即可获取 包括有:C、C、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料 I2C总…

I2C 协议图文解析

转自:https://blog.csdn.net/EastonWoo/article/details/52712826 i2c协议注意几点就很好的使用它: 1)由一个主设备,一个或多个从设备组成,所有的信号发起都是由主设备发起,从设备根据这些信号做一些应答。…

I2C协议---I2C时序图解析

一、I2C协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地 使用在系统内多个集成…

I2C协议——物理层和协议层

I2C协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)…

I2C协议详解

I2C协议详解 一、I2C协议简介 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件…

I2C协议概述

目录 IntroductionFeaturesStandard-mode, Fast-mode and Fast-mode Plus I2C-bus protocols1. SDA and SCL signals2. SDA and SCL logic levels3. Data validity4. START and STOP conditions5. Byte format6. Acknowledge (ACK) and Not Acknowledge (NACK)7. Clock synchro…

I2C协议(详细)

I2C通讯协议(Inter-Integrated Circuit)引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。实现I2C需要两根信号线完成信息交换&#xff…

【总线】I2C 通信协议

目录 I2C 总线协议概述 参数总结 I2C 的工作原理 寻址 读/写位 数据帧 I2C数据传输的步骤 具有多个从机的单个主机 具有多个从机的多个主机 I2C的优缺点 优点 缺点 文章参考 I2C 总线协议概述 I2C 总线广泛应用在 OLED 显示器、气压传感器或陀螺仪/加速度计模块的…

【数字IC】深入浅出理解I2C协议

深入浅出理解I2C协议 一、什么是I2C协议二、I2C,SPI,UART协议的区别三、I2C的信号线四、I2C的连接方式4.1 单主设备,单从设备4.2 单主设备,多从设备4.3 多主设备,多从设备 五、I2C的数据传输格式5.1 空闲位5.2 起始位5.3 地址位与读写控制5.4…