首页 > 其他分享 >STM32学习之通信协议2: I2C

STM32学习之通信协议2: I2C

时间:2025-01-02 19:28:54浏览次数:8  
标签:SCL 数据线 高电平 通信协议 总线 STM32 I2C 设备

I2C(Inter-Integrated Circuit)
一种串行数字总线接口,只有两根信号线,总线上可以连接多个设备,硬件实现简单,可拓展性强
在这里插入图片描述
在这里插入图片描述
SCL串行时钟线 : 在I2C通信中由主设备(如微控制器或处理器)产生,用于同步数据传输,确定数据传输的速率和时序,确保所有设备在SCL上保持同步,从而正确地进行数据传输‌
SDA串行数据线 : 用于在I2C总线上传输实际的数据位,数据传输是通过在SCL的时钟边沿上或下改变SDA的状态来实现的‌

I2C总线的两根信号线有上拉电阻。当I2C器件空闲时,其输出接口是高阻态。当所有设备都有空闲时,I2C总线上是高电平
即空闲状态时数据线和时钟线都处于高电平状态

在这里插入图片描述
在这里插入图片描述

解决了计算机一对多通信问题,挂载在I2C总线的所有外部模块都是从机,从机只有被主机点名之后才能控制I2C总线,不能在未经允许的情况下去碰I2C总线,防止冲突,任何时候都是主机完全控制SCL线

在这里插入图片描述

在这里插入图片描述
开始传递信息时,必须在时钟线为高电平期间,数据信号完成从高到低的跳变,也就是下降沿,这样起始信号就发送完成了
在这里插入图片描述

下图是一个标准的写数据帧
在这里插入图片描述
接下来是7位设备地址码,因为接入多个设备,每个设备地址码不同,为了区别要和哪个设备通讯,主机需要先控制数据线发7位地址码,为0/1的组合,128种结果。时钟线为1时,数据线要稳定为1,这样就完成一位数据的传输
在这里插入图片描述
在这里插入图片描述
比如上图1010000,是某个外设的地址,则此时单片机和该设备通讯

接下来是读 / 写数据位,写0 读1

下一位应答信号是从机(此时从机控制数据线,前面几位是主机控制,发完读写位,主机把数据线置回默认的高电平,此时SDA=1)发给主机的,从机收到之前的信息则回复0,没收到或读取完成回复1(因为两条线默认状态都是高电平1,从机拉低数据线,主机检测到变回 0 了就知道从机动了手脚,于是主机继续接管总线)
在这里插入图片描述

后面可以指定寄存器地址并在其中写入8位数据,停止信号与起始信号相反,SCL=1时,SDA来个上升沿
在这里插入图片描述

这样一个标准数据帧就完成了

读数据和写数据差不多,下面是一个标准的读数据帧:
在这里插入图片描述

区别在于,发完寄存器地址后,从机应答后,主机还需要发送一位起始位,然后再发送一次设备地址,并发送 1 表示读数据,接下来便是存储器的对应寄存器地址的数据发给单片机,最后应答信号为 1,表示读取完毕
在这里插入图片描述

