一种I2C总线死锁监测、恢复的方法与流程

未命名 07-20 阅读:125 评论:0

一种i2c总线死锁监测、恢复的方法
技术领域
1.本发明涉及i2c技术领域,尤其涉及一种i2c总线死锁监测、恢复的方法。


背景技术:

2.i2c总线是一种简单、双向二线制同步串行总线,scl/sda是i2c总线的信号线,sda为数据线scl为控制线。主机在scl线上产生时钟来传输总线上的报文,sda线传输每个字节必须为8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位。
3.i2c总线在空闲状态时,scl与sda均为高电平。
4.当i2c总线处于空闲状态情况下时,scl为高,sda由高到低的变化为起始信号。
5.当i2c总线传输完数据后,scl为高,sda由低变为高,这个信号为停止信号,停止信号都为主机发出。
6.在i2c总线数据传输中,scl为低时,sda可以进行电平切换,sc l为高时读取sda数据,因此要保持sda数据在scl为高期间的稳定。
7.当i2c总线发送完数据,读完数据,发送完stop信号,都要延时一会,等设备反应。
8.在i2c正常的读写时序中,当遇到操作不当或者在读写操作过程中主机复位的情况时,i2c会出现死锁的情况,此时scl为高,sda一直为低,主设备访问从设备时会一直得到“忙”状态。“忙”状态是指数据未传输完成,处于忙状态时不一定是一直在数据传输,还有可能是iic进入死锁了,主机一直在等从机变为“不忙”,而从机一直在等主机的应答。
9.出现死锁的原因:在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总线进入死锁状态。
10.为了解决现有技术中的不足,本发明提出了一种i2c总线死锁监测、恢复的方法,当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;若i2c主设备确认i2c总线死锁,则启动i2c总线恢复流程,直至i2c总线恢复完成;本发明对i2c总线死锁的监测不影响正常的系统运行;对i2c总线死锁的恢复,不需要增加额外的硬件设施,只需要简单的软件操作。


技术实现要素:

11.为了解决现有技术中的不足,本发明提出了一种i2c总线死锁监测、恢复的方法,
当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;若i2c主设备确认i2c总线死锁,则启动i2c总线恢复流程,直至i2c总线恢复完成;本发明对i2c总线死锁的监测不影响正常的系统运行;对i2c总线死锁的恢复,不需要增加额外的硬件设施,只需要简单的软件操作。
12.为实现上述目的,本发明采用如下的技术方案。
13.在本发明实施例中,提出了一种i2c总线死锁监测、恢复的方法,该方法包括如下步骤:
14.s1当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;
15.s2当i2c主设备确认i2c总线死锁,则启动i2c总线恢复过程;
16.s3i2c主设备在scl线发送一个时钟脉冲来启动i2c总线的死锁恢复;最后在sda发送一个stop信号来实现i2c总线的死锁恢复完成。
17.进一步的,所述i2c总线的死锁检测方法包括:
18.①
i2c主从设备正常读写操作;
19.②
如果i2c从设备返回“忙”状态(sda线状态为低电平),进入步骤

,否则返回步骤


20.③
延时一段时间,i2c主设备再次查看i2c从设备是否还在“忙”状态(sda线状态为低电平),是则进入步骤

,否则返回步骤


21.④
执行步骤



三次,如果i2c从设备一直返回“忙”状态(sda线状态为低电平),则判定为i2c总线死锁。
22.进一步的,所述i2c总线的死锁恢复方法包括:
23.1)i2c主设备在scl线发送一个时钟脉冲;
24.2)i2c主设备读取sda线状态是否为低电平(“忙”状态),如果sda线状态是低电平,则恢复计数器+1,如果恢复计数器大于10,则表示i2c总线死锁恢复失败,否则(即恢复计数器小于等于10)返回步骤1);如果sda线状态是高电平则执行步骤3);
25.3)i2c主设备sda发送一个stop信号,i2c总线死锁恢复完成。
26.本发明的有益效果在于,针对现有的i2c技术领域中存在的问题,提出了一种i2c总线死锁监测、恢复的方法,当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;若i2c主设备确认i2c总线死锁,则启动i2c总线恢复流程,直至i2c总线恢复完成;本发明对i2c总线死锁的监测不影响正常的系统运行;对i2c总线死锁的恢复,不需要增加额外的硬件设施,只需要简单的软件操作。
附图说明
27.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
28.图1为本发明的实现流程示意图;
29.图2为本发明实施例一的i2c总线的装置图;
30.图3为本发明实施例一的i2c总线死锁的监测方法流程图;
31.图4为本发明实施例一的i2c总线死锁恢复的方法流程图。
具体实施方式
32.为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。以下实施用例仅用于更加清楚地说明本发明的系统方法及技术方案,而不能以此来限制本技术的保护范围。
33.根据本发明的实施方式,本发明提出了一种i2c总线死锁监测、恢复的方法,当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;若i2c主设备确认i2c总线死锁,则启动i2c总线恢复流程,直至i2c总线恢复完成;本发明对i2c总线死锁的监测不影响正常的系统运行;对i2c总线死锁的恢复,不需要增加额外的硬件设施,只需要简单的软件操作。
34.下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
35.图1是一种i2c总线死锁监测、恢复的方法的处理流程示意图。如图2所示,该方法包括如下步骤:
36.s1当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;
37.具体实施时,所述i2c总线的死锁检测方法包括:

i2c主从设备正常读写操作;

如果i2c从设备返回“忙”状态,进入步骤

,否则返回步骤



延时一段时间,i2c主设备再次查看i2c从设备是否还在“忙”状态,是则进入步骤

,否则返回步骤



执行步骤



