I2C总线协议和死锁原因

article/2025/6/17 11:10:58

一、什么是I2C协议

I2C协议是一个允许一主多从进行通讯的协议。它就像串行外设接口(SPI)一样,只能用于短距离通信。又像异步串行接口(如RS232或UART), 只需要两根信号线来交换信息。

实现I2C需要两根信号线完成信息交换,SCL时钟信号线,SDA数据输入/输出线。它属于同步通信,由于输入输出数据均使用一根线,因此通信方向为半双工。

总结:短距离、一主多从、半双工、两根线、同步通讯

二、名词解释

什么是半双工呢?什么是同步通讯?什么是异步通讯?

1 什么是半双工?

数据通信中,数据在线路上的传送方式可以分为单工通信、半双工通信和全双工通信三种。

单工通信:是指消息只能单方向传输的工作方式。例如遥控、遥测(一部分),就是单工通信方式。单工通信信道是单向信道,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。

半双工:是指数据可以沿两个方向传送,但同一时刻一个信道只允许单方向传送,因此又被称为双向交替通信。半双工方式要求收发两端都有发送和接收能力。由于这种方式要频繁变换信道方向,故效率低,但可以节约传输线路。

全双工:是指在通信的任意时刻,线路上可以同时存在A到B和B到A的双向信号传输。在全双工方式下,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在两个方向上传送。全双工方式无需进行方向的切换,因此,没有切换操作所产生的时间延迟,这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。比如,电话机则是一种全双工设备,其通话双方可以同时进行对话。

2.2 什么是同步通讯

同步通信:发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如:在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。如:I2C、SPI等有时钟信号的协议,都属于这种通信方式。

异步通信:接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组,比如:一个字符为一组,数据组配备起始位和结束位。所以这种传输方式的效率是比较低的,因为额外加入了很多的辅助位作为负载,常用在低速的传输中。

同步通信与异步通信区别:

(1)同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。

(2)同步通信效率高,异步通信效率较低。

(3)同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。

(4)同步通信可用于点对多点;异步通信只适用于点对点。

三、I2C的功能特点

I2C最重要的功能包括:

  • 只需要两条总线;
  • 没有严格的波特率要求,例如使用RS232,主设备生成总线时钟;
  • 所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址;
  • I²C是真正的多主设备总线,可提供仲裁和冲突检测;
  • 传输速度:
    • 标准模式:Standard Mode = 100 Kbps
    • 快速模式:Fast Mode = 400 Kbps
    • 高速模式:High speed mode = 3.4 Mbps
    • 超快速模式:Ultra fast mode = 5 Mbps
  • 最大主设备数:无限制;
  • 最大从机数:理论上是127;
  • 标准模式:Standard Mode = 100 Kbps
  • 快速模式:Fast Mode = 400 Kbps
  • 高速模式:High speed mode = 3.4 Mbps
  • 超快速模式:Ultra fast mode = 5 Mbps

四、I2C的高阻态

漏极开路(Open Drain)即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻

高阻状态:高阻状态是三态门电路的一种状态。逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。电路分析时高阻态可做开路理解。

我们知道IIC的所有设备是接在一根总线上的,那么我们进行通信的时候往往只是几个设备进行通信,那么这时候其余的空闲设备可能会受到总线干扰,或者干扰到总线,怎么办呢?

为了避免总线信号的混乱,IIC的空闲状态只能有外部上拉, 而此时空闲设备被拉到了高阻态,也就是相当于断路, 整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其他设备。

五、数据传输协议

主设备和从设备进行数据传输时遵循以下协议格式。数据通过一条SDA数据线在主设备和从设备之间传输0和1的串行数据。串行数据序列的结构可以分为:

1 起始位

当主设备决定开始通讯时,需要发送开始信号,并且执行以下过程:

  • 将SDA线由高电平切换成低电平;
  • 将SCL线由高电平切换成低电平;

在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。

2 地址位

地址位支持7bit、10bit,主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址,故地址为主要用来辨识不同设备。

地址位由主机发送,从设备负责接受并识别该地址是否位自己地址。

3 读写位

由于I2C是半双工通讯,所以设备需要确定数据传输的方向,故引入了读写位。

  • 如果主设备需要将数据发送到从设备,则该位设置为 0;
  • 如果主设备需要往从设备接收数据,则将其设置为 1 ;

读写位由主机发送;1表示读操作,0表示写操作。

4 应答位