发送端在高电平发送数据,接收端在高电平取数据
在这里插入图片描述
问题来了,如果某一时刻,有两个设备同时要发送数据,那会怎样?数据线上是高电平还是低电平?
在这里插入图片描述
为了搞清楚这个问题,我们先要知道芯片是如何输出高低电平的,芯片IO口内部一般会有两颗MOS管,上面导通就输出高电平,下面导通就输出低电平,如下图:
在这里插入图片描述
当两个芯片连在数据线上,一高一低,则形成通路,短路了,一定有一个会烧掉在这里插入图片描述
为了避免这样的情况发生,I2C总线对设备IO口进行了阉割,去掉了上面的MOS管(比喻意义,实际就是I2C总线时,我们将推挽输出换成开漏输出

在这里插入图片描述
不过这样带来了问题,芯片无法输出高电平了,解决办法是在SDA上接一个上拉电阻(这个电路电路其实就是GPIO开漏输出)

在这里插入图片描述
这样虽然有设备不满足,但起码不会有设备烧掉

( 那再多几个设备呢?C也在低电平呢?B和C又是如何,因为有设备地址所以互不打扰吗?)

题外话:上拉电阻的取值(一般几千欧)
1、太小:会导致芯片电流过大易烧毁,同时MOS管内的电阻有的也可能有100欧,这样会导致无法把总线电压拉低到低电平的状态;
2、太大:每个设备IO口对地总有一些寄生电容,芯片从低往高电平转变的过程中,会有一个充电过程,爬坡一样,电阻越大,越慢,易导致信号失真;所以,一般随着总线设备增加,会适当减少上拉电阻值,求稳的话要用示波器看下波形

因为使用了开漏输出和上拉电阻,I2C抗干扰能力比较弱,适用于同一块电路板上的芯片进行通信,不适合超过30CM的板间通信

在这里插入图片描述

///
//
江协科技对于收发的补充:

因为默认是高电平,在准备数据的时候SCL要为低电平,所谓释放就是SCL 回到高电平,一回就开始读写操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

///
学习资料来源:江协科技、爱上半导体、工科男孙老师

标签:SCL,数据线,高电平,通信协议,总线,STM32,I2C,设备
From: https://blog.csdn.net/qq_44114055/article/details/144858242

相关文章

  • RoboMaster电控 STM32开发环境搭建
     STM32介绍 开发方式介绍 CPU工作频率可以达到168MHz,基本可以满足比赛中所有的控制需求。stm32的主流开发方式包括寄存器开发,标准库开发,HAL库(LL库)开发。寄存器开发即直接控制32的寄存器,工程运行效率高,但是开发难度大,可读性与可移植性差;标准库开发即使用ST官方开源的一......
  • 单片机学习————STM32单片机入门(五)
    5.3.6外部时钟源特性来自外部振荡源产生的高速外部用户时钟下表中给出的特性参数是使用一个高速的外部时钟源测得,环境温度和供电电压符合表9的条件。 1.由设计保证,不在生产中测试。来自外部振荡源产生的低速外部用户时钟下表中给出的特性参数是使用一个低速的外部时钟......
  • 基于STM32的智能照明系统设计(论文+源码)
    1系统方案设计根据系统功能的设计要求,展开基于STM32的智能照明系统设计。如图2.1所示为系统总体设计框图。系统以STM32单片机作为主控制器,利用光敏传感器、红外传感器实现环境光照强度以及人体检测。只有当检测到环境中有人且光照强度低于阈值时,点亮LED灯进行补光照明。系统具......
  • STM32学习之 TIM定时器
    理论知识较多,由于51学过相关知识,不赘述,江协科技视频有详细解读,CSDN博主也有详细文案笔记,视频跳转、文案跳转//STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长......
  • 单片机学习————STM32单片机入门(七)
    5.3.12I/O端口特性通用输入/输出特性除非特别说明,下表列出的参数是按照表9的条件测量得到。所有的I/O端口都是兼容CMOS和TTL。 1.FT=5V容忍。2.施密特触发器开关电平的迟滞电压。由综合评估得出,不在生产中测试。3.至少100mV。4.如果在相邻引脚有反向电流倒灌,则漏......
  • 单片机学习————STM32单片机入门(六)
    5.3.7内部时钟源特性下表中给出的特性参数是使用环境温度和供电电压符合表9的条件测量得到。高速内部(HSI)RC振荡器 1.VDD=3.3V,TA=-40~105°C,除非特别说明。2.由设计保证,不在生产中测试。低速内部(LSI)RC振荡器 1.VDD=3.3V,TA=-40~105°C,除非特别说明。2.......
  • I2C通信协议基础知识
    I2C(Inter-IntegratedCircuit)是一种串行通信协议,最初由飞利浦公司(现为NXP半导体)在1980年代初期提出,广泛用于微控制器(MCU)与外部设备之间的低速通信。I2C协议的主要特点是其简洁的硬件设计,只需要两条线就可以进行数据通信,这使得它在很多嵌入式系统中得到了广泛应用。1.I2C协议......
  • 超低功耗段LCD液晶段码显示屏驱动芯片(ic)VKL128 LQFP44 I2C通信接口/可配置4种功耗模
    产品品牌:永嘉微电/VINKA产品型号:VKL128封装形式:SSOP44概述VKL128是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,可配置4种功耗模式,也可通过关显示和关振荡器进入省电模式。其高抗干扰,低功耗的特性适用于......
  • 资料DRV8210PDSGR 12V 电机驱动器、THGBMJG6C1LBAB7 高性能e-MMC存储器、LAN7800-I/Y9
    DRV8210PDSGR12V、1AH桥电机驱动器说明:DRV8210P是一款集成电机驱动器,具有4个N沟道功率FET、电荷泵稳压器和保护电路。三倍电荷泵架构允许该器件在低至1.65V的电压下工作,以适应1.8V电源轨和低电池条件。电荷泵集成了所有电容器,以减小PCB上电机驱动器的整体解决方......
  • 基于STM32设计的城市环境监测看板_287
    文章目录一、前言1.1项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2设计思路1.3系统功能总结1.4开发工具的选择【1】设备端开发【2】上位机开发1.5参考文献1.6系统框......