【外设篇】I2C工作原理

这篇具有很好参考价值的文章主要介绍了【外设篇】I2C工作原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、I2C 简介 

二、I2C 主设备与从设备的关系 

三、I2C 数据传输过程 

3.1 总线空闲状态 

3.2 开始位和停止位的产生

3.3 主设备处于等待状态 

3.4 ACK 应答位的产生

3.5 有效的数据传输

3.6 数据的传输

总结


一、I2C 简介 

I2C(内置集成电路) 是由 Philips 公司开发的两线式串行总线,产生于 20 世纪 80 年代,用于连接微控制器及外围设备。I2C 总线简单而有效,占用 PCB(印制电路板)空间很小,芯片引脚数量少,设计成本低。I2C 总线支持多主控(Multi-Mastering)模式,任何能够进行发送和接收的设备都可以成为主设备。主控能够控制数据的传输和时钟频率,在任意时刻只能有一个主控。

1. I2C 总线由两根双向信号线组成:数据线(SDA)和时钟线(SCL);

2. I2C 总线通过上拉电阻接正电源。当总线空闲时,上拉电阻使 SDA 和 SCL 线都保持高电平(SDL=1; SCL=1);

3. 为了避免总线信号混乱,要求各设备连接到总线的输出端必须是开漏输出或集电极开路输出的结构。根据开漏输出或者集电极开路输出信号的 "线与" 逻辑,连到 I2C 总线上的任一器件输出低电平,都会使相应总线上的信号变低。

二、I2C 主设备与从设备的关系 

2.1 系统的所有外围器件都有一个7位的从器件专用地址码(其中高4位位器件类型,由出厂商制定,而低3位为器件引脚地址,由用户自定义)。由于 I2C 总线由二线组成,不需额外的外围器件片选线,因此主控器件可直接通过地址码建立多机通信机制,这样总线上是可以挂接多个器件的;

2.2 I2C 总线上,有主设备和从设备之分,主设备必须带有 CPU 逻辑模块,在同一总线上同一时刻只可使能一个主设备,但是可以有多个从设备,只是从设备的数量会因受到地址空间和总线的最大电容 400pF 而受到限制;

2.3 I2C 设备上的 SDA(串行数据线)是双向的,输出电路用于向总线发送数据,输入电路用于接收总线的数据;

2.4 同样地,SCL(串行时钟线)也是双向的,主设备主要是用来控制 SCL 线的,而从设备对主设备产生响应(即从设备需按总线上 SCL 的信息发送或接收 SDA 的数据),不过从设备也可向 SCL 发出低电平信号以延长总线时钟信号周期;

2.5 主设备和从设备,两者都可以传输数据,只是从设备不能发起传输信息,且传输信号是受到主设备控制的。 

三、I2C 数据传输过程 

3.1 总线空闲状态 

I2C 总线空闲时,上拉电阻使 SDA 和 SCL 线都保持高电平。 

3.2 开始位和停止位的产生

开始位和停止位都由 I2C 主设备产生,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。如图 2.10 所示。

3.2.1 开始位:当 SCL 稳定在高电平时,SDA 由高到低跳变将产生一个开始位;

3.2.2 停止位:当 SCL 稳定在高电平时,SDA 由低到高跳变则产生一个停止位。

【外设篇】I2C工作原理,嵌入式驱动开发,嵌入式硬件,arm开发

3.3 主设备处于等待状态 

从设备(接收器件)收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将 SCL 线拉成低电平,从而使主设备处于等待状态。直到接收器件准备好接收下一个字节时,再释放 SCL 线使之为高电平,从而使数据传送可以继续进行。 

3.4 ACK 应答位的产生

每个字节发送完后,在第 8 个时钟周期之后,主控方应该释放 SDA 数据线 ,在 SCL 的第 9 个上升沿到来之前,由接收方发出一个应答信号(ACK 位)。

有效应答位(ACK 位):应答信号为低电平时,表示接收方已经成功地接收了该字节;