I2C最大的一个特点就是有完善的应答机制,从机接收到主机的数据时,会回复一个应答信号来通知主机表示“我收到了”。

应答信号:出现在1个字节传输完成之后,即第9个SCL时钟周期内,此时主机需要释放SDA总线,把总线控制权交给从机,由于上拉电阻的作用,此时总线为高电平,如果从机正确的收到了主机发来的数据,会把SDA拉低,表示应答响应。

非应答信号:当第9个SCL时钟周期时,SDA保持高电平,表示非应答信号。

非应答信号可能是主机产生也可能是从机产生,产生非应答信号的情况主要有以下几种:

  • I2C总线上没有主机所指定地址的从机设备;
  • 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯;
  • 主机发送的一些控制命令,从机不支持;
  • 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了;

5 数据位

I2C数据总线传输要保证在SCL为高电平时,SDA数据稳定,所以SDA上数据变化只能在SCL为低电平时

一次传输的数据总共有8位,由发送方设置,它需要将数据位传输到接收方。

发送之后会紧跟一个ACK / NACK位,如果接收器成功接收到数据,则从机发送ACK。否则,从机发送NACK。

数据可以重复发送多个,直到接收到停止位为止。

6 停止位

当主设备决定结束通讯时,需要发送结束信号,需要执行以下动作:

  • 先将SDA线从低电压电平切换到高电压电平;
  • 再将SCL线从高电平拉到低电平;

总结,写寄存器的标准流程为:

1. Master发起START

2. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK

3. Slave发送ACK

4. Master发送reg addr(8bit),等待ACK

5. Slave发送ACK

6. Master发送data(8bit),即要写入寄存器中的数据,等待ACK

7. Slave发送ACK

8. 第6步和第7步可以重复多次,即顺序写多个寄存器

9. Master发起STOP

读寄存器的标准流程为:

1. Master发送I2C addr(7bit)和w操作1(1bit),等待ACK

2. Slave发送ACK

3. Master发送reg addr(8bit),等待ACK

4. Slave发送ACK

5. Master发起START

6. Master发送I2C addr(7bit)和r操作1(1bit),等待ACK

7. Slave发送ACK

8. Slave发送data(8bit),即寄存器里的值

9. Master发送ACK

10. 第8步和第9步可以重复多次,即顺序读多个寄存器

六、仲裁机制

在多主的通信系统中。总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其他的节点发送控制字节和传送数据。

但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。

I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。

1 SCL线的同步

SCL同步是由于总线具有线 “与” 的逻辑功能(开漏输出),即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号,这就是SCL的同步原理。

2 SDA线的仲裁

总线仲裁是为了解决多设备同时竞争中线控制权的问题,通过一定的裸机来决定哪个设备能够获得最终的总线控制权。

SDA线的仲裁也是建立在总线具有线与逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致(类似于CAN总线的回读机制)。

  • 是,继续发送;
  • 否则,退出竞争;

I2C总线的控制逻辑:低电平优先

SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失,总线系统通过仲裁只允许一个主节点可以继续占据总线。

上图过程分析:

第一个周期:所有设备发送1,做与运算后的结果为1,与自己发送的数据相同,继续发送;

第二个周期:所有设备发送1,做与运算后的结果为1,与自己发送的数据相同,继续发送;

第三个周期:所有设备发送0,做与运算后的结果为0,与自己发送的数据相同,继续发送;

第四个周期:AB设备发送1,C设备发送0,做与运算后结果为0,与AB发送的数据不同,则AB退出竞争,节点C获胜;

注:若AB两个设备发送0,C设备发送1,这最后与运算结果为0,与AB数据格式相同,与C数据格式不同,则C退出,AB继续发送,直至AB中有一个退出。

SDA仲裁和SCL时钟同步处理过程没有先后关系,而是同时进行的。

七、I2C死锁

在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。

在I2C主设备进行读写操作的过程中,主设备在开始信号后控制SCL产生8个时钟脉冲,然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平。

如果这个时候主设备异常复位,SCL就会被释放为高电平。此时,如果从设备没有复位,就会继续I2C的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。

而对于I2C主设备来说,复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为I2C总线被占用,会一直等待SCL和SDA信号变为高电平。

这样,I2C主设备等待从设备释放SDA信号,而同时I2C从设备又在等待主设备将SCL信号拉低以释放应答信号,两者相互等待,I2C总线进人一种死锁状态。

同样,当I2C进行读操作,I2C从设备应答后输出数据,如果在这个时刻I2C主设备异常复位而此时I2C从设备输出的数据位正好为0,也会导致I2C总线进入死锁状态。


