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

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

3天内不再提示

I2C总线的基本通信总结

开源嵌入式 来源:开源嵌入式 作者:神棍 2021-08-26 14:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额,几乎任何一种电路都要使用。

I2C是由PHILIPS公司在1980年开发的两线式串行总线,至今已经发展30多年的历史了。古老的电子产品中就已经在使用I2C总线了。I2C总线在所有总线中是最简单,最稳定的一种,由于发展历史久远,所以I2C总线出现了多种版本。但是万变不离其中,有的厂商甚至在原有I2C总线的基础上,自己改变了总线时序,成为独有的I2C。但是基本原理不变。

我遇到过很多人在问我,自己的I2C程序明明已经调试好,可换了个芯片就通信失败了,不能读取数据了。都是I2C的元器件,只是芯片厂家不同。在这里我告诉大家,这总线历史悠久,各种版本的要有几十种甚至几百种了,所有版本的通信格式,协议都一样,只是时间不同了,因为有的芯片厂家更改了时序中的时钟周期。所以大家遇到这种问题,只需调整延时,其余不动即可,不必不知所措,乱找问题。

415246ba-eb9c-11eb-a97a-12bb97331649.jpg

I2C总线从机设备最多支持127个,主要是通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址。

I2C总线有三种数据传输速度:标准,快速模式和高速模式。标准的是100Kbps,快速模式为400Kbps,高速模式支持快至3.4Mbps的速度。所有的与次之传输速度的模式都是兼容的。I2C总线支持7位和10位地址空间设备和在不同电压下运行的设备。

TTL电平与COMS在I2C这里通用。是相互兼容的。

由于I2C的模式多种多样,我就给大家讲一种常用的7位寻址模式的通信,还有10位模式,大家可以自行找资料去了解,这种10位模式的较少。

总线通信流程大概分为四部分。1.启动—2.数据传输—3.应答—4.结束。

启动与结束:

SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件;

SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。

数据传输:

发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。

数据应答:

数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA 线(高)。

在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。

以上是基本的通信流程,当然这通信是离不开时钟线的SCL。

时钟同步:

所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文。数据只在时钟的高电平周期有效,因此需要一个确定的时钟进行逐位仲裁。

时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL 线保持这种状态直到到达时钟的高电平。但是如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL 线的状态。因此SCL 线被有最长低电平周期的器件保持低电平。此时低电平周期短的器件会进入高电平的等待状态。当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后,器件时钟和SCL线的状态没有差别,而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。

这样产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。

7位寻址方式:

第一个字节的头7 位组成了从机地址,最低位(LSB)是第8 位,它决定了传输的方向。第一个字节的最低位是“0”,表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息,当发送了一个地址后,系统中的每个器件都在起始条件后将头7 位与它自己的地址比较,如果一样,器件会判定它被主机寻址,至于是从机接收器还是从机发送器,都由R/W 位决定的。

下面是I2C的时序图与对应程序,程序已经调试通过,大家可以使用,但是大家记住一点,不同厂家芯片时钟周期会不同。本人以51单片机keil4开发环境,12M晶振调试通过。从机芯片是AT24C08芯片。

起始与停止总线:

41b80270-eb9c-11eb-a97a-12bb97331649.jpg

I2C总线程序起始与停止:

41c5df76-eb9c-11eb-a97a-12bb97331649.png

I2C读写时序:

420a2b04-eb9c-11eb-a97a-12bb97331649.jpg

I2C读写单个字节:

425027c6-eb9c-11eb-a97a-12bb97331649.png

42873054-eb9c-11eb-a97a-12bb97331649.png

I2C应答与非应答时序:

429ddf5c-eb9c-11eb-a97a-12bb97331649.jpg

I2C多字节连续读写时序:

42e6f12e-eb9c-11eb-a97a-12bb97331649.jpg

以上程序调试通过,直接使用即可。但根据不同厂家的芯片可能时序会有不同,如遇通信不正常,可改变延时。基本给大家把I2C的基本通信总结了一下。由于I2C种类版本繁多,但基本原理相同,这里不一一举例。

责任编辑:haq

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

    关注

    173

    文章

    6089

    浏览量

    178954
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1563

    浏览量

    131800
  • 电子设计
    +关注

    关注

    42

    文章

    2993

    浏览量

    49927

原文标题:看懂了这篇文章你将会操作所有的IIC器件!!!

