iic通信协议(记录用)

1、什么是I2C协议

                I2C是由Philips开发的简单的双向两线总线,I2C协议由数据线 SDA 和时钟线 SCL 构成通信线路,既可用于 发送数据,也可接收数据属于半双工协议(即同一时刻,数据单向流动)。此外,I2C也是一种可以多主设备,多从设备的总线协议,通过地址索引,I2C可以使能所需从设备,I2C的出现主要是用来实现不同集成电路组件之间的控制功能,比如通过I2C协议,连接MCU与LCD驱动器,远程I/O口,RAM,EEPROM或数据转换器。

2、I2C、spi、uart的区别

                重点解释一下UART,SPI,I2C这三个协议的选通方式
                对于UART来说,正常来说是没有办法满足一个主设备,多个从设备的通信,它的通信方式最为简单,最低只需要一根线即可完成通信,协议本身并不允许外接多个从设备,但是我们也可以通过比如485转接、增加二极管的方式来进行多从设备选择(电路层面的设计内容,不是数字IC需要考虑的内容)。
                其次是SPI协议,它有一个专门的NSS端口,默认拉低来选择所需的从设备。
                最后是I2C协议,每个主设备和每个从设备都对应一个地址,通信的时候先发送地址信号,若一致,则被选中。

3、I2C的信号线

                I2C仅需要两根信号线即可完成通信,除此以外,I2C的信号线需要连接上拉电路。

  •  它是一个支持多设备的总线(支持多主机多从机)。
  •  IIC 总线只使用两条总线线路,一条双向串行数据线(SDA) 一条 串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
  •  每个连接到 IIC 总线的设备都有一个独立的地址,主机可以利 用设备独立地址访问不同设备。
  • IIC 总线通过上拉电阻接到电源。当 IIC 设备空闲时,设备会输 出高阻态,当所有设备都空闲,都输出高阻态时,由上拉电阻把 IIC 总线拉成高电平。
  •   IIC 总线具有仲裁机制。

4、多种连接方式

        4.1 单主设备,单从设备

        

        4.2 单主设备,多从设备

        4.3 多主设备,多从设备

        

5、数据传输格式

        ① IIC 协议空闲状态 ② IIC 协议的起始信号 ③ IIC 协议的数据传输(数据读写)状态(应答信号(ACK)) ④ IIC 协议的停止信号

        5.1IIC 协议空闲状态

        

               图中标注的①②③④表示 IIC 协议的 4 个状态,分别为“总线空 闲状态”、“起始信号”、“数据读/写状态”和“停止信号”。 图中标注①表示“总线空闲状态”,在此状态下串口时钟信号 SCL 和串行数据信号 SDA 均保持高电平(都为 1),此时无 IIC 设备工作。 

        5.2IIC 协议的起始信号

                图中标注②表示“起始信号”,在 IIC 总线处于“空闲状态”时, 时钟信号线 SCL 为高电平时,数据信号线 SDA 被拉低(由高电平变为 低电平),出现下降沿,表示产生了一个起始信号。 起始信号是由主机(本实验中为 FPGA)主动建立的,在建立该信 号之前 IIC 总线必须处于空闲状态。

        5.3IIC 协议的数据传输(数据读写)状态

                IIC 通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分。

                数据信号线 SDA 更新数据时:在时钟信号线 SCL 为低电平时将数 据信号线 SDA 上的数据进行数据更新。

                即数据在时钟信号线 SCL 的上升沿到来之前就必须准备好,并在 在 SCL 下降沿到来之前必须保持稳定

        5.4应答信号(ACK)       

         IIC 总线上的所有数据都是以字节(8bit)传送的,发送端(可以 是主机也可以是从机)每发送一个字节(8bit),就必须在第 9 个 SCL 脉冲期间释放 SDA,由接收端(发送端为主机时,接收端为从机/发 送端为从机时,接收端为主机)反馈一个应答信号。

        由于上拉电阻的作用这个时候SDA默认为高电平从机接管SDA的控制权,假如从机正确的接收了数据,会将SDA拉低,假如没有正确的接收数据,在从设备的控制下,SDA依旧为高电平,因此 应答信号为低电平(为 0)时,称为有效应答位(ACK),表示接 收端成功接收了该字节(8bit);应答信号为高电平(为 1)时,称 为非应答位(NACK),表示接收端接收该字节(8bit)失败。

        

        

                注:数据接收失败或者数据传输结束都要发送 NACK。 反馈有效应答位(ACK):接收端在第 9 个时钟脉冲之前的低电平期 间将 SDA 拉低,并且确保在该时钟周期的高电平期间保持低电平。

        5.5IIC 协议的停止信号

                数据读写完成后,时钟信号线 SCL 为高电平时,数据信号线 SDA 被释放(由低电平转为高电平),出现上升沿,表示产生了一个停止 信号,IIC 总线跳转回“总线空闲状态”。 停止信号是由主机(本实验中为 FPGA)主动建立的,建立该信号 之后,IIC 总线将返回空闲状态。

6、I2C可配置变量

        6.1 传输模式

  • 标准模式(Standard):100kbps
  • 快速模式(Fast):400kbps
  • 快速模式+(Fast-Plus):1Mbps
  • 高速模式(High-speed):3.4Mbps
  • 超快模式(Ultra-Fast):5Mbps(单向传输)

                提起不同速度的传输模式,读者首先想到的可能是指SCK的频率,这没有错,但是绝不仅限于此,为了获得更高的传输速率,除开芯片设计工程师外,电路的设计人员需要认真思考诸如“负载电容,上拉电阻的大小”等更偏向于电路设计或模拟设计的内容。

        6.2 地址位宽

  • 标准I2C:七位寻址
  • 扩展I2C:十位寻址

                每个主设备或者从设备都能对应一个唯一的地址,大多数情况下,7位的地址,已经够用了。但是也可以对其进行扩展,转变为10位地址,多出来的3位地址相当于提供了8倍潜在设备数量,同时,按照NXP2021版的I2C协议规定,10位地址的从设备,和7位地址的从设备,都可以挂在一个总线上,彼此相互兼容。

        6.3 设备地址

                每个主设备与从设备需要设置互不相同的七位地址或十位地址。

7、I2C的仲裁机制

          7.1 SCL同步问题

                总线天生带线与逻辑,即总线的几个输入端,任意有一个拉低,总线表现为低电平,全部位高电平时,总线才是高电平,真值表如下所示。

设备A设备B总线逻辑
000
010
100
111

                假设有两个主设备都想拉低SCL信号,Master1先拉低 ,Master2后拉低,那么SCL会按照CLK1的时间来拉低自身(线与逻辑的应用),而假如Master1先拉高,Master2后拉高,SCL又会按照CLK2的时间来拉高自身。

        因此:当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理

        7.2 SDA仲裁问题

        设想一种多主设备,多从设备的情况
                假如在空闲状态时,两个主设备先后想要操控I2C总线(相隔时间很短),I2C岂不是会发生错误(数据紊乱等),如何解决这个问题呢?
                我们可以采取仲裁机制,同样应用到总线的线与逻辑,在箭头所指的位置,SCL上升沿到来,对SDA上的数据进行采样,结果为0,与DATA2上的数据0相同,与DATA1上的数据1不同,通过这种比较 Master1退出了对总线的控制,而Master2所发送的数据都是正确的,完成仲裁。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值