非应答位(NACK 位) :应答信号为高电平时,表示接收方没有成功接收该字节。 

对于发送有效 ACK 位的要求是,接收方在第 8 个时钟周期之后的低电平期间将 SDA 线拉低,并且确保在第 9 个时钟周期的高电平期间 SDA 稳定为低电平。如果接收方是主控器,则在它收到最后一个字节后,发送一个 NACK 位,以通知被控发送器结束数据发送,并释放 SDA 线,以便主控接收器发送一个停止位。 

【外设篇】I2C工作原理,嵌入式驱动开发,嵌入式硬件,arm开发

3.5 有效的数据传输

I2C 总线进行数据传输时,SCL 时钟信号为高电平期间,SDA 数据线上的数据必须保持稳定,只有在 SCL 时钟线上的信号为低电平期间,SDA 数据线上的高电平或低电平状态才允许变化。 如图所示。 

【外设篇】I2C工作原理,嵌入式驱动开发,嵌入式硬件,arm开发

3.6 数据的传输

在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。数据位的传输是边沿触发。 

开始位和停止位都由 I2C 主设备产生。在选择从设备时,如果从设备采用 7 位地址,则主设备在发起传输过程前,需先发送 1 个字节的地址信息,前 7 位为设备地址,最后 1 位为(R/W)读写标志。之后,每次传输的数据也是 1 个字节,从 MSB(最高有效位)开始传输。每个字节传输完后,在 SCL 的第 9 个上升沿到来之前,接收方应该发出 1 个 ACK 位。SCL 上的时钟脉冲由 I2C 主控方发出,在第 8 个时钟周期之后,主控方应该释放 SDA,I2C 总线的时序如图 2.11 所示。

【外设篇】I2C工作原理,嵌入式驱动开发,嵌入式硬件,arm开发

总结

1. I2C(Inter-Integrated Circuit)是一种串行通信总线标准,它使用两根线(时钟线和数据线)来传输数据。它是一种多主机、多从机的通信模式,可以在这两种设备之间进行数据传输和控制。时钟线由主机掌控并用于同步数据传输,而数据线用于传输实际的数据。因此,I2C是一种串行通信总线,但不是采用串行工作模式的。

2. I2C 是一种半双工的通信模式。在I2C协议中,数据的传输是双向的,但是同一时间内只能有一方发送数据,另一方接收数据。这意味着I2C总线上的设备可以作为主机(发送数据)或从机(接收数据)来进行通信。主机负责发起通信并生成时钟信号,而从机则根据主机发送的时钟信号进行数据的接收或发送。因此,I2C是一种半双工的通信模式。 

3. 在 I2C 通信中,读写操作的标志位是通过设备地址的最后 1 位来确定的。这一位可以被称为读/写位或命令位。当这一位为 0 时,表示是写操作;当这一位为 1 时,表示是读操作。当主机想要向从机写入数据时,它会发送一个带有从机地址、写操作位(0)和数据的帧。当主机想要从从机读取数据时,它会首先发送一个带有从机地址和写操作位(0)的帧,然后发送一个带有从机地址和读操作位(1)的帧,并接收从机传输的数据。通过读写标志位来区分读写操作,I2C通信可以实现双向的数据传输。

4. 开始位和停止位都由 I2C 主设备产生,数据从 MSB(最高有效位)开始传输,只有在 SCL 时钟线上的信号为低电平期间,SDA 数据线上的高电平或低电平状态才允许变化。

5. 每个字节发送完后,在第 8 个时钟周期之后,主控方应该释放 SDA 数据线 ,在 SCL 的第 9 个上升沿到来之前,由接收方发出一个应答信号(ACK 位)。 文章来源地址https://www.toymoban.com/news/detail-604551.html