文章出处:【微信号:KY_QRS,微信公众号:开源嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SGM4541 I2C总线过压保护器:设计与应用的详细解析

    SGM4541 I2C总线过压保护器:设计与应用的详细解析 在如今的电子设备设计中,保护电路免受过电压的损害是至关重要的。SG Micro Corp推出的SGM4541 I2C总线过压
    的头像 发表于 03-17 16:30 420次阅读

    SGM4541A:I2C总线过压保护的理想之选

    SGM4541A:I2C总线过压保护的理想之选 在电子设备的设计中,I2C总线的稳定运行至关重要。而SGM4541A作为一款低IQ I2C
    的头像 发表于 03-17 16:30 232次阅读

    I2C总线-通信线缆长度的影响及改进措施

    I2C总线确实不适合远距离通信,尤其是需要使用线缆与I2C接口器件进行通信,这里的“不适合”并不是说不可以,这也是本文的重点。一般使用
    发表于 01-21 06:03

    I2C 为什么只要两根线就能搞定通信

    到目前为止,我们已经讨论了SPI通信和UART通信的基础知识,现在让我们讨论本系列的最后一个协议,即集成电路间协议(I2C)。如果您曾经构建过使用OLED显示器、气压传感器或陀螺仪/加速度计模块
    的头像 发表于 01-04 09:14 2106次阅读
    <b class='flag-5'>I2C</b> 为什么只要两根线就能搞定<b class='flag-5'>通信</b>?

    探索PCF8584:I2C总线控制器的卓越之选

    探索PCF8584:I2C总线控制器的卓越之选 在电子工程师的日常工作中,选择合适的芯片来实现特定功能至关重要。今天,我们就来深入探讨一款功能强大的I2C总线控制器——PCF8584,
    的头像 发表于 12-28 15:40 819次阅读

    P82B715:I2C总线扩展的得力助手

    P82B715:I2C总线扩展的得力助手 在电子设计领域,I2C总线是一种常用的通信协议,但它的总线
    的头像 发表于 12-26 10:20 1742次阅读

    基于FPGA的I2C控制模块设计

    I2C_WRITE_WDATA.v模块实现I2C写时序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的头像 发表于 12-26 09:48 6190次阅读
    基于FPGA的<b class='flag-5'>I2C</b>控制模块设计

    TCA39306双向I2C总线和SMBus电压电平转换器技术解析

    TCA39306双向I2C总线和SMBus电压电平转换器技术解析 在电子设计领域,电压电平转换是一个常见且关键的问题,特别是在涉及不同电压标准的总线通信时。TCA39306作为一款双路
    的头像 发表于 12-17 10:00 563次阅读

    I2C总线协议

    I2C 总线使用两根信号线(数据线 SDA 和时钟线 SCL)在设备间传输数据。SCL 为单向时钟线,固定由主机驱动。SDA 为双向数据线,在数据传输过程中由收发两端分时驱动。 I2C 总线
    发表于 12-15 08:07

    如何在CW32 MCU上优化I2C通信

    高频率下也能稳定传输数据,避免数据丢失或错误。 解决I2C通信中的常见问题: 介绍在I2C通信过程中常见的问题,如总线冲突、数据竞争和AC
    发表于 11-27 06:25

    深入剖析I2C协议

    I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C协议属于半双工协议(即同一时刻,数据单向流动)。此外
    的头像 发表于 08-21 15:10 3964次阅读
    深入剖析<b class='flag-5'>I2C</b>协议

    I2C通信异常问题怎么解决?

    我们在进行I2C通信,发现当写数据时SCL和SDA会有下降沿重合的情况,导致通信失败,请帮忙分析下如何处理? I2C通信代码如下: sta
    发表于 08-12 07:45

    I2C总线通信,为什么要进行电气隔离?

    I2C总线采用双向二线制,支持多主机多从机通信,具备高可靠性、抗干扰能力强,广泛应用于嵌入式系统中。
    的头像 发表于 08-11 11:04 2707次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>,为什么要进行电气隔离?

    第十八章 I2C通信测试

    本章介绍了I2C协议,其物理层用SDA和SCL双线,支持多设备:协议层含起始/停止信号、应答机制等。还讲解W55MH32的I2C外设及初始化,并进行了通信测试代码的分析。
    的头像 发表于 06-19 17:07 1508次阅读
    第十八章 <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>测试

    【技术说明】数字输出压力传感器的I2C通信

    介绍I2C总线是一个简单的,串行8位面向计算机总线有效的I2C(集成电路间)控制。It提供了良好的支持不同电路板距离之间的通信,例如与各种低
    的头像 发表于 06-19 11:02 1990次阅读
    【技术说明】数字输出压力传感器的<b class='flag-5'>I2C</b><b class='flag-5'>通信</b>