IIC通信

IIC通信介绍

同步串行半双工通信

同步:带时钟线,发送方接收方的时钟信号保持同步

串行:比特按照一个一个按顺序进行传输,而不是同时传输多个比特。

半双工:数据可以在两个设备之间进行双向传输,但不能同时进行双向传输。

IIC寻址

大多数普通的 I2C 设备使用 7 位地址寻址方案。每个设备在总线上都被分配了一个 7 位的地址(从 0x00 到 0x7F)

IIC通过向总线广播从机地址,从机响应

IIC总线结构:(物理层)

SDA线 和 SCL线 组成;(可以配置为双开漏)

1.主设备:总线的控制器,发起数据传输操作;

2.从设备:被控制的设备,响应主设备的指令并返回数据。

3.数据线(SDA):主从设备间传输数据。数据在 SDA 上被编码为高电平或低电平。

4.时钟线(SCL):主设备产生的时钟信号,用于同步数据传输。数据的传输速率由 SCL 的频率决定。

5.开漏输出:SDA 和 SCL 通常被设计为开漏输出。这意味着设备可以将线路拉低(输出低电平)来传输数据,但放弃电平控制权时会释放线路使其回到高电平状态。

设置的原因:如果将输出设计为推挽输出,当多个设备同时输出高电平时,就会导致电平冲突,可能会损坏设备或产生电流浪费。而开漏输出可以避免这种冲突,多个设备可以同时驱动总线拉低,但只有一个设备负责将总线拉高,其他设备则处于高阻态。这种共享总线的机制确保了多个设备之间的互操作性和数据完整性。

初始状态SDA线与SCL线都因为上拉电阻的原因处在高电平

起始信号:主设备将 SDA 从高电平转为低电平,而 SCL 处于高电平状态不变。(发数据SCL低,读的时候SCL为高)

停止信号:主设备将 SDA 从低电平转为高电平,而 SCL 处于高电平状态。

地址帧:主设备通过地址帧发送特定从设备的地址。地址帧包括一个 7 位的地址和一个读/写位,用于指示数据的传输方向(读或写)。

当发送了一个地址后,系统中的每个器件都在起始条件后将头 7 位与它自己的地址比较。如果一样,器件会任务它被主机寻址 至于是从机接收器还是从机发送器都由 R/ W 位决定。

数据帧(Data Frame):数据帧用于在主设备和从设备之间传输实际数据。数据帧由 8 位的数据字节组成,每个字节都由从设备进行确认。

利用IIC协议写入数据 

 (0代表主机向从机写数,1代表主机向从机读数)

注意:数据有效性!        只有在SCL为高时读的数据才有效

  1. 主机发送起始信号;
  2. 主机发送8位地址数据,(数据由7位主机地址+1位0组成),主机发送完成后释放 SDA线等待从机应答。
  3. 从机如果正确收到数据,便会向主机发送一个有效位0,(此时从机忙碌,拉低SDA)表示已经收到。
  4. 主机检测到从机发来的应答,并等待SCL变为高电平后。向从机发送要写入的地址,并等待从机应答。
  5. 从机收到后,开始处理数据(从机忙碌,拉低SDA),向主机发送一个有效位0。
  6. 主机将需要写入的数据,发送给从机。
  7. 从机依然向主机发送有效应答表示收到。
  8. 主机向从机发送停止信号,结束!

利用IIC协议读出数据

  1. 主机发送起始信号;
  2. 主机发送8位地址数据,(数据由7位主机地址+1位0组成),主机发送完成后释放 SDA线等待从机应答。
  3. 从机如果正确收到数据,便会向主机发送一个有效位0,(此时从机忙碌,拉低SDA)表示已经收到。
  4. 主机检测到从机发来的应答,并等待SCL变为高电平后。向从机发送要读的地址,并等待从机应答。
  5. 从机收到后,开始处理数据(从机忙碌,拉低SDA),向主机发送一个有效位0。
  6. 主机检测到应答数据后,重新发送起始信号。
  7. 主机发送8位地址数据,(数据由7位主机地址+1位1组成),主机发送完成后释放 SDA线等待从机应答。
  8. 从机收到数据后,将发送有效位给主机
  9. 主机将需要写入的数据,发送给从机。
  10. 从机依然向主机发送有效应答表示收到,接着从机继续占用SDA线给主机发送数据。
  11. 主机再次占用SDA线,发送非应答信号给从机,结束!

