什么是I2C,I2C怎么用,从实例波形分析I2C读写

这篇具有很好参考价值的文章主要介绍了什么是I2C,I2C怎么用,从实例波形分析I2C读写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

今天分享的主题是I2C通信。接下来从I2C是什么,怎么用,以及以时钟外设读写作为实例进行分析。


一、I2C简介

I2C(Inter-Integrated Circuit),也可以叫IIC、I2C,译作集成电路总线,是两线式串行通信总线,用于设备间的通讯等,标准情况下最高传送速率达100Kbps。顾名思义,I2C通讯只需要两根线,一根是数据线SDA(Serial Data Line),一根是时钟线SCL(Serial Clock Line)。主设备控制时钟线决定I2C的波特率,配合数据线进行数据的传输,这两根线分别通过上拉电阻连接到电源。
i2c,单片机,stm32,嵌入式硬件

二、硬件层面

I2C是多主从架构,每个设备都有唯一的地址,一个主设备理论上可以接127个从设备,设备的SDA并接在一起,SCl并接在一起。
i2c,单片机,stm32,嵌入式硬件

I2C总线内部都是采用漏极开路驱动,示意图如图,栅极给电压时mos导通,输出低电平,栅极给0时mos关断输出呈高阻态,那么这里就无法输出高电平。
i2c,单片机,stm32,嵌入式硬件

加上上拉电阻后可以实现高低电平的输出:开关断开时电阻趋于无穷,电流为0,电源电压为输出电压,即输出高电平;开关闭合,输出低电平。只要有一个设备拉低总线电平,总线的电平就会被拉低,这就是线与功能,便于数据的传输和仲裁。
i2c,单片机,stm32,嵌入式硬件

三、数据传输

1.数据传输帧格式

I2C数据的传输也遵循一定的格式。它有开始和停止条件,中间进行8bit的数据传输,没有奇偶校验,并且在一个开始条件和停止条件可之间可以传要多少数据有多少数据。提醒一下,我们的总线默认保持高电平
i2c,单片机,stm32,嵌入式硬件

开始条件:在时钟线保持高电平时,数据线从高电平转为低电平,即检测到一个下降沿,会形成一个开始条件;
停止条件:时钟保持高电平时,数据线从低电平转为高电平形成一个停止条件。
进行数据传输前也就是紧跟开始条件后,我们要传送地址字节,前7位是从设备地址(这也是为什么一个主机理论上最多能接127个从机,2^7-1),第八位是读/写标志位。每8bit传输完成,第九位是应答位。如果是主设备发送数据,就是从设备应答,如果是主设备读取数据,就是主设备应答。

2.寄存器

控制寄存器控制开始停止条件,每传输完一个字节会进入内部中断,状态寄存器记录单片机的工作状态。作为主机时,分频器寄存器配合内部时钟设置I2C的波特率;地址寄存器是从机地址编址;最后是数据寄存器。

四、时钟外设读写

1.写入与读取格式

参照数据手册,时钟外设的写入格式如图所示,需要两个字节后开始写入。
i2c,单片机,stm32,嵌入式硬件

开始条件之后紧跟地址字节,时钟外设的地址是1101 111,读写位是0,得到外设应答后,发送子地址的首地址,我们可以把时钟内部看作有很多片区,我们要在写数据之前把我们要先找到片区区号,再开始写数据,每传完一个字节数据,区号会自动加一,把下一个数据写入下一个片区,直到主设备停止发送。

主设备要读取数据时,开始条件后紧跟地址字节,得到外设应答后,发送要读片区的区号地址,得到外设应答后,发送重复开始信号,再发送外设地址且第8位为读模式,就可以从选定的片区开始读取数据,外设每传送一个字节,区号会自动加一,传送下一个区号的数据,直到主设备不应答后产生停止条件,停止读取
i2c,单片机,stm32,嵌入式硬件

注意,如果主机不发送不应答信号就发送停止条件,设备容易挂死,可能原因:外设没有释放总线准备继续传输数据给主设备,将SDA拉为低电平,SDA线上的数据只有当SCL为低时才能改变状态;此时SCL释放为高电平等待SDA的变化,互相等待导致挂死(绿色线为SDA,黄色线为SCL):
i2c,单片机,stm32,嵌入式硬件

2.实测波形分析

下面是写入的波形,两字节后开始写入数据,前两个字节是地址,第一个是时钟外设地址,第二个是我选择在00处开始写入数据。第一个数据0x19写进外设的00,片区,第二个数据0x09写进外设的01片区。
i2c,单片机,stm32,嵌入式硬件

