0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于I2C协议介绍

CHANBAEK 来源:鱼香ROS 作者:小鱼 2023-07-13 15:04 次阅读

你好,我是爱吃鱼香ROS的小鱼。本节主要介绍I2C协议,并将其主要特点拎出来和大家说说。

教程所使用硬件平台为MicroROS学习板V1.0.0,可点击阅读原文购买及查看详情

图片

网上关于I2C协议介绍的有很多,但大都非常细致,将高低电平数据协议等等都介绍了,但新手学习时不用关注那么多底层的东西,比起了解通信原理,了解它是什么,怎么用对我们更加重要。

一、I2C是一种总线通讯协议

和之前我们介绍的串口通信类似,I2C也是一种通信协议。但它是一种总线通讯协议,也就是说,一个I2C可以连接多个设备,物理连接上像这样。

图片

那它串的设备数量有没有上限呢?有的,上限是127个。

那为什么我们都是用18和19来驱动OLED和MPU6050呢?原因很简单,他们都是连在同一跟线上。

上原理图

图片

ESP32这种引脚资源匮乏的单片机,引脚的复用就显得很重要了,这里我们就将OLED和MPU6050都接在同一个I2C上,减少引脚占用。

二、I2C是一种两线协议

在上几节我们驱动OLED和IMU的时候,都导入了"Wire.h",这个就是Arudino提供的好的头文件。我们使用的Wire的定义如下

TwoWire Wire = TwoWire(0);

TwoWire也就是两线的意思,两线也就是一个是SCL,一个是SDA

SCL即时钟线,以一个固定的周期进行电平变换,SDA即数据线,用于数据的传输,这样说有些抽象,小鱼用逻辑分析仪 截取了一段OLED初始化时的SCl(GPIO18)和SDA(GPIO19)上的电平变化 ,并分析出其对应的数据。

图片

再放大一些看

图片

可以直观的看到SCL在数据传输开始前一直保持高电平,SDA变成了低电平,这意为着数据传输的开始,也就是那个绿点的地方。

根据I2C协议规定:SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。

继续观察,你会发现,在 传输过程中SCL引脚电平在以一个固定的周期来回跳变 ,从机这边 当检测到SCL电平跳变后就开始读取SDA上的的电平,高记为1,低记为0 。所以你可以看到逻辑分析仪检测到 八个上升箭头,一共传输了八位数据,这八位数据用16进制表示就是0X3C 。

0X3C是什么,就是我们OLED的设备地址,所以这段信号的意思就是,我接下来要给0X3C的设备发数据了,请编号为0X3C的设备准备接收。

这个信号会被0X3C的设备接收和处理,而同一总线上ID非0X3C的接收到数据后就会将其扔掉,这就是I2C支持多个设备的核心原因。

在我们的开发板上,OLED的默认地址为:0X3C,IMU的默认地址为:0x68

附件:OLED初始化时I2C引脚数据图

图片

从该表可以看出,数据从905ms开始,到907ms完成了初始化数据的传输,下一节我们将按照这个数据传输内容编写代码,初始化OLED。

三、I2C是一种半双工协议

上面我们仔细分析了I2C协议,SCL用于周期的变换,SDA用于传输数据,所以同一时间,SDA要么用于接收,要么用于发送。所以我们可以得到I2C是一种半双工协议,同一时间只能进行接收或发送。

四、总结

本节小鱼带你从I2C协议信号入手,详细介绍了I2C数据的特点,如果你手头也有逻辑分析工具,也可以尝试进行分析,开发板设计的也非常人性化,你可以这样随手拿几个杜邦线就可以接入进行测量。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 总线
    +关注

    关注

    10

    文章

    2864

    浏览量

    87973
  • 串口通信
    +关注

    关注

    34

    文章

    1609

    浏览量

    55408
  • 通讯协议
    +关注

    关注

    10

    文章

    269

    浏览量

    20320
  • I2C协议
    +关注

    关注

    0

    文章

    26

    浏览量

    8455
  • ROS
    ROS
    +关注

    关注

    1

    文章

    276

    浏览量

    16961