到了这里,关于【外设篇】I2C工作原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • arm中模/数转换器工作原理以及I2C工作原理

    ADC就是 模拟到数字转换器 (Analog-to-Digital Converter)的缩写。 它是一种电子设备或模块,S3C2440内部 拥有一个ADC外设 。用于将连续变化的模拟信号转换为离散的数字信号,以便数字系统(如微处理器、微控制器等)能够对其进行处理和分析。 模拟信号 :一般是指连续变化的

    2024年04月22日
    浏览(44)
  • 【STM32】| 02——常用外设 | I2C

    系列文章目录 【STM32】| 01——常用外设 | USART 【STM32】| 02——常用外设 | I2C 失败了也挺可爱,成功了就超帅。 本文详细介绍 I2C协议及 MCU I2C配置使用 I2C是一种常用的串行通信总线,由串行数据线SDA 和串线时钟线SCL组成。I2C是一种多主机控制总线,由飞利浦公司为了让主板

    2024年01月19日
    浏览(43)
  • STM32硬件I2C通信外设

    本文主要介绍stm32自带的I2C通信外设,对比与软件模拟I2C,硬件I2C可以自动生成时序,时序的操作更加及时规范,可以实现更加高性能的IIC通信。 本文内容与I2C软件通信有诸多类似之处,I2C软件通信可见:https://blog.csdn.net/qq_53922901/article/details/136662006?spm=1001.2014.3001.5501 在8位指

    2024年04月08日
    浏览(99)
  • STM32--MPU6050与I2C外设

    在51单片机专栏中,用过I2C通信来进行实现AT24C02的数据存储; 里面介绍的是 利用程序的编程来实现I2C的时序 ,进而实现AT24C02与单片机之间的关系连接; 本章将介绍使用I2C的硬件外设来实现I2C通信,和介绍MPU6050,利用I2C通信实现STM32对MPU6050的控制. I2C通信软件实现程序链接

    2024年02月11日
    浏览(58)
  • 【STM32】STM32学习笔记-I2C通信外设(34)

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

    2024年01月17日
    浏览(64)
  • I2C知识大全系列四 —— I2C驱动之Linux下的I2C

    Linux 系统定义了 I2C 驱动体系结构。在 Linux 系统中, I2C 驱动由三部分组成,即 I2C 核心 、 I2C 总线驱动 和 I2C 设备驱动 。这三部分相互协作,形成了非常通用、可适应性很强的 I2C 框架。 I2C核心 I2C 核心提供了 I2C 总线驱动 和 设备驱动 的 注册 、 注销方法 , I2C 通信方法

    2024年02月07日
    浏览(58)
  • I2C总线驱动

    SOC芯片平台的外设分为: 一级外设:外设控制器集成在SOC芯片内部 二级外设:外设控制器由另一块芯片负责,通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit: 字面意思是用于“集成电路之间”的通信总线,简写:IIC(或者I2C) i2c传输的要点就是: 传输一个字节 后面必然

    2024年02月15日
    浏览(42)
  • 【STM32学习】——STM32-I2C外设&硬件读写MPU6050&软硬件读写波形对比

    目录 前言 一、I2C外设 二、硬件I2C操作流程 1.主机发送时序 3.其他时序

    2024年02月10日
    浏览(49)
  • Linux I2C 驱动实验

    目录 一、Linux I2C 驱动简介 1、I2C 总线驱动 2、I2C 设备驱动 1、 i2c_client 结构体 2、 i2c_driver 结构体 二、硬件分析 三、设备树编写 1、pinctrl_i2c1 2、在 i2c1 节点追加 ap3216c 子节点 3、验证 四、 代码编写 1、makefile 2、ap3216c.h  3、ap3216c.c ①、头文件 ②、驱动出入口  ③、 i2c驱动

    2024年02月08日
    浏览(54)
  • 【驱动】I2C驱动分析(三)-关键数据类型

    i2c_bus_type 用于表示 I2C 总线类型。 bus_type 是 Linux 内核中用于表示总线类型的结构体,用于管理该类型总线上的设备。 .name : 用于指定总线类型的名称。在这里,总线类型的名称被设置为 “i2c”,表示 I2C 总线类型。 .match : 匹配设备与总线。 .probe : 用于在设备与总线匹配成功

    2024年01月19日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包