I2C通信协议简介

概念

I2C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。

  • I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线。
  • 两根通信线:SCL(Serial Clock)---串行时钟线、SDA(Serial Data)---串行数据线。
  • 同步,半双工。
  • 带数据应答。
  • 支持总线挂载多设备(一主多从、多主多从)。

I2C的特点和优势

  • 双线制:I2C使用两根信号线进行通信,包括时钟线(SCL)和数据线(SDA)。
  • 多从机:多个从机设备可以连接到同一条I2C总线上,每个从机都有唯一的地址。
  • 多主机:多个主机设备可以通过I2C总线进行并行通信,通过仲裁机制实现多主机冲突的解决。
  • 简单和灵活的连接:I2C协议使用统一的总线结构,可以方便地连接各种设备,减少硬件复杂性。

硬件电路

  • 所有I2C设备的SCL连在一起,SDA连在一起。
  • 设备的SCL和SDA均要配置成开漏输出模式。
  • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。

  1. 图中为一主多从的模型,CPU作为总线的主机,主机在任何时候都是完全掌握SCL,而且在空闲状态下,主机可以主动发起对SDA的控制,只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机。
  2. 从机在任何时候都只能被动的读取SCL时钟线,不允许控制SCL线;对于SDA数据线,从机不允许主动发起对SDA的控制,只有在主机发送读取从机的命令后,或者从机应答的时候,才能短暂地取得SDA的控制权。

I2C时序基本单元

  • 起始条件:SCL高电平期间,SDA从高电平切换到低电平。
  • 终止条件:SCL高电平期间,SDA从低电平切换到高电平。

  • 图1起始条件:在I2C总线处于空闲状态时,SCL与SDA都处于高电平状态,意味着没有设备去触发SCL和SDA,SCL和SDA由外挂的上拉电阻拉高至高电平,总线处于平静的高电平状态。当主机需要进行收发时,首先产生起始条件,让SDA产生一个下降沿,当从机捕获到SCL高电平,SDA下降沿信号时,将进行自身的复位,等待主机的召唤,然后在SDA下降沿之后,主机需要将SCL置于下降沿。
  • 图2终止条件:SCL先回弹到高电平,SDA再回弹高电平,产生一个上升沿,上升沿触发终止条件,同时终止条件之后,SCL和SDA都是高电平,回归最初平静状态。

发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。

接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)。

  • 发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答。
  • 接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)。
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
I2C通信协议的代码实现可以通过编程语言如C语言来实现。在STM32开发板上,可以使用硬件I2C控制器来实现I2C通信。你可以参考引用中提供的链接,这些链接提供了关于STM32下模拟I2C的C语言实现和I2C协议的基本原理的文章。这些文章可以帮助你理解和实现I2C通信协议的代码。 要实现I2C通信协议的代码,你需要了解I2C协议的基本原理和时序要求,以及如何在硬件上配置和使用I2C控制器。通常,你需要使用两根线,即SCL和SDA线,其中SCL线用于传输同步脉冲信号,SDA线用于半双工传输信号。你还需要使用适当的I/O接口或者I2C控制器来控制通信。 在代码实现中,你需要根据具体的应用场景和设备需求,使用适当的库函数或者底层操作来进行I2C通信的初始化、数据传输和设备操作。具体的代码实现可以根据你的开发板和目标设备的硬件和软件要求而有所不同。 因此,你可以参考引用中提供的文章和代码示例,以便更好地理解和实现I2C通信协议的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [I2C协议+实现源码](https://blog.csdn.net/weixin_41995541/article/details/89843330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

¥sunrise

来自大牛的认可,是我梦寐以求的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值