三次,如果i2c从设备一直返回“忙”状态,则判定为i2c总线死锁。
38.s2当i2c主设备确认i2c总线死锁,则启动i2c总线恢复过程;
39.s3i2c主设备在scl线发送一个时钟脉冲来启动i2c总线的死锁恢复;最后在sda发送一个stop信号来实现i2c总线的死锁恢复完成。
40.具体实施时,所述i2c总线的死锁恢复方法包括:
41.①
i2c主设备在scl线发送一个时钟脉冲;
42.②
i2c主设备读取sda线状态是否为低电平(“忙”状态),如果sda线状态是低电平,则恢复计数器+1,如果恢复计数器大于10,则表示i2c总线死锁恢复失败,否则(即恢复计数器小于等于10)返回步骤

;如果sda线状态是高电平则执行步骤


43.③
i2c主设备sda发送一个stop信号,i2c总线死锁恢复完成。
44.需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
45.为了对上述一种i2c总线死锁监测、恢复的方法进行更为清楚的解释,下面结合一个具体的实施例来进行说明,然而值得注意的是该实施例仅是为了更好地说明本发明,并不构成对本发明不当的限定。
46.实施例一:
47.本实施例中i2c总线死锁监测恢复的装置如图2所示,包含i2c主机(主设备)、i2c从机(从设备)。
48.步骤一:当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检
测;
49.具体实施时,i2c总线死锁的监测流程如图3所示:
50.1i2c主从设备正常读写操作;
51.2如果i2c从设备返回“忙”状态,进入步骤

,否则返回步骤


52.3延时一段时间,i2c主设备再次查看i2c从设备是否还在“忙”状态,是则进入步骤

,否则返回步骤


53.具体的,延时时间可以为5ms。
54.4执行步骤



三次,如果i2c从设备一直返回“忙”状态,则判定为i2c总线死锁。
55.步骤二:当i2c主设备确认i2c总线死锁,则启动i2c总线恢复过程;
56.步骤三:i2c主设备在scl线发送一个时钟脉冲来启动i2c总线的死锁恢复;最后在sda发送一个stop信号来实现i2c总线的死锁恢复完成。
57.所述i2c总线的死锁恢复方法为,如图4所示:恢复计数器初始值为0;
58.1)i2c主设备在scl线发送一个时钟脉冲;
59.2)i2c主设备读取sda线状态是否为低电平(“忙”状态),如果sda线状态是低电平,则恢复计数器+1,如果恢复计数器大于10,则表示i2c总线死锁恢复失败,否则(即恢复计数器小于等于10)返回步骤1);如果sda线状态是高电平则执行步骤3);
60.3)i2c主设备sda发送一个stop信号,i2c总线死锁恢复完成。
61.本发明的有益效果在于,针对现有的i2c技术领域中存在的问题,本发明提出了一种i2c总线死锁监测、恢复的方法,当i2c主设备发现i2c从设备返回忙状态时,则触发对i2c总线的死锁检测;若i2c主设备确认i2c总线死锁,则启动i2c总线恢复流程,直至i2c总线恢复完成;本发明对i2c总线死锁的监测不影响正常的系统运行;对i2c总线死锁的恢复,不需要增加额外的硬件设施,只需要简单的软件操作。
62.本发明申请人结合说明书附图对本发明的实施用例做了详细的说明与描述,以上实施用例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。

技术特征:
1.一种i2c总线死锁监测、恢复的方法,其特征在于,该方法包括如下步骤:s1当i2c主设备发现i2c从设备返回“忙”状态时,则触发对i2c总线的死锁检测;s2当i2c主设备确认i2c总线死锁,则启动i2c总线恢复过程;s3 i2c主设备在scl线发送一个时钟脉冲来启动i2c总线的死锁恢复;最后在sda发送一个stop信号来实现i2c总线的死锁恢复完成。2.根据权利要求1所述的一种i2c总线死锁监测、恢复的方法,其特征在于:所述i2c总线的死锁检测方法包括:

i2c主从设备正常读写操作;

如果i2c从设备返回“忙”状态,进入步骤

,否则返回步骤



延时一段时间,i2c主设备再次查看i2c从设备是否还在“忙”状态,是则进入步骤

,否则返回步骤



执行步骤



三次,如果i2c从设备一直返回“忙”状态,则判定为i2c总线死锁。3.根据权利要求1或2所述的一种i2c总线死锁监测、恢复的方法,其特征在于:所述i2c总线的死锁恢复方法包括:1)i2c主设备在scl线发送一个时钟脉冲;2)i2c主设备读取sda线状态是否为低电平,如果sda线状态是低电平,则恢复计数器+1,如果恢复计数器大于10,则表示i2c总线死锁恢复失败,否则返回步骤1);如果sda线状态是高电平则执行步骤3);3)i2c主设备sda发送一个stop信号,i2c总线死锁恢复完成。

技术总结
本发明提出了一种I2C总线死锁监测、恢复的方法,当I2C主设备发现I2C从设备返回忙状态时,则触发对I2C总线的死锁检测;若I2C主设备确认I2C总线死锁,则启动I2C总线恢复流程,直至I2C总线恢复完成;本发明对I2C总线死锁的监测不影响正常的系统运行;对I2C总线死锁的恢复,不需要增加额外的硬件设施,只需要简单的软件操作。软件操作。软件操作。


技术研发人员:单光瑞 徐婷 张钰金 徐峥 贺海浪 张亚斌 吴含青 黄灵通 吴闯 杭俊锋 吴宁 王萌萌 陈通 朱剑 裔俊 吴亚迪 曾俊 宁赛赛 张丹丹 宋骥 华龙元 邰伦杰 周志娴 仲炜康 赵祖光 邹明 袁钢
受保护的技术使用者:江苏三口井信息科技有限公司
技术研发日:2023.03.02
技术公布日:2023/7/19
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