http://www.hkcw.cn/article/MkBVPoBHOx.shtml

相关文章

Python爬虫高手必备的8大技巧!

👇我的小册 40章+教程:(小白零基础用Python量化股票分析小册) ,目前已经360多人订阅转自:网络转自:网络 想要快速学习爬虫,最值得学习的语言一定是Python,Python应用场景比较多,比如:Web快速开发、爬虫、自动化运维等等,可以做简单网站、自动发帖脚本、收发邮件脚本、…

干货 | 绩效考核“神器”?战略落地的金钥匙?这个工具你了解多少?

质量管理体系的建立离不开一套可衡量可评价的标准,如何将纷繁复杂的日常运营与服务细节量化体现,确保企业运营过程中的各个环节都能达到预定的质量标准?构建标准之后,如何将指标落地,层层分解,并和管理层与员工的绩效关联,保障服务质量的持续改善提升? 平衡计分卡(Bal…

宋代独善大字草书者——黄庭坚书法合集

点上方蓝色字体一键关注书画 | 篆刻 |鉴藏| 国学 |人文| 历史黄庭坚(1045年-1105年),字鲁直,号山谷道人,晚号涪翁,江西修水人,北宋著名文学家、书法家,为盛极一时的江西诗派开山之祖,与杜甫、陈师道和陈与义素有“一祖三宗”(黄庭坚为其中一宗)之称。与张耒、晁补之…

技嘉B650E AORUS PRO X USB4主板:用料实在,锐龙9000“新座驾”

今年 7 月,为迎接 AMD 锐龙 9000 系列处理器的到来,技嘉推出了一款全新 B650E 主板。其自带 2 个满血 USB4 协议 Type-C 接口以及一系列功能实用性上的改善升级,它就是技嘉 B650E AORUS PRO X USB4 主板(以下简称技嘉 B650E 电竞雕 USB4)。这款新品的表现究竟如何?接下来…

【盛·学堂】年化收益率与年利率傻傻分不清?看这篇就够了!

在我们挑选理财产品时,首先想到的是收益率高的产品,但与收益率相关的名词有好几个,经常傻傻分不清楚。比如货币基金中的“七日年化收益率”跟我们常说的年利率是一回事吗?今天我们就来区分一下年化收益率和年利率。年利率和年化收益率,这两个金融领域的概念,虽然看起来相…

中国34个省级旅游地图大全

中国位于亚洲东部,太平洋西岸,疆域辽阔,人口众多,是世界国土面积第三大国,世界第一大人口国。以北京为首都,包括23个省、5个自治区、4个直辖市、2个特别行政区。中国有5000多年文明史,是世界四大文明古国之一。中华文化源远流长、博大精深。诗词、戏曲、书法、国画等传统…

关联交易全方位解析

王彬 负险不彬 目 录 一、关联交易的界定 (一)关联关系的认定 (二)关联方的认定 (三)关联交易的认定 二、关联交易的监管要求和导向 (一)不正当关联交易的表现 (二)关联交易核查方式 (三)关联交易监管导向 三、各类金融机构关联交易管理 (一)商业银行内部交易/关…

重庆物业费标准2024版发布!如何将天价物业费打下来?

近日,重庆市发改委官网发布了《重庆市政府定价的经营服务性收费目录清单(2024年版)》,明确了多种收费标准。其中附件里包括了住房物业管理费的明细。1.中心城区 有电梯住宅:一级1.00元/平方米月;二级1.30元/平方米月;三级1.60元/平方米月;四级1.90元/平方米月。 无电梯…

国外威客网fiverr注册教程,新手一看就懂

如果你接触过国外平台,那么就应该知道fiverr,这是一个非常知名的自由职业者平台,很多外国人都已经通过这个平台实现了财富自由,甚至也有很多国人也都在这个平台获取到一笔非常不错的收入。 那么今天倪叶明创业工作室详细的教大家如何在fiverr注册一个店铺,这样大家就可以在…

原创2025年五行属什么命 2025属蛇人命运分析

每个人的命运各不相同,就算是同一种属相,他其中也会有金木水火土的差别,如果想要轮换到同一种命,那得经过长达六十年的轮回。而2025年是蛇年,这一年也是属蛇人的本命年,那么在这一年出生的孩子都是什么命呢?一、2025年属蛇人什么命2025年是生于农历乙巳年,天干为乙,地…

北京奥运会冠军陈燮霞:靠作弊获得金牌,被查后如今销声匿迹

声明:本文内容均是根据权威资料结合个人观点撰写的原创内容,在今日头条全网首发72小时,文章中有5秒免费广告可增加创作收益,感谢各位看官点击支持原创,文末已标注文献来源及截图,请知悉。声明:本文内容均是根据权威资料结合个人观点撰写的原创内容,在今日头条全网首发7…

做流程图用什么软件比较好?这八款好用强大的流程图软件别错过!

很多朋友问,做流程图用什么软件比较好?流程图已成为表达思维、组织信息、制定计划和解决复杂问题的重要工具。选择一款合适的流程图软件,能够极大地提升工作效率和沟通效果。做流程图用什么软件比较好?就成为了很多人心中的疑问,本文将为您介绍八款强大而好用的流程图软件…

原创张兰连续炮轰前儿媳,之前曝其出轨,现在说骗婚,大S难得没回应

张兰又双叒叕上热搜了,还是拿前儿媳大S开刀。张兰说的可能都是气话,现在儿子不便说前妻坏话,因为这个恶人必须张兰来做,汪小菲如果激怒了前妻,很难见到两个孩子,孩子是无辜的,所以张兰当恶人,因为大S曾在离婚协议里注明,不准张兰去湾湾看她的孩子,所以每次张兰见孙女…

原创重庆一垃圾车撞垮民房墙壁,当地:被困人员已被救出送医

7月9日,在重庆市石柱土家族自治县大歇镇发生了一起严重的交通事故,一辆垃圾清运车失控撞向了路边的民房,造成了民房严重受损,人员被困。这起突如其来的事故不仅对当地居民的生活造成了影响,也引起了社会的关注和担忧。 根据现场群众拍摄的视频资料,我们可以看到,一辆大型…

Excel单元格内换行,6个快速换行技巧分享!

“我刚刚在编辑一个Excel表格时,想在单元格内进行换行输入,但不知道具体应该怎么操作,有什么比较实用的方法推荐吗?”在Excel中,我们经常需要在一个单元格内输入多行文本,这时候就需要使用到单元格内换行的技巧。Excel单元格内换行怎么操作? 本文给大家总结了6个简单实用…

看了这40幅图,草字你就会写了

草书是我国传统书体的一种,它用减缩笔画、连接字形、并借偏旁等方法,突破了汉字的繁琐笔画和方块体势,书写起来比行书更简便、快速,从而进一步提高了汉字的书写效率。但草书的写法和变化很多,不易辨认,多少年来便已成为专供欣赏的书法艺术而流传下来。 邓散木编写此书法教…

揭秘回复术士的重来人生中的二公主诺伦

在《回复术士的重来人生》这部作品中,有一个角色让人印象深刻,她就是二公主诺伦。她的智商非常高,甚至在男主愈之勇者一周目的时候,就已经看穿了棍勇的真实身份——一个重生的冒险者。然而,她并没有选择复仇,而是选择了观察和等待。 二周目的时候,棍勇已经成为后宫的一员…

丁腈橡胶(NBR)简介

丁腈橡胶(NBR)是一种由丙烯腈和丁二烯单体共聚而成的聚合物,主要通过低温乳液聚合法制备。NBR具有良好的耐油性、耐磨性和耐热性,以及较强的粘接力。然而,它也存在一些缺陷,如较低的耐低温性和耐臭氧性,以及较低的绝缘性能。此外,由于其浅褐色弹性体特性,NBR对脂肪烃油…

19岁花滑女神性侵16岁男队员,还有一个女滑手在边上拍视频…..

83警视 聚焦基层工作生活! 声明:版权归原作者所有,感谢原作者的辛苦创作,如转载涉及版权等问题,请作者与我们联系,我们将在第一时间删除处理。 来源:网络综合(本文内容均引用公开报道。) 来源:上海全知道,ID:i-know021 转载请标明出处 稍微熟悉体育比赛的朋友都知道…

原创十六国时期的苻坚,为何被称作历史上最令人惋惜的帝王?

提到苻坚这个名字,很多对中国古代史不太熟悉的人,可能会觉得有点发懵,想不起来他是谁。就算是很多历史爱好者,对于这个名字的印象,也基本仅限于淝水之战。在淝水之战当中,苻坚带领前秦数十万大军,败给了东晋的数万北府兵。而且,淝水之战打完以后,前秦很快就迅速崩溃,…