I2C协议原理简述

1、传输流程

 

I2C是主从结构,所有的数据都是mater发起的,slave接收或者回应。比如上面的框图所示,一主多从。

那么这么多的从设备,是如何做到选择哪个呢?我们看一下发送接收的流程。

 

(1)

在SCL的高电平时,SDA由高变低,发出start信号

(2)

后面的9个时钟周期内发送了9次的SDA信号,前7个位表示的设备地址(注:每个从设备的地址是写死在从设备芯片里面的,在编写驱动之前,我们就能从从设备的芯片手册中查到的,比如韦老师教程视频中的AT24CXX设备的地址就写死为b1010A2A1A0,其中前4位固定为1010,后3位A2A1A0根据硬件连接情况而定,如果都接地,那么3位都为0);第8位用来表示数据发送的方向,也就是读还是写;第9位是从设备发出的ACK回应信号(每次发送完数据,从设备都要回应一个ACK),如果有回应证明对应的设备存在,否则就不存在。

(3)

后面每发送完8位的数据,都回应1位ACK(所以看到都是9个时钟周期)

(4)

当要结束数据发送,就在SCL的高电平内,SDA由低变高,表示结束发送。

 

要注意的是,在SCL的低电平期间,SDA的信号可以变化,但是在SCL的高电平期间,就要保持稳定。

 

2、关注点

那么还有一个问题,只有一条数据线SDA,怎么实现双向传输呢?

 

(1)主设备发送时,从设备不发送

由figure 20-4的图可以看得出,发送数据的9个时钟信号中,前8个信号是主设备发出的,第9个才是从设备发出的ACK信号,所以可以通过SCL区分

(2)主设备发送时,从设备的“发送引脚”不影响数据

可以使用开极电路,发送引脚使用一个三极管控制

 

给出三点的电压关系的真值表:

 

ABSDA
001(由上拉电阻决定)
010
100
110

(1)不想影响SDA,就不去动三极管

(2)想输出高电平,就驱动三极管

(3)想输出低电平,就驱动三极管

 

比如主设备发送8bit到从设备:

(1)前8 clk周期内,从设备不要影响,所以不驱动三极管;由主设备决定数据

(2)第9 clk,由从设备决定数据,所以主设备不要驱动三极管,由从设备掌管SDA

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值