读取的波形,三字节后开始读取数据,第一个是时钟外设地址,第二个是我选择在00处开始读取数据。一个重复开始信号后发送时钟地址和读标志,第一个数据0x19是时钟发送的00片区数据,第二个数据0x09是时钟发送的01片区数据,接收后主机不应答后产生停止条件,停止读取。
i2c,单片机,stm32,嵌入式硬件

总结

本文主要从整体上介绍了I2C的入门知识,作者能力有限,存在错误和纰漏,请大佬们不吝赐教(抱拳.jpg)。文章来源地址https://www.toymoban.com/news/detail-805859.html

到了这里,关于什么是I2C,I2C怎么用,从实例波形分析I2C读写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【stm32】软件I2C读写MPU6050

    概况 首先建立通信层的.c和.h模块 在通信层里写好I2C底层的GPIO初始化 以及6个时序基本单元 起始、终值、发送一个字节、接收一个字节、发送应答、接收应答 写好I2C通信层之后,再建立MPU6050的.c和.h模块 基于I2C通信的模块,来实现指定地址读、指定地址写 再实现写寄存器对

    2024年04月26日
    浏览(49)
  • [RISC-V]Milk-V开发板 i2c测试oled及波形输出

    引脚图 修改i2c3复用功能 buildboardscv180xcv1800b_sophpi_duo_sdu-bootcvi_board_init.c 扫描I2C3上的设备 [root@cvitek]~# i2cdetect -y -r 3 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: – – – – – – – – – – – – – 10: – – – – – – – – – – – – – – – – 20: – – – – – – – – – – – –

    2024年02月12日
    浏览(47)
  • 【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】

    在本教程中,我们将了解 I2C 通信协议的工作原理,我们还将使用 Arduino 板和使用该协议的传感器制作一个实际示例。您可以观看以下视频或阅读下面的书面教程。 I2C通信总线非常流行,并被许多电子设备广泛使用,因为它可以很容易地在许多需要主设备与多个从设备甚至多

    2024年02月05日
    浏览(36)
  • 【STM32CubeMX+HAL库】I2C详解+读写EEPROM

    在之前的标准库中,STM32的硬件IIC非常复杂,更重要的是它并不稳定,所以都不推荐使用。但是在我们的HAL库中,对硬件IIC做了全新的优化,使得之前软件IIC几百行代码,在HAL库中,只需要寥寥几行就可以完成 那么这篇文章将带你去感受下它的优异之处。 通过本篇博客您将

    2024年02月03日
    浏览(52)
  • 【STM32】STM32学习笔记-硬件I2C读写MPU6050(35)

    I2C(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。 串行的 8 位双向数据传输位速率在标准模式下可

    2024年01月25日
    浏览(56)
  • STM32 i2c读写寄存器地址8位,16位的方法

    一般常用的寄存器地址是8位的,遇到一个寄存器地址为16为的器件。总结一下代码编写。 寄存器地址16位的为SY103,寄存器地址为8位的为LT7911. 测试代码 lt7911该位置寄存器参考手册 sy103该位置寄存器参考手册 仿真测试 可以看到把值写入到相对应的寄存器内,并且读出。

    2024年01月19日
    浏览(59)
  • 【STM32】STM32学习笔记-软件I2C读写MPU6050(33)

    I2C(Inter-Integrated Circuit)总线 是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。 串行的 8 位双向数据传输位速率在标准模式下可

    2024年01月21日
    浏览(61)
  • 基于FPGA的I2C接口控制器(包含单字节和多字节读写)

      前文对IIC的时序做了详细的讲解,还有不懂的可以获取TI的IIC数据手册查看原理。通过手册需要知道的是IIC读、写数据都是以字节为单位,每次操作后接收方都需要进行应答。主机向从机写入数据后,从机接收数据,需要把总线拉低来告知主机,前面发送的数据已经被接

    2024年02月19日
    浏览(54)
  • 【STM32】AT24C256硬件I2C读写,基于HAL库

    目录 一、简单介绍 二、配置工程 打开CubeMX,配置时钟,调试接口,工程名,目录等 配置iic 配置串口用于显示信息 三、硬件连接 四、代码编写 一、随机写入一个字节 测试代码 波形如下 代码编写 二、连续写入 代码如下 三、随机读取 测试代码 波形如下 代码编写 四、连续

    2024年02月03日
    浏览(48)
  • STM32存储左右互搏 I2C总线读写FRAM MB85RC16

    在较低容量存储领域,除了EEPROM的使用,还有铁电存储器FRAM的使用,相对于EEPROM, 同样是非易失性存储单元,FRAM支持更高的访问速度, 其主要优点为没有EEPROM持续写操作跨页地址需要变换的要求,没有写之后的延时等待要求。MB85RC16是2K Byte(16K bit)的FRAM,能够按字节进行写

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包