历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2021年12月03日 | I2C协议——I2C框图和I2C通信过程

2021-12-03 来源:eefocus

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事件后面的描述。

推荐阅读

史海拾趣

API Technologies公司的发展小趣事

API Technologies一直注重技术创新和研发投入。公司不断引进先进的生产设备和技术人才,加大对新产品、新技术的研发力度。通过不断的技术创新,API Technologies成功推出了一系列具有自主知识产权的高性能产品,不仅提升了公司的核心竞争力,也为公司的持续发展注入了新的动力。

GE Solid State公司的发展小趣事
选择一个合适的光敏元件(如光敏电阻或光敏二极管)作为感光元件,以及必要的信号处理元件(如运算放大器、比较器等)和声音输出元件(如扬声器)。
Aptiv公司的发展小趣事

Aptiv一直秉持开放合作的理念,积极与产业链上下游企业开展创新合作。公司与多家科技公司、研究机构以及高校建立了战略合作关系,共同推动自动驾驶技术的研发和应用。通过共享资源、优势互补,Aptiv不仅加快了自身的发展步伐,还为整个电子行业的进步做出了积极贡献。

AC Photonics Inc公司的发展小趣事

随着技术的成熟,AC Photonics Inc开始积极拓展市场。公司不仅在国内建立了完善的销售网络,还积极开拓海外市场。同时,AC Photonics Inc还与其他知名电子企业建立了战略合作关系,共同推动光电技术在各个领域的应用。这些合作不仅提升了公司的知名度和影响力,还为公司的长远发展提供了有力支持。

GSN Electronics公司的发展小趣事

AC Photonics Inc公司自成立以来,一直致力于光电技术的研发与应用。在公司成立初期,研发团队在光子集成技术上取得了重大突破,成功开发出一种高效、稳定的光电转换器。这一技术的问世,不仅提升了数据传输的速度和稳定性,还大大降低了能耗,为公司的业务发展奠定了坚实的基础。随着这一技术的逐步推广和应用,AC Photonics Inc在电子行业中逐渐崭露头角。

ETAL公司的发展小趣事

作为一家有社会责任感的企业,ETAL始终关注社会公益事业。公司积极参与各种慈善活动和社会捐赠项目,为贫困地区的教育事业、环保事业等提供了力所能及的帮助。此外,ETAL还定期组织员工参与志愿服务活动,通过实际行动传递正能量和爱心。这些公益事业不仅提升了公司的社会形象,也增强了员工的凝聚力和向心力。

问答坊 | AI 解惑

基本功放问题,

我是一个才进入应用电子的学生,今年的学习是模拟电子技术,而老师的第一堂课就是这个图,要求我们今年做一个这个功放为成绩,但是我拿着这个电路是蒙的,撒意思都不懂(电容在里面干撒的...等等),麻烦大哥们给我解释这个电路(详细点)!!还有 ...…

查看全部问答>

FPGA业界第一种精度可调DSP模块体系结构

在实现复杂信号处理算法时,FPGA硬件数字信号处理(DSP)体系结构发挥了很大的作用。Altera Stratix®V FPGA 具有精度可调DSP模块体系结构,是能够有效支持包括浮点实现等多种不同精度级的唯一可编程器件。采用64位级联总线和累加器,设计人员不 ...…

查看全部问答>

telit模块ge863-gps问题~!

有没有熟悉此模块的大哥啊~小弟最近在用这个模块。用其内部的python编程接口。在采到gps信息,放入一个变量A当中后,我该怎样操作,才能将这些gps信息通过短信的方式发送出去啊。也就是短信内容,不需要自己输入,而是发送一个变量中的内容,该如何 ...…

查看全部问答>

不安全状态一定导致死锁状态吗?

不安全状态一定导致死锁状态吗? 不安全状态是指不存在任何一个安全序列,那最终结果将导致死锁吧, 有没可能当前处于不安全状态,有不会导致死锁呢? 我搜了搜,有的说一定会,一定说不一定,到底答案是什么?…

查看全部问答>

转让一些用不上的板子(多图)明码标价 也可交换

12864液晶模块,3块,每块40元     320240液晶显示模块,用的时间不超过一小时,50元   1.8液晶模块,做实验用的,带转接板 15元   智峰脱机下载器,95成新,用的时间不超过10个小时,100元(买的时候260元) ...…

查看全部问答>

MSP430学习笔记之十一:RF2500库

我这几天又有点忙,不过我有空还是搞了下EZ430-RF2500 看了下库: 觉得不错唉: 首先这个库可以在任何MSP430单片机上实现,设立这个库的目地就是为了RF2500能很方便地同MSP430单片机接口 传一下我找的资料从资料来看这个库很好理解,只要修下定 ...…

查看全部问答>

第三个无眠夜,参与的顶一顶?

本帖最后由 paulhyde 于 2014-9-15 03:58 编辑 累,困!!!!拼了  …

查看全部问答>

泰克:射频微波领域 我们是一定要进入的

    一个不容忽视的事实是,整个射频微波市场早已大过了示波器市场。这让某些测试测量厂商有点坐不住了。 “泰克一直就很想进入射频微波领域,我们一直在寻找机会。”泰克产品市场经理钱永先生说。      &nb ...…

查看全部问答>

VHDL实现高基乘法器

高基乘法器又称补码两位乘法,使用基4的布斯算法。…

查看全部问答>

提问+USBDongle 原理图哪里可以下载

想要用一下CC2540 USBDongle 的IO口,哪里有原理图哪里可以看一下啊 …

查看全部问答>