简单理解“IIC协议”工作原理

IIC协议

(不论如何,控制SDA时,都先保证SCL为低电平)

1.开始与结束

IIC的默认空闲电平位高电平,在开始前首先要了解:

低电平优先级最高。例如在电路中,给一根导线接地,无论这根导线以前是什么电位,接地后均和地线电位相同,所以将低电平作为敏感信号。IIC总线默认高电平时直接接地会不会构成短路,答案是不会,因为总线上接有限流电阻。

在通讯开始时需要一个开始信号,在通讯结束时需要一个结束信号。

  • 开始:当SCL为高时,SDA由高到低跳变一次
    • 开始的前提是SCL和SDA都为高。
  • 结束:当SCL为高时,SDA由低到高跳变一次
    • 结束的前提是SCL为高,SDA为低。
      (图片网上粘的)
      在这里插入图片描述

2.数据传输

(SCL为时钟控制总线,当SCL为高电平时,设备需要采集SDA上的数据)

数据传输控制方法

(图片网上粘的)
在这里插入图片描述

  • 当SCL为低电平时,可随意控制SDA变化
  • 当SCL为高电平时,不要动SDA,保证SDA上的电平稳定,此时设备采集SDA的电平

数据传输总控制流程

  • 首先保证SCL为低电平
  • 在SCL为低电平时,控制SDA位的电平
  • SCL从低到高跳变一次,再从高到低跳变一次,类似于一个完整的方波,此时设备会记录一位
  • 将上述过程循环八次,即组成一个字节数据
    • 注意:数据传输顺序,先高位后低位

3.主从关系

在IIC通讯中存在主设备和从设备

  • 主设备:控制时钟总线SCL的设备为主设备,同一个总线上可以有多个主设备

  • 从设备:有对应自己的设备地址,因为不能控制时钟总线SCL,只能被动的依照时钟总线的跳变,处理SDA上的电平数据。

    • 设备地址:

      开始信号之后,第一个字节数据的前7位为设备地址位,最后一位为读写位。

      • 产品的设备地址是由产品决定的,不能人为的设定。

      • 读写位为“0”时,是写操作

      • 读写位为“1”时,是读操作

      设备地址位 + 读写位 = 一个字节

4.应答信号

当一个字节数据传输结束,接受数据的设备需要应答一次

  • 在传输一个字节数据后,传输数据的一方A会释放数据总线SDA(即让SDA为高电平),此时由接受数据的一方B控制数据总线SDA
  • 在下一个时钟信号SCL为高电平时,传输数据的一方A接受SDA上B的应答信号,从而判断之前传输的数据是否被成功接收到。
  • 应答信号均由数据的接收者发出

应答信号有两种:应答和非应答

  • 应答:接收者接收完一个字节数据后,在下一个时钟脉冲SCL来临之前,将SDA置“0”
  • 非应答:接收者接收完一个字节数据后,在下一个时钟脉冲SCL来临之前,将SDA置“1”

应答信号的应用

  • 正常通讯状态下,从设备只发应答,应答完成后,主设备可以继续发送下一个指令,也可以直接发送停止信号;

  • 当从设备繁忙时,主设备向从设备发出指令,此时从设备发出非应答信号。

  • 主设备读取从设备数据时

    • 读一个字节后,主设备发出应答信号,从设备会继续向主设备发送下一个数据
    • 读一个字节后,主设备发出非应答信号,从设备会停止向主设备发送数据,并释放数据总线(即将数据总线SDA拉高)等待主设备发出结束指令

    所以,当主设备在读到最后一个字节时,通过非应答信号,可让从设备释放数据总线,停止从设备继续发送数据,再通过停止信号终止本次通讯。具体操作根据实际情况决定。

5.总结

  • IIC协议,难点在于对应答信号的掌控,其中主设备的应答信号,即起到应答的作用,也起到控制的作用,是编程注意的一个细节。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值