I2C通讯协议

1、基本概念

主机 初始化发送,产生时钟信号和终止发送的器件

从机 被主机寻址的器件

发送器 发送数据到总线的器件

接收器 从总线接收数据的器件

多主机 同时有多于一个主机尝试控制总线 但不破坏报文

仲裁 是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程

同步 两个或多个器件同步时钟信号的过程

2、硬件结构

每一个I2C总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管、输入缓冲为一只高输入阻抗的同相器。这种电路具有两个特点:

(1)由于 SDA、SCL 为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑; (2)引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致。为 “时钟同步”和“总线仲裁”提供硬件基础。

3、时钟同步

如果从机希望主机降低传送速度可以通过将SCL主动拉低延长其低电平时间的方法来通知主机,当主机在准备下一次传送发现SCL的电平被拉低时就进行等待,直至从机完成操作并释放SCL线的控制控制权。这样以来,主机实际上受到从机的时钟同步控制。可见SCL线上的低电平是由时钟低电平最长的器件决定;高电平的时间由高电平时间最短的器件决定。这就是时钟同步,它解决了I2C总线的速度同步问题。

4、主机发送数据流程

(1)主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始

(2)主机接着发送一个命令字节。该字节由 7 位的外围器件地址(设备地址)和 1 位读写控制位 R/W组成(此时 R/W=0)

通常最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号中写上面有一横线,表示低电平)

(3)相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)

(4)主机收到从机的应答信号后开始发送第一个字节的数据

(5)从机收到数据后返回一个应答信号 ACK

(6)主机收到应答信号后再发送下一个数据字节

(7)当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信。

注意:主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,停止从机的再次发送)。

I2C位传输 数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit; 若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲) 数据改变:SCL为低电平时,SDA线才能改变传输的bit

I2C开始和结束信号 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

 另外I2C的通信速率为100Kb,快速为400Kb

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CIT极客

【奇淫巧技】各种冷门的实用技巧成就技术帝!

3908
来自专栏前端正义联盟

amazing 真的不错,备份苹果手机系统简直不能再厉害!

2364
来自专栏Java技术

记一次解决业务系统生产环境宕机问题!

Zabbix告警生产环境应用shutdown,通过堡垒机登入生产环境,查看应用容器进程,并发现没有该业务应用的相应进程,第一感觉进程在某些条件下被系统杀死了,然...

641
来自专栏知识分享

7-开发板接入小五物联实现远程控制(Air202模块+单片机)

这一节为教程最终版功能演示,现在不必深究,早晚自己全部都会实现的(静静的跟着我学哈)

3043
来自专栏Hongten

php开发_图片验证码

===========================================================

921
来自专栏向治洪

前端ThinkJS框架解析

Thinkjs 是一个快速、简单的基于MVC和面向对象的轻量级Node.js开发框架,遵循MIT协议发布。秉承简洁易用的设计原则,在保持出色的性能和至简的代码同...

4175
来自专栏腾讯云中间件团队的专栏

Raft 算法原理及其在 CMQ 中的应用(下)

Raft 算法是一种分布式一致性算法。与 paxos 相比,它更易理解和工程化。我们完整实现了该算法并将其应用在自研的高可靠消息中间件 CMQ 中,同时沉淀出对...

8700
来自专栏友弟技术工作室

kafka入门zookeeper-server-start.sh 后面跟配置文件 即可复制配置

Client和Server之间的通讯,是通过一条简单、高性能并且和开发语言无关的TCP协议。并且该协议保持与老版本的兼容。Kafka提供了Java Client...

981
来自专栏云计算

使用HyperForm自动配置虚拟机(第1部分)

原文地址:https://dzone.com/articles/automated-self-service-provisioning-of-virtual-m...

2246
来自专栏向治洪

前端ThinkJS框架解析

Thinkjs 是一个快速、简单的基于MVC和面向对象的轻量级Node.js开发框架,遵循MIT协议发布。秉承简洁易用的设计原则,在保持出色的性能和至简的代码同...

2077

扫码关注云+社区