I2C的理解

一:I2C是什么?

     它就是为了让机器之间能够相互明白的一种通信协议,本质上所有的通信协议例如I2C,SPI,USART等与让人类相互交流的中文,英文等没区别。前者是让机器之间能相互理解,后者让人类相互理解。

二:I2C的特性

     ①串行通信: 数据是一位一位的传输的。

     ②两根通讯线:SCL-时钟线,SDA数据线。

     ③同步:有时钟线SCL时钟频率一致,就是同步。

     ④半双工:有SDA数据线,数据就能A穿B,B传A,实现双工功能,又因为只有一条SDA,只能分时复用,所以是半双工

     ⑤有数据应答:发送一个字节的数据后,让数据接收端给数据发送端一个应答,不然数据发送端怎么知道数据是否发送成功?

三:电路规范

 

①  所有 I2C 设备的 SCL 连在一起, SDA 连在一起
②  设备的 SCL SDA 均要配置成开漏输出模式
③  SCL SDA 各添加一个上拉电阻,阻值一般为 4.7KΩ 左右
④  开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题
开漏输出就是开关闭合就拉到低,开关断开就是浮空状态,这样CPU和某个设备通讯时就能不受其它设备的影响,但是由于所有设备都是开漏模式,这样CPU要发1,就是开关断开时就,不能拉高电平,CPU要发1,发不出去,所以就有了外部两个上拉电阻。

四:自己理解模型

 

一个弹簧将一个长杆拉在上面,A,B两人前有两个米尺,长杆在上面表示1,长杆被拉下来表示0。A要想向B通讯时。

例如:A要向B传送0101,A就需要将长杆拉低到0,然后放松长杆,然后再拉低,再放松,这样B就知道传来了0101。

充实一些,也可以规定一个起始信号010(让接收数据的知道开始了),给B位置规定为01,C位置规定为10

所以A要向C传送0010,完整传送就是,先发送开始信号010(表示开始了),然后发送10(表示给C发送),然后发送0010。这样就完成了A向C的传送0010的数据,当然根据实际,C收到信号后还可以向A发送一个应答表示收到信号。

这是自己参考别人理解的通讯的一个简陋模型,有助于加深自己对通讯协议的理解。

五 时序结构的理解:

我只大概讲述如何理解整体的时序结构,具体的什么时候时钟上升沿变下降沿,数据下降沿变上升沿,我并没有怎么记,用到时翻翻手册就行,重要的是对时序的理解。

时序的组成:

         ①开启SCL高电平期间,SDA从高电平切换到低电平

 

            停止SCL高电平期间,SDA从低电平切换到高电平

 

        ②发送一个字节:(具体电平变化可自行查手册)

            接收一个字节

        ③发送一个应答

            接收一个应答

完整的时序结构就是上述单独时序的组合

发送一帧数据,即向  谁  发送  什么?其组成如下:

开启       发送一个字节(从机地址+写)      接收一个应答     发送一个字节 (数据)   接收一个应答              发送一个字节 (数据)  ................停止

  为了解决向  的问题,第一个发送字节是从设备的地址+写

接收一帧数据,即向   接收   什么?,其组成如下:

开启    发送一个字节 (从机地址+读)  接收一个应答   接收一个字节(数据)  发送一个应答     接收一个字节(数据)       发送一个应答   .........停止

为了解决向  接收的问题,第一个发送字节是从设备的地址+读

复合格式,就是发送数据帧再接收数据帧,完成向谁接收指定的什么?

开启   发送一个字节(从机地址+写)  接收一个应答    发送一个字节 (数据)    接收一个应答

发送一个字节 (数据)  接收一个应答   +   开启        发送一个字节 (从机地址+读)  接收一个应答        接收一个字节(数据)           发送一个应答         接收一个字节(数据)     发送一个应答........................停止

这就是我对I2C的简单理解了,希望对其他学习者有帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值