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

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

3天内不再提示

I2C通信的详细讲解

汽车玩家 来源:csdn 陶通宁 作者:csdn 陶通宁 2021-06-25 17:19 次阅读
1. 物理接口: SCL + SDA

(1)SCL(serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道。

(2)SDA(serial data):数据线,通信数据都通过SDA线传输

2. 通信特征:串行、同步、非差分、低速率

(1)I2C属于串行通信,所有的数据以位为单位在SDA线上串行传输。

(2)同步通信就是通信双方工作在同一个时钟下,一般 通信的A方通过一根CLK信号线传输A自己的时钟给B,B工作在A传输的时钟下。所以同步通信的显著特征就是:通信线中有CLK。

(3)非差分。因为I2C通信速率不高,而且通信双方距离很近,对干扰不敏感,所以使用电平信号通信。

(4)低速率。I2C一般是用在同一个板子上的2个IC之间的通信,而且用来传输的数据量不大,所以本身通信速率很低(一般几百KHz,不同的I2C芯片的通信速率可能不同,具体在编程的时候要看自己所使用的设备允许的I2C通信最高速率,不能超过这个速率)

3. 突出特征1:主设备+从设备

(1)I2C通信的时候,通信双方地位是不对等的,而是分主设备和从设备。通信由主设备发起,由主设备主导,从设备只是按照I2C协议被动的接受主设备的通信,并及时响应。

(2)谁是主设备、谁是从设备是由通信双方来定的(I2C协议并无规定),一般来说一个芯片可以只能做主设备、也可以只能做从设备、也可以既能当主设备又能当从设备。(像一些传感器芯片设计的时候只能做从设备,有的芯片本身既可以当主设备又可以当从设备,通过软件来配置是主设备还是从设备)

4. 突出特征2:

(1)I2C通信可以一对一(一个主设备对1个从设备),也可以一对多(一个主设备对多个从设备)

(2)主设备负责调度总线,决定某一时间和哪个从设备通信。注意:同一时间内,I2C的总线上只能传输一对设备的通信信息,所以同一时间只能有一个从设备和主设备通信,其他从设备处于“冬眠”。不能出来捣乱,否则通信就乱套了。

(3)每一个I2C从设备在通信中都有一个I2C从设备地址,这个设备地址是从设备本身固有的属性,然后通信时主设备需要知道自己将要通信的那个从设备的地址,然后在通信中通过地址来甄别是不是自己要找的那个从设备。

5. I2C的通信时序

(1)什么是时序?

字面意思,时序就是时间顺序,实际上在通信中时序就是通信线上按照时间顺序发生的电平变化,以及这些变化对通信的意义就叫时序。

(2)I2C的总线空心状态、起始位、结束位

总线的意思就是SCL与SDA加起来就叫做总线。

I2C总线上有1个主设备,n(n>=1)个从设备。I2C总线上有2种状态:空闲态(所有从设备都未和主设备通信,此时总线空闲)和忙态(其中一个从设备在和主设备通信,此时总线被这一对占用,其他从设备必须歇着)。

怎么区分总线处于空闲态,SDA、SCL在通信的过程中也可能同时为高电平,但是,如果SDA、SCL如果连续多个周期同时处于高电平,则总线一定处于空闲态。

整个通信分为一个周期一个周期的,两个相邻的通信周期是空闲态。每一个通信周期由一个起始位开始,一个结束位结束,中间是本周期的通信数据。

起始位:起始位说的不是一个时间点,而是一个时间段,如上图的t1到t2这个时间段,在t1到t2的这个时间段内,SCL一直保持了高电平,SDA由高电平到低电平跳变(下降沿)。接收方在接收到这样一个电平变化之后就知道发送方要开始发送数据了,紧接着下一个周期就是数据,

停止位:与起始位相似,结束位也是一个时间段。在这段时间内总线状态变化情况是:SCL先维持高电平,同时SDA线发生一个从低电平到高的上升沿。

起始位和停止位中间的就是通信位。

CLK上升沿锁存数据,CLK上升沿到来前SDA要提前准备好数据。

A是应答信号,从设备的应答是为了让主设备知道自己已经接收到了主设备的信息。相应的主设备的应答也是如此。

6. I2C数据传输格式(数据位&ACK)

(1)每一个通信周期的发起和结束都是由主设备来做的,从设备只有被动的响应主设备,没法自己自发的去做任何事情。

(2)主设备在通信周期会先发8位的从设备地址(其实8位中只有7位是从设备地址,还有1位表示主设备下面要写入还是读出)到总线(主设备是以广播的形式发送的,只要是总线上的所有从设备其实都能收到这个信息)。然后总线上的每个从设备都能收到这个地址,并且收到地址后和自己的设备地址比较看是否相等。如果相等说明主设备本次通信 就和给我说话,如果不相等说明这次通信与我无关,不用听了不管了。

(3)发送方发送一段数据后,接收方需要回应一个ACK。这个响应本身只有1个bit位,不能携带有效信息,只能表示2个意思(要么表示收到数据,即有效响应;要么表示未收到数据,无效响应),需要注意的是,到第九个周期的时候,主设备会释放SDA,即让其变为高电平,从设备会主动来拉低SDA,主设备会读取此时的SDA,若读取此时的SDA为则表示从设备已经收到刚刚发送的信息,若读取此时的SDA为则表示从设备没有收到刚刚发送的信息。

(4)在某一个通信时刻,主设备和从设备只能有一个在发(占用总线,也就是向总线写),另一个在收(从总线读)。如果在某个时间主设备和从设备都试图向总线写那就完蛋了,通信就乱套了。

7. 数据在总线上的传输协议

(1)I2C通信时的基本数据单位也是以字节为单位的,每次传输的有效数据都是1个字节(8位)。

(2)起始位及其后的8个clk中都是主设备在发送(主设备掌控总线),此时从设备只能读取总线,通过读总线来得知主设备发给从设备的信息;然后到了第9个周期,按照协议规定从设备需要发送ACK给主设备,所以此时主设备必须释放总线(主设备把总线置为高电平然后不要动,其实就类似于总线空闲状态),同时从设备试图拉低总线发出ACK。如果从设备拉低总线失败,或者从设备根本就没有拉低总线,则主设备看到的现象就是总线在第9周期仍然一直保持高,这对主设备来说,意味着我没有收到ACK,主设备就认为刚才给从设备发送的8字节不对(接收失败)。

(3)由于I2C的速率很低,完全可以通gpio来模拟

8. I2C控制器

通信双方本质上是通过时序在工作,但是时序会比较复杂不利于Soc软件完成,于是乎解决方案是soc内部内置了硬件的控制器来产生通信时序。这样我们写软件时只需要向控制器的寄存器中写入配置值即可,控制器会产生适当的时序在通信线上和对方通信。

(1)时钟部分,时钟来源是PCLK_PSYS,经过内部分频最终得到I2C控制器的CLK,通信中这个CLK会通过SCL线传给从设备。

(2)I2C总线控制逻辑(前台代表是I2CCON、I2CSTAT这两个寄存器),主要负责产生I2C通信时序。实际编程中要发送起始位、停止位、接收ACK等都是通过这两个寄存器(背后所代表的电路模块)实现的。

(3)移位寄存器(shift register),将代码中要发送的字节数据,通过移位寄存器变成1个位一个位的丢给SDA线上去发送/接收。

(4)地址寄存器+比较器 本I2C控制器做从设备的时候用。

文章来源:

编辑:ymf

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

    关注

    2551

    文章

    51125

    浏览量

    753748
  • 传感器芯片
    +关注

    关注

    6

    文章

    206

    浏览量

    23796
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1488

    浏览量

    123806
  • SDA
    SDA
    +关注

    关注

    0

    文章

    124

    浏览量

    28140
  • CLK
    CLK
    +关注

    关注

    0

    文章

    127

    浏览量

    17175
收藏 人收藏

    评论

    相关推荐

    I2C通信开发障碍以及总结

    本文主要讲解的是I2C开发过程中会遇到的坑以及I2C的个人总结经验,很实用,可以i帮助开发人员更好的理解I2C调试。
    的头像 发表于 04-17 16:35 1405次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>开发障碍以及总结

    I2C通信介绍及软测方法

    本文主要讲解I2C通信介绍以及如何使用软件工具抓取通信波形,帮助开发人员更好的去理解I2C通信
    的头像 发表于 04-17 16:35 2898次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>介绍及软测方法

    i2c总线是什么意思 i2c通信咋样 i2c通信详细讲解

    I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
    发表于 07-27 14:23 1452次阅读
    <b class='flag-5'>i2c</b>总线是什么意思 <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>咋样 <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>的<b class='flag-5'>详细</b><b class='flag-5'>讲解</b>

    labview与i2c通信的编程问题

    labview与i2c通信的编程问题,适合新手看看
    发表于 12-09 15:49 205次下载

    STM32F2通信接口I2C

    STM32F2通信接口I2C
    发表于 09-03 11:24 31次下载
    STM32F<b class='flag-5'>2</b>—<b class='flag-5'>通信</b>接口<b class='flag-5'>I2C</b>

    详细说明了I2C库文件的使用,对于理解I2C有帮助

    详细说明了I2C库文件的使用,对于理解I2C有帮助
    发表于 10-13 10:02 28次下载

    详细讲解RT-Thread I2C设备驱动框架及相关函数

    本应用笔记以驱动I2C接口的6轴传感器MPU6050为例,说明了如何使用I2C设备驱动接口开发应用程序,并详细讲解了RT-Thread I2C
    的头像 发表于 03-29 10:52 2.1w次阅读
    <b class='flag-5'>详细</b><b class='flag-5'>讲解</b>RT-Thread <b class='flag-5'>I2C</b>设备驱动框架及相关函数

    TILM27965双显示I2C的白光LED驱动器兼容的亮度控制详细讲解

    TI的产品 LM27965双显示I2C的白光LED驱动器兼容的亮度控制详细讲解资料全文请下载查看
    发表于 04-09 11:08 0次下载
    TILM27965双显示<b class='flag-5'>I2C</b>的白光LED驱动器兼容的亮度控制<b class='flag-5'>详细</b><b class='flag-5'>讲解</b>

    i2c通信详细讲解

    I2C属于串行通信,所有的数据以位为单位在SDA上串行传输
    发表于 11-24 14:09 1.9w次阅读
    <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>的<b class='flag-5'>详细</b><b class='flag-5'>讲解</b>

    干货:I2C总线最全教程讲解

      裸机操作篇 本文以三星exynos4412为例讲解I2C时序,并挂载在I2C控制器mpu6050陀螺仪的数据读取实例。通过本篇文章,读者可以理解I2C时序,以及如何基于三星
    的头像 发表于 02-20 15:04 1.3w次阅读
    干货:<b class='flag-5'>I2C</b>总线最全教程<b class='flag-5'>讲解</b>

    I2C总线的基本通信总结

    在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额,几乎任何一种电路都要使用。
    的头像 发表于 08-26 14:08 1.8w次阅读
    <b class='flag-5'>I2C</b>总线的基本<b class='flag-5'>通信</b>总结

    硬件I2C与模拟I2C

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但
    发表于 12-28 19:14 81次下载
    硬件<b class='flag-5'>I2C</b>与模拟<b class='flag-5'>I2C</b>

    基于单片机的I2C总线与AT24C01实验 I2C总线通信原理讲解

    PROM 存储器件 AT24C01 以及 AD/DA 器件 PCF8951,这章内容主要讲解 I2C 总线通信工作原理并结合 AT24C01
    的头像 发表于 07-27 16:51 3614次阅读
    基于单片机的<b class='flag-5'>I2C</b>总线与AT24<b class='flag-5'>C</b>01实验 <b class='flag-5'>I2C</b>总线<b class='flag-5'>通信</b>原理<b class='flag-5'>讲解</b>

    i2c采样是上升沿吗?

    数据。在本文中,我们将详细讨论I2C采样的工作原理,采样时机以及如何进行I2C采样。 I2C采样的原理 I2C采样是基于
    的头像 发表于 09-19 17:16 2757次阅读

    简单认识I2C通信协议

    I2C(Inter-Integrated Circuit)通信协议是由飞利浦公司(现为恩智浦半导体)开发的一种简单、双向二线制同步串行总线协议。自1982年发布以来,I2C协议因其高效、灵活和易于实现的特点,在电子设备间的数据交
    的头像 发表于 07-25 18:06 1479次阅读