面试问题:

  1. 请简要介绍一下 I2C(IIC)总线的基本原理和工作方式。

  2. I2C 总线中的主机和从机角色分别是什么,它们之间的通信流程是怎样的?

  3. I2C 总线中的 SDA 和 SCL 分别代表什么,有何作用?请解释一下它们之间的时序关系。

  4. I2C 总线的速度是如何控制的?在什么情况下可以改变传输速率?

  5. I2C 总线中的应答信号是什么作用?主机如何检测从机的应答?

  6. 在 I2C 通信中,什么是起始信号和停止信号?它们的作用是什么?如何发送起始信号和停止信号?

  7. I2C 总线的地址格式是怎样的?请解释主机地址和从机地址的位数分配和含义。

  8. I2C 总线的时钟同步是如何实现的?主机和从机如何进行时钟同步?

  9. 在实际应用中,I2C 总线有哪些常见的问题和挑战?你是否遇到过这些问题,并如何解决?

  10. 除了 I2C,你还了解其他的串行通信协议吗?请简要比较 I2C 和其他一种串行通信协议的异同点。

11.iic,spi,usart这三个传输距离的比较?

回答:

I2C是一种串行通信总线,使用两根双向线路:Serial Data Line (SDA)和Serial Clock Line (SCL)。它通过主机和从机之间的数据交换来实现通信。主机负责发起和控制通信,从机则响应主机的指令。

I2C总线中的主机和从机角色:主机会向从机发送读或写请求,并控制通信流程。从机根据主机的请求进行相应操作,并返回数据或状态信息给主机。

SDA和SCL的作用和时序关系:SDA是数据线,在传输数据时,用于发送和接收数据。SCL是时钟线,用于同步主机和从机的数据传输。时序关系是由SCL的变化来驱动数据的传输和采样。(在上升沿(从低电平到高电平)时,数据线上的数据被发送方改变为下一个数据位的值。发送方将数据位的值写入SDA线上,从而传输数据。在下降沿(从高电平到低电平)时,数据线上的数据被接收方读取并采样。接收方会读取SDA线上的数据位,并根据其值进行相应的处理。

I2C总线的速度控制和传输速率变化:I2C总线的速度由时钟频率决定。可以通过改变时钟频率来调整传输速率。具体可根据设备支持的最大时钟频率和需要的通信速度来设置。

应答信号的作用和检测:应答信号用于从机向主机发送确认信息,表示已成功接收到数据。主机在发送数据后会检测从机的应答信号,以确认数据是否被正确接收。

起始信号和停止信号的作用和发送:起始信号用于标识通信开始,停止信号用于标识通信结束。起始信号由主机在SCL为高电平时将SDA从高电平拉低,停止信号则相反,主机将SDA从低电平拉高。

I2C总线的地址格式:I2C总线的地址格式包括主机地址和从机地址。主机地址通常是一个7位的地址码,用于指定通信的主机设备。从机地址也是7位,用于标识特定的从机设备。

时钟同步的实现:主机通过产生时钟信号来同步数据传输。主机控制SCL线上的时钟脉冲,使得数据在每个时钟周期内能够被准确传输和采样。从机根据SCL线的变化来同步数据的发送和接收。

I2C总线的常见问题和解决:常见问题包括通信失败、噪音干扰、速度匹配等。解决方法可以包括增加电容、提高电源质量、调整通信速率等。

I2C和其他串行通信协议的异同点:与SPI相比,I2C只需要两根线路,连接更简单,但速度较慢。与UART相比,I2C具有多主机和多从机的能力,但距离较短。每种协议适用于不同的场景和应用需求。

I2C(IIC):I2C总线的传输距离较短,一般在几米以内。这是由于I2C使用的是开漏输出的方式,需要外部上拉电阻来恢复信号,使得传输距离受到限制。对于长距离通信需求,可能需要使用信号放大器或者转换芯片来延长传输距离。SPI(串行外设接口):SPI总线的传输距离相对较短,一般在几十厘米到几米之间。SPI通信使用的是全双工模式,传输速度较快,但传输线的长度限制在一定范围内,否则信号的失真和干扰会增加。如果需要更长的传输距离,可以使用驱动器和接收器来增强信号。USART(通用同步异步串行接口):USART支持的传输距离相对较远,可以达到几十米甚至几百米。USART通信是一种点对点的通信方式,常用于串行通信设备之间的连接。传输距离的限制取决于所使用的传输介质和波特率,较低的波特率可以实现更长的传输距离。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值