收藏 人收藏

    评论

    相关推荐

    I2C协议介绍

    文章目录I2C 调查标准I2C协议介绍I2C时序介绍起始信号停止信号重启信号总线闲信号总线忙信号
    发表于 01-20 08:04

    I2C总线协议及其应用(图)

    I2C总线协议及其应用
    发表于 06-01 20:22 7021次阅读

    什么是i2c总线

    什么是i2c总线  下载请点击: i2c总线协议中文版 
    发表于 11-05 09:26 2906次阅读

    I2C总线协议及其应用

    I2C总线协议及其应用 一、I2C总线介绍: ---- 由于大规模集成电路技术的发展,在单个芯片集成CPU以及组成一个单独工作系统
    发表于 02-08 11:23 1555次阅读
    <b class='flag-5'>I2C</b>总线<b class='flag-5'>协议</b>及其应用

    I2C最新协议标准

    I2C最新协议标准,详细介绍了IIC信号要求,供大家参考,
    发表于 12-22 17:59 13次下载

    I2C通信协议应该如何学习

    我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习 I2C 有一定的帮助。一、 分析源代码学习
    发表于 04-28 08:00 21次下载
    <b class='flag-5'>I2C</b>通信<b class='flag-5'>协议</b>应该如何学习

    STM32学习之I2C协议(读写EEPROM)

    关于STM32学习分享第七章 I2C协议(读写EEPROM)文章目录关于STM32学习分享前言二、代码1.i2c.c2.i2c.h3.main.c
    发表于 11-30 15:21 32次下载
    STM32学习之<b class='flag-5'>I2C</b><b class='flag-5'>协议</b>(读写EEPROM)

    MPU6050的I2C通信协议

    不同硬件有不同的I2C协议
    发表于 12-06 12:21 3次下载
    MPU6050的<b class='flag-5'>I2C</b>通信<b class='flag-5'>协议</b>

    嵌入式内核及驱动开发-09IIC子系统框架使用(I2C协议和时序,I2C驱动框架,I2C从设备驱动开发,MPU6050硬件连接

    文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号
    发表于 12-06 14:06 17次下载
    嵌入式内核及驱动开发-09IIC子系统框架使用(<b class='flag-5'>I2C</b><b class='flag-5'>协议</b>和时序,<b class='flag-5'>I2C</b>驱动框架,<b class='flag-5'>I2C</b>从设备驱动开发,MPU6050硬件连接

    硬件I2C与模拟I2C

    配置;而软件I2C是没有寄存器这个概念的。 软件I2C一般是使用GPIO管脚,用软件控制SCL,SDA线输出高低电平,模拟i2c协议的时序。例如下面这段
    发表于 12-28 19:14 81次下载
    硬件<b class='flag-5'>I2C</b>与模拟<b class='flag-5'>I2C</b>

    一文看懂I2C协议

    电子行业最常用的3种串行通讯协议:UART、SPI和I2C。前面介绍了串口通讯协议及其FPGA实现,SPI协议。本篇文章
    发表于 01-25 18:32 40次下载
    一文看懂<b class='flag-5'>I2C</b><b class='flag-5'>协议</b>

    I2C通信协议:了解I2C Primer、 PMBus和SMBus

    I2C,即Inter-Integrated Circuit,是一种常用的串行通信协议,用于在器件之间——特别是两个或两个以上不同电路之间建立通信。I2C Primer是最常用的I2C
    的头像 发表于 06-15 15:29 5438次阅读
    <b class='flag-5'>I2C</b>通信<b class='flag-5'>协议</b>:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus

    使用I2C协议点亮OLED

    你好,我是爱吃鱼香ROS的小鱼。本节我们就尝试直接使用I2C协议来点亮OLED,因为主要测试I2C协议,所以对于复杂的显示处理部分小鱼就略过了,毕竟有方便的开源库使用,我们也不用那么纠
    的头像 发表于 07-15 16:47 1841次阅读
    使用<b class='flag-5'>I2C</b><b class='flag-5'>协议</b>点亮OLED

    I2C串行总线协议是什么?I2C总线有哪些优点?

    I2C串行总线协议是什么?I2C总线有哪些优点? I2C(Inter-Integrated Circuit)是一种串行总线协议,由Phili
    的头像 发表于 09-12 11:18 1553次阅读

    I2C协议的基础知识

    本文从I2C协议的概述开始,描述协议的历史、不同速度模式、物理层和数据帧结构,最后介绍I2C混合电压系统中电平兼容性以及上拉电阻大小计算。
    的头像 发表于 10-22 15:51 281次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>协议</b>的基础知识