您的位置 首页 电源

I2C总线死锁原因及解决方法

在正常情况下,I2C总线协议能够保证总线正常的读写操作。但是,当I2C主设备异常复位时(看门狗动作,板上电源异常导致复位芯片动作,手动按

在正常状况下,I2C总线协议可以确保总线正常的读写操作。可是,当I2C主设备反常复位时(看门狗动作,板上电源反常
导致复位芯片动作,手动按钮复位等等)有或许导致I2C总线死锁发生。下面具体阐明一下总线死锁发生的原因。

在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总线进入死锁状况。

办法

(1)尽量选用带复位输人的I2C从器材。

(2)将一切的从I2C设备的电源衔接在一起,经过MOS管衔接到主电源,而MOS管的导通关断由I2C主设备来完结。
(3)在I2C从设备设计看门狗的功用。

(4)在I2C主设备中添加I2C总线康复程序。每次I2C主设备复位后,假如检测到SDA数据线被拉低,则操控I2C中的
SCL时钟线发生9个时钟脉冲(针对8位数据的状况),这样I2C从设备就可以完结被挂起的读操作,从死锁状况在正常状况下,I2C总线协议可以确保总线正常的读写操作。可是,当I2C主设备反常复位时(看门狗动作,板上电源反常
导致复位芯片动作,手动按钮复位等等)有或许导致I2C总线死锁发生。下面具体阐明一下总线死锁发生的原因。

在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总线进入死锁状况。

办法

(1)尽量选用带复位输人的I2C从器材。

(2)将一切的从I2C设备的电源衔接在一起,经过MOS管衔接到主电源,而MOS管的导通关断由I2C主设备来完结。
(3)在I2C从设备设计看门狗的功用。

(4)在I2C主设备中添加I2C总线康复程序。每次I2C主设备复位后,假如检测到SDA数据线被拉低,则操控I2C中的
SCL时钟线发生9个时钟脉冲(针对8位数据的状况),这样I2C从设备就可以完结被挂起的读操作,从死锁状况中康复过来。
这种办法有很大的局限性,由于大部分主设备的I2C模块由内置的硬件电路来完结,软件并不可以直接操控SCL信号模仿
发生需求时钟脉冲。

(5)在I2C总线上添加一个额定的总线康复设备。这个设备监督I2C总线。当设备检测到SDA信号被拉低超越指定时刻
时,就在SCL总线上发生9个时钟脉冲,使I2C从设备完结读操作,从死锁状况上康复出来。总线康复设备需求有具有编程
功用,一般可以用单片机或CPLD完结这一功用。

(6)在I2C上串人一个具有死锁康复的I2C缓冲器,如Linear公司的LTC4307o如图2所示TC4307是一个双向的I2C
总线缓冲器,而且具有I2C总线死锁康复的功用。LTC4307总线输人侧衔接主设备,总线输出侧衔接一切从设备。当LTC4307
检测到输出侧SDA或SCL信号被拉低30ms时,就主动断开I2C总线输人侧与输出侧的衔接.而且在输出侧SCL信号上发生16个时钟脉冲来开释总线。当总线成功康复后,LTC4307会再次衔接输人输出侧,使总线可以正常作业。中康复过来。
这种办法有很大的局限性,由于大部分主设备的I2C模块由内置的硬件电路来完结,软件并不可以直接操控SCL信号模仿
发生需求时钟脉冲。

(5)在I2C总线上添加一个额定的总线康复设备。这个设备监督I2C总线。当设备检测到SDA信号被拉低超越指定时刻
时,就在SCL总线上发生9个时钟脉冲,使I2C从设备完结读操作,从死锁状况上康复出来。总线康复设备需求有具有编程
功用,一般可以用单片机或CPLD完结这一功用。

(6)在I2C上串人一个具有死锁康复的I2C缓冲器,如Linear公司的LTC4307o如图2所示TC4307是一个双向的I2C
总线缓冲器,而且具有I2C总线死锁康复的功用。LTC4307总线输人侧衔接主设备,总线输出侧衔接一切从设备。当LTC4307
检测到输出侧SDA或SCL信号被拉低30ms时,就主动断开I2C总线输人侧与输出侧的衔接.而且在输出侧SCL信号上发生16个时钟脉冲来开释总线。当总线成功康复后,LTC4307会再次衔接输人输出侧,使总线可以正常作业。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/233734.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部