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

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

3天内不再提示

嵌入式教育科普|I2C接口全面解析

ElfBoard 2025-04-11 09:44 次阅读

1、基本概念

I2C的全称是Inter-Integrated Circuit,译为集成电路总线,是一种同步、双向、半双工的两线式串行接口总线。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。主设备通常是一个微控制器微处理器,用来控制通信的启动和停止、时钟信号(SCL)的产生,以及数据传输;从设备则是等待来自主设备的命令并响应命令接收。

I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上,不同的I2C设备有不同的器件地址,主设备通过I2C设备的器件地址访问指定的I2C从设备,连接方式如下图:

wKgZO2f4cdCADNaQAA22gKFjOGc822.png

I2C采用的开漏输出,SDA跟SCL两根线都需要加上拉电阻,当总线空闲时候两根线是高电平。I2C的优点在于其简单性、灵活性、易于集成、通信速度快、占用引脚少、连接简单等。然而,由于其半双工的工作方式,以及在同一总线上连接的设备数量有限,I2C在某些应用中可能不是最佳选择,也具有传输距离短、信号干扰大等缺点。

2、工作原理

I2C是一种双线总线,分别是时钟线SCL和数据线SDA。在正常工作中,总线协议有起始条件与停止条件。

起始条件:SCL为高电平,SDA由高电平变为低电平。

停止条件:SCL为高电平,SDA由低电平变为高电平。

起始跟停止条件由主机控制。当主机发出起始条件后,I2C总线会被认为忙碌状态。当主机发出停止条件后,I2C总线会被认为空闲状态。当主机发送一个重新起始条件替代停止位I2C总线也会被认为处于忙碌状态。

wKgZPGf4ch6APuuUAAkHR9hBsOw219.png

主机发出起始条件后,开始读取数据,但这里要注意的是数据的有效性。

数据有效性:SCL时钟线在高电平期间,SDA必须是稳定的。SCL时钟线在低电平时候SDA数据线才允许高电平或者低电平变化。每传送一个数据位产生一个时钟。

wKgZPGf4ckmAGBtWAA22gNnnmvA601.png

在数据传输时,SDA线上面的每个字节数据长度必须是8位。每次传输的字节不受限制,每个字节后面跟随着一个应答位,数据以高有效位传输。如果从机不能够接收数据或者传输一个完整的数据字节,直到他完成某些其他功能。例如一个内部中断,它可以保持SCL为低电平状态,迫使主服务器进入等待状态。当从机准备好接收数据后它会释放SCL时钟线数据继续传输。

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

    关注

    6060

    文章

    44836

    浏览量

    645296
  • 嵌入式
    +关注

    关注

    5127

    文章

    19458

    浏览量

    313607
  • 开发板
    +关注

    关注

    25

    文章

    5435

    浏览量

    101288
  • I2C接口
    +关注

    关注

    1

    文章

    133

    浏览量

    25829
收藏 人收藏

    评论

    相关推荐
    热点推荐

    利用数字示波器调试嵌入式I2C总线

    本内容提供了利用数字示波器调试嵌入式I2C总线,本文阐述了在实际开发中所遇到的I2C通信问题及使用示波器分析问题和解决问题的方法。嵌入式系统中应用了越来越多的总线,其开发
    发表于 11-04 17:30 6033次阅读

    I2C总线介绍 I2C读写时序介绍

    作为嵌入式开发人员,无论是硬件还是软件工程师,或多或少都会接触过I2C接口的外设。诸如常用的存储器EEPROM等皆是I2C接口进行通信。
    发表于 10-01 16:57 4532次阅读
    <b class='flag-5'>I2C</b>总线介绍 <b class='flag-5'>I2C</b>读写时序介绍

    嵌入式教育科普|GPIO接口全面解析

    知识的掌握直接影响着嵌入式项目实现功能的成效。本文将以GPIO接口为切入点,深入解析其工作原理与技术特性,希望能帮助屏幕前想要学习嵌入式开发的小伙伴建立
    的头像 发表于 03-05 11:11 1382次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|GPIO<b class='flag-5'>接口</b><b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    嵌入式教育科普|SPI接口全面解析

    在现代科技领域,嵌入式系统接口作为信息交互的核心枢纽,扮演着不可或缺的角色。
    的头像 发表于 03-24 16:45 1152次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|SPI<b class='flag-5'>接口</b><b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    ElfBoard嵌入式教育科普|ADC接口全面解析

    ADC作为技术解析切入点,通过系统阐释其工作机理、性能特征及重要参数,为嵌入式学习者爱好者构建全维度接口技术认知框架。
    的头像 发表于 04-30 09:34 443次阅读
    ElfBoard<b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|ADC<b class='flag-5'>接口</b><b class='flag-5'>全面</b><b class='flag-5'>解析</b>

    基于CPLD的I2C总线接口设计

    在电路设计中,I2C总线是比较常用的两线串行通信方式,大多数的CPU都擅长于并口操作,不具备直接操作I2C总线接口的能力。为了使不具备I2C
    发表于 02-12 16:11 95次下载
    基于CPLD的<b class='flag-5'>I2C</b>总线<b class='flag-5'>接口</b>设计

    基于嵌入式Linux演示I2C设备调试

      I2C嵌入式设备最为常用的接口之一,常用于如下面这些应用场景,因此本文就基于嵌入式Linux演示在User Space进行I2C设备调
    发表于 09-18 15:21 3次下载

    I2C LCD 器件通过驱动带有 I2C 接口2 线 16 字符 LCD

    I2C LCD 器件通过驱动带有 I2C 接口2 线 16 字符 LCD
    发表于 10-10 08:22 13次下载
    <b class='flag-5'>I2C</b> LCD 器件通过驱动带有 <b class='flag-5'>I2C</b> <b class='flag-5'>接口</b>的 <b class='flag-5'>2</b> 线<b class='flag-5'>式</b> 16 字符 LCD

    基于嵌入式Linux下的I2C设备驱动的总体思路与框架设计

    由于I2C总线的通用性,Linux作为一款优秀的嵌入式操作系统,也必须要对其要有很好的支持。在Linux内核源码中对I2C总线的驱动是基于总线设备驱动模型的,其驱动程序用到了特殊的几个
    发表于 08-20 09:04 3868次阅读
    基于<b class='flag-5'>嵌入式</b>Linux下的<b class='flag-5'>I2C</b>设备驱动的总体思路与框架设计

    如何玩转嵌入式开发中i2c协议

    对于嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置。
    的头像 发表于 01-09 15:28 4426次阅读
    如何玩转<b class='flag-5'>嵌入式</b>开发中<b class='flag-5'>i2c</b>协议

    I2C系列的合集,可以系统学习I2C协议

    这篇文章给大家带来了I2C系列的合集,可以系统学习I2C协议。大家赶紧看看吧! 1、I2C总线:何时使用I2C缓冲器 本文讨论了使用I2C
    的头像 发表于 09-23 15:28 3360次阅读

    嵌入式linux应用读写i2c示例

    这里分享一个嵌入式linux读写24c02的i2c程序ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
    发表于 11-01 16:57 12次下载
    <b class='flag-5'>嵌入式</b>linux应用读写<b class='flag-5'>i2c</b>示例

    嵌入式Linux开发——I2C总线接口

    嵌入式Linux开发——I2C总线接口
    发表于 11-02 11:06 15次下载
    <b class='flag-5'>嵌入式</b>Linux开发——<b class='flag-5'>I2C</b>总线<b class='flag-5'>接口</b>

    物联网嵌入式软件中的I2C总线设计详解

    I2C(Inter-Integrated Circuit)通信总线,作为嵌入式系统设计中的一个关键组成部分,其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析
    的头像 发表于 09-29 16:21 800次阅读
    物联网<b class='flag-5'>嵌入式</b>软件中的<b class='flag-5'>I2C</b>总线设计详解

    ElfBoard嵌入式教育科普|UART接口全面解析

    掌握UART等通信接口的深入知识,对嵌入式初学者而言,不仅能够深化对通信协议与方式的认知,增强调试技巧及通信接口设计能力,还能拓宽应用范畴并培育系统级思考方式。因此本文将对UART接口
    的头像 发表于 03-10 09:29 605次阅读
    ElfBoard<b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|UART<b class='flag-5'>接口</b><b class='flag-5'>全面</b><b class='flag-5'>解析</b>