CN102073613B - 一种消除i2c总线死锁的装置及方法 - Google Patents
一种消除i2c总线死锁的装置及方法 Download PDFInfo
- Publication number
- CN102073613B CN102073613B CN 201010606296 CN201010606296A CN102073613B CN 102073613 B CN102073613 B CN 102073613B CN 201010606296 CN201010606296 CN 201010606296 CN 201010606296 A CN201010606296 A CN 201010606296A CN 102073613 B CN102073613 B CN 102073613B
- Authority
- CN
- China
- Prior art keywords
- bus
- clock
- equipment
- gate
- scl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明提供了一种消除I2C总线死锁的装置,该装置的检测单元检测到SCL处于高电平,SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至时钟单元;时钟单元根据时钟触发信号产生时钟信号,输出时钟信号至SCL。本发明还提供了一种消除I2C总线死锁的方法,该方法在检测到SCL处于高电平,SDA处于低电平的时间超过预设的第一阈值,产生一时钟信号并输出至SCL;检测到SDA恢复至高电平,停止输出时钟信号。采用上述装置及方法,在降低成本的同时,消除I2C总线死锁,提高I2C总线的稳定性和可靠性。
Description
技术领域
本发明涉及通讯技术,特别涉及一种消除I2C总线死锁的装置及方法。
背景技术
集成电路间互连总线(Inter-IC Bus,I2C)是一种由飞利浦(Philips)公司开发的一套串行总线,用于连接微控制器及其外围设备。I2C总线有两根信号线,一根时钟线SCL,一根双向数据线SDA。所有接到I2C总线上的设备的时钟线SCL均连接到I2C总线中的SCL,所有接到I2C总线上的设备的数据线SDA都连接到I2C总线中的双向数据线SDA。在I2C总线中,当某个设备生成总线上的时钟信号SCK并发起数据传输时,被称为发送设备或主设备,某个设备从总线上接收控制信息或数据时,被称为接收设备或从设备。主设备或发送设备用于启动总线,产生时钟信号并传送数据,此时任何被主设备或发送设备寻址的设备被认为是从设备或接收设备。
I2C总线上连接有至少一个主设备和至少一个从设备。只有I2C总线上的主设备才能对I2C总线实现管理和检测,即产生起始信号(S)和停止信号(P);在时钟线SCL保持高电平期间,双向数据线SDA上出现由高电平向低电平的变化,用于启动I2C总线,为I2C总线的起始信号(S);在时钟线SCL保持高电平期间,双向数据线SDA上出现由低电平向高电平的变化,用于停止I2C总线,为I2C总线的停止信号(P)。I2C总线工作时,由总线上的主设备控制时钟线SCL提供时钟同步脉冲信号,由双向数据线SDA完成数据传送。
I2C总线本身不会死锁,但如果两根信号线中至少有一根信号线被拉低成低电平,连接到I2C总线上的主设备和/或从设备就无法正常工作,即连接到I2C总线上的主设备和/或从设备被死锁,这时,I2C总线就产生死锁。比如:主设备故障会导致SCL被拉低成低电平,此时,连接到I2C总线上的其它主设备无法利用SCL传输时钟信号至其所属的从设备,连接到I2C总线上的主设备会由于SCL被拉低成低电平而死锁;或者,连接到I2C总线上的某一设备发生故障导致SDA被拉低成低电平,此时,连接到I2C总线上的从设备无法利用SDA传输数据至主设备,连接到I2C总线上的从设备会由于SDA被拉低成低电平而死锁;或者,连接到I2C总线上的某些设备发生故障导致SCL和SDA被同时拉低,此时,连接到I2C总线上的主设备和从设备都被死锁。
申请号为200510089959.8的发明专利申请公开了一种避免I2C总线锁定的方法与装置;上述发明专利针对的是主设备复位时,由于SDA输出低电平所造成主设备无法产生起始、停止信号的问题提出的。图1为现有的避免I2C总线锁定的装置,现结合图1,对上述专利申请进行说明,具体为:在主设备101及其从设备102之间的I2C总线上连接有一监控设备103,该监控设备103通过连接到主设备101上的复位线,检测在I2C总线上为读信号期间,是否有主设备101发生复位,如果存在主设备101发生复位的可能性,则由该监控设备103向I2C总线提供至少一次读操作所需的时钟信号数,以避免I2C总线锁定。但是,上述发明专利并不能解决非SDA原因导致的I2C总线锁定的问题;若I2C总线上连接有多个主设备和多个从设备,上述发明专利需要增加多根用以检测复位信号的复位线,不仅增加了系统的成本,而且增加了整个装置信号的复杂性。
综上所述,现有的基于I2C总线的系统可能由于连接于I2C总线上的某一设备的故障,而导致整个系统的I2C总线死锁,降低了I2C总线的可靠性和稳定性,现有的消除I2C总线死锁的方法还有待进一步改进。
发明内容
有鉴于此,本发明的目的在于提供一种消除I2C总线死锁的方法,该方法能够在降低成本的同时,消除I2C总线的死锁,提高I2C总线的可靠性和稳定性。
本发明的目的在于提供一种消除I2C总线死锁的装置,该装置能够在降低成本的同时,消除I2C总线的死锁,提高I2C总线的可靠性和稳定性。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种消除I2C总线死锁的装置,该装置包含:
检测单元,连接I2C总线中的数据线SDA和时钟线SCL;检测到所述SCL处于高电平,检测到所述SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至时钟单元;
时钟单元,连接I2C总线中的时钟线SCL;根据时钟触发信号产生时钟信号,输出时钟信号至所述SCL;所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号。
较佳地,该装置进一步包含:N个可控开关;
所述检测单元进一步记录输出时钟触发信号的次数;在进一步检测到输出时钟触发信号的次数大于一预设次数、且检测到所述SDA仍处于低电平,按照预设排序输出控制信号至所述N个可控开关中的第m可控开关的可控端;在检测到所述SDA仍处于低电平,输出恢复信号至所述第m可控开关的可控端,输出控制信号至所述N个可控开关中的第m+1可控开关的可控端;在检测到所述SDA恢复至高电平后,停止输出控制信号或恢复信号;所述N为连接于I2C总线上的设备的数量,其值为大于等于2的自然数;所述m为大于等于1且小于等于N-1的自然数;
所述N个可控开关中每一可控开关包含两对连接端和一个可控端;所述每一可控开关的可控端连接所述检测单元,两对连接端中任一对的两个连接端分别连接一设备的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL;所述每一可控开关根据可控端接收到的控制信号,控制两对连接端断开与数据连接线、时钟连接线、数据线和时钟线的连接;根据可控端接收到的恢复信号,控制两对连接端恢复与数据连接线、时钟连接线、数据线和时钟线的连接;所述设备为连接于I2C总线的设备。
上述装置中,所述检测单元包括:
第一检测子单元,连接所述SDA、所述SCL、第二检测子单元和所述时钟单元;在检测到所述SCL处于高电平,所述SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至所述时钟单元;记录输出所述时钟触发信号的次数,并输出所述次数至第二检测子单元;
第二检测子单元,连接所述SDA、所述第一检测子单元和所述N个可控开关的可控端,在检测到所述SDA处于低电平且接收到的次数大于一预设次数,按照预设排序输出控制信号至第m可控开关的可控端;在检测到所述SDA仍处于低电平,输出恢复信号至第m可控开关的可控端,输出控制信号至第m+1可控开关的可控端;在检测到所述SDA恢复至高电平,停止输出控制信号或恢复信号。
上述装置中,所述可控开关为晶闸管。
一种消除I2C总线死锁的装置,该装置包含:
检测单元,连接I2C总线的时钟线SCL和数据线SDA;在检测到所述SCL处于低电平的时间超过预设的第二阈值,按照预设排序输出控制信号至M个可控开关中的第n可控开关的可控端;在检测到所述SCL仍处于低电平,输出恢复信号至所述第n可控开关的可控端,输出控制信号至M个可控开关中的第n+1可控开关的可控端;在检测到所述SCL恢复至高电平后,停止输出控制信号或恢复信号;所述M为连接于I2C总线上的设备的数量,其值为大于等于2的自然数;所述n为大于等于1且小于等于M-1的自然数;
M个可控开关,所述M个可控开关中每一可控开关包含两对连接端和一个可控端;所述每一可控开关的可控端连接所述检测单元,两对连接端中任一对的两个连接端分别连接一设备的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL;
所述每一可控开关根据可控端接收到的控制信号,控制两对连接端断开与数据连接线、时钟连接线、数据线和时钟线的连接;根据可控端接收到的恢复信号,控制两对连接端恢复与数据连接线、时钟连接线、数据线和时钟线的连接;所述设备为连接于I2C总线的设备。
上述装置中,所述可控开关为晶闸管。
一种消除I2C总线死锁的方法,该方法包含:
A、检测I2C总线中的时钟线SCL和数据线SDA的状态;
B、检测到所述SCL处于高电平,所述SDA处于低电平的时间超过预设的第一阈值,产生一时钟信号并输出至所述SCL;所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号。
较佳地,步骤B之后进一步包括:
C、检测到输出所述时钟信号的次数大于一预设次数、且检测到所述SDA仍处于低电平,按照预设排序断开连接于I2C总线上的第m个设备;
D、在检测到所述SDA仍处于低电平后,恢复所述第m个设备与I2C总线的连接,断开连接于I2C总线上的第m+1个设备,直至检测到所述SDA恢复至高电平;
所述m为大于等于1且小于等于N-1的自然数;所述N为连接于I2C总线上的设备的数量,其值为大于等于2的自然数。
上述方法中,所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序。
一种消除I2C总线死锁的方法,该方法包含:
A、检测I2C总线中的时钟线SCL和数据线SDA的状态;
B、检测到所述SCL处于低电平的时间超过预设的第二阈值,按照预设排序断开连接于I2C总线上的第n个设备;
C、在检测到所述SCL仍处于低电平,恢复所述第n个设备与I2C总线的连接,断开连接于I2C总线上的第n+1个设备,直至检测到所述SCL恢复至高电平;
所述n为大于等于1且小于等于M-1的自然数;所述M为连接于I2C总线上的设备的数量,其值为大于等于2的自然数。
上述方法中,所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序。
由上述的技术方案可见,本发明提供了一种消除I2C总线死锁的装置及方法,检测单元在检测到SCL处于高电平,SDA处于低电平的时长超过第一阈值,则输出触发控制信号至时钟单元;时钟单元根据检测单元输出的信号产生时钟信号,并输出时钟信号至I2C总线中的时钟线SCL;检测单元在检测到SCL处于低电平的时长超过第二阈值,通过断开设备与I2C总线的连接来查找出现故障的设备,将出现故障的设备隔离出I2C总线。采用本发明的方法及装置,能够在降低成本的同时,消除I2C总线的死锁,提高I2C总线的可靠性和稳定性。
附图说明
图1为现有的避免I2C总线锁定的装置的结构示意图。
图2为本发明消除I2C总线死锁的装置的第一实施例的结构示意图。
图3为本发明消除I2C总线死锁的装置的第二实施例的结构示意图。
图4为本发明消除I2C总线死锁的装置的第三实施例的结构示意图。
图5为本发明消除I2C总线死锁的方法的第一实施例的流程图。
图6为本发明消除I2C总线死锁的方法的第二实施例的流程图。
具体实施方式
为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明提供了一种消除I2C总线死锁的装置及方法,根据检测获得的SCL和SDA的不同状态,采用不同的死锁消除方法及装置;具体地,SCL为低电平的时长超过预设值,通过断开设备与I2C总线的连接来查找出现故障的设备;在SCL为高电平,SDA为低电平的时长超过预设值,通过输出大于一个读数据周期或写数据周期时长的时钟信号至SCL;在检测到SDA为低电平且输出时钟信号的次数超过预设的次数,通过断开设备与I2C总线的连接来查找出现故障的设备,以使SDA恢复至高电平。
图2为本发明消除I2C总线死锁的装置的第一实施例的结构示意图。现结合图2,对本发明第一实施例的装置进行说明,具体如下:
为了表述清楚,先对I2C总线上连接的设备进行说明,具体为:I2C总线上并联连接有N个设备;所述N为大于等于2的自然数;所述N个设备包含至少一个主设备和至少一个从设备。如图2所示,主设备20、主设备2I、从设备22和从设备23并联连接于I2C总线上,换句话说,主设备20、主设备21、从设备22和从设备23分别包含两连接线,每一设备的两连接线中,与I2C总线中的SDA连接的连接线称为数据连接线,与I2C总线中的SCL连接的连接线称为时钟连接线。
本发明消除I2C总线死锁的装置24连接于I2C总线上,包含检测单元241和时钟单元242。
检测单元241连接SDA、SCL和时钟单元242;用于检测SCL和SDA的状态,并根据检测结果触发时钟单元242的工作。检测单元241在检测到SCL处于高电平后,检测SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至时钟单元242。第一阈值为用以判定读数据或写数据过程中I2C总线是否发生死锁的时长;其大小需根据实际I2C总线工作频率而定,大于I2C总线一个读数据周期的时间或一个写数据周期的时间,一般可设定为I2C总线一个读数据周期时间的2至3倍,或设定为I2C总线一个写数据周期时间的2至3倍。
时钟单元242连接SCL;根据接收到的时钟触发信号产生时钟信号,输出时钟信号至SCL。所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号。时钟单元242可采用现有的能够根据控制信号产生时钟信号的元器件,在此不再对其结构进行赘述。
在主设备输出至SCL的时钟信号的时长不够完成一次读数据或写数据操作时,检测单元241对SCL和SDA的状态检测结果为实施例一中的情况,即SCL处于高电平而SDA处于低电平的时长超过第一阈值;此时,检测单元241触发时钟单元242输出时钟信号至SCL,以完成上述未完成的读数据或写数据操作,以消除I2C总线死锁的问题,使得其余主设备和/或从设备能够正常工作,提高了I2C总线的可靠性和稳定性。
图3为本发明消除I2C总线死锁的装置的第二实施例的结构示意图。现结合图3,对本发明第二实施例的装置进行说明,具体如下:
为了表述清楚,先对I2C总线上连接的设备进行说明,具体为:I2C总线上连接有N个设备;所述N为大于等于2的自然数;所述N个设备包含至少一个主设备和至少一个从设备。如图2所示,主设备20、主设备21、从设备22和从设备23并联连接于I2C总线上,换句话说,主设备20、主设备21、从设备22和从设备23分别包含两连接线,每一设备的两连接线中,与I2C总线中的SDA连接的连接线称为数据连接线,与I2C总线中的SCL连接的连接线称为时钟连接线。
本发明消除I2C总线死锁的装置34包含检测单元341、时钟单元342和N个可控开关。
检测单元341连接数据线SDA、时钟线SCL、时钟单元342和N个可控开关;用于根据检测获得的SCL和SDA的状态,触发时钟单元342或N个可控开关。检测单元341在检测到SCL处于高电平,检测到SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至时钟单元242。第一阈值为用以判定读数据或写数据过程中I2C总线是否发生死锁的时长;其大小需根据实际I2C总线工作频率而定,大于I2C总线一个读数据周期的时间或一个写数据周期的时间,一般可设定为I2C总线一个读数据周期时间的2至3倍,或设定为I2C总线一个写数据周期时间的2至3倍。
检测单元341记录输出时钟触发信号的次数;在检测到输出时钟触发信号的次数大于一预设次数、且SDA处于低电平,按照预设排序输出控制信号至第m可控开关的可控端;在检测到SDA仍处于低电平,输出恢复信号至第m可控开关的可控端,输出控制信号至第m+1可控开关的可控端,直至检测到SDA恢复至高电平,停止输出控制信号或恢复信号。所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序;比如:主设备20、...、主设备21至从设备22、...、从设备23的排序。所述预设次数可根据具体需要进行设置,一般可设定为3至5次。
时钟单元342连接SCL;根据接收到的时钟触发信号产生时钟信号,输出时钟信号至SCL。所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号。时钟单元342可采用现有的能够根据控制信号产生时钟信号的元器件,在此不再对其结构进行赘述。
N个可控开关中每一可控开关包含两对连接端和一可控端;每一可控开关的可控端连接检测单元341,两对连接端中任一对的两个连接端分别连接一设备的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL。所述设备为连接于I2C总线上的主设备或从设备。比如:第一可控开关343的两对连接端中任一对的两个连接端分别连接主设备20的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL,可控端连接检测单元341;第m可控开关344的两对连接端中任一对的两个连接端分别连接主设备21的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL,可控端连接检测单元341;第m+1可控开关345的两对连接端中任一对的两个连接端分别连接从设备22的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL,可控端连接检测单元341;第N可控开关346的两对连接端中任一对的两个连接端连接从设备23的数据连接线和时钟连接线,另一对的两个连接端连接I2C总线的数据线SDA和时钟线SCL,可控端连接检测单元341。所述m为大于等于1且小于等于N-1的自然数。
N个可控开关中每一可控开关根据可控端接收到的控制信号,控制两对连接端断开与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接;根据可控端接收到的恢复信号,控制两对连接端恢复与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接。当可控开关断开与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接时,所述可控开关连接的设备断开与I2C总线的连接;当可控开关恢复与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接时,所述可控开关连接的设备连接于I2C总线上。
其中,检测单元341包含第一检测子单元3411和第二检测子单元3412。
第一检测子单元3411连接SCL、SDA、第二检测子单元3412和时钟单元342,在检测到SCL处于高电平,检测到SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至时钟单元342。第一检测子单元3411还记录输出时钟触发信号的次数,并将输出时钟触发信号的次数发送给第二检测子单元3412。
第二检测子单元3412连接SDA、第一检测子单元3412和N个可控开关的可控端;在检测到SDA处于低电平且接收到的输出时钟触发信号的次数大于一预设的次数,按照预设排序输出控制信号至第m可控开关的可控端,在检测到SDA仍处于低电平后,输出恢复信号至第m可控开关的可控端,输出控制信号至第m+1可控开关的可控端;直至检测到SDA恢复至高电平后,停止输出控制信号或恢复信号。
本发明的第二实施例中,若持续多次输出时钟信号至SCL后,SDA仍处于低电平,则连接于I2C总线的设备出现故障,检测单元341通过断开连接于I2C总线上的任一设备后,判断SDA是否恢复至高电平,来查找出现故障的设备,进而将出现故障的设备隔离出I2C总线,以消除I2C总线死锁,提高了I2C总线的可靠性和稳定性。
图4为本发明消除I2C总线死锁的装置的第三实施例的结构示意图。现结合图4,对本发明第三实施例的装置进行说明,具体如下:
为了表述清楚,先对I2C总线上连接的设备进行说明,具体为:I2C总线上并联连接有M个设备;所述M为大于等于2的自然数;所述M个设备包含至少一个主设备和至少一个从设备。如图4所示,主设备20、主设备21、从设备22和从设备23并联连接于I2C总线上,换句话说,主设备20、主设备21、从设备22和从设备23分别包含两连接线,每一设备的两连接线中,与I2C总线中的SDA连接的连接线称为数据连接线,与I2C总线中的SCL连接的连接线称为时钟连接线。
本发明消除I2C总线死锁的装置44包含检测单元441和M个可控开关。
检测单元441连接SDA、SCL和N个可控开关;用于根据检测获得的SCL和SDA的状态,触发N个可控开关。检测单元441检测到SCL处于低电平的时间超过预设的第二阈值,按照预设排序输出控制信号至第n可控开关的可控端,在检测到SCL仍处于低电平后,输出恢复信号至第n可控开关的可控端,输出控制信号至第n+1可控开关的可控端;直至检测到SCL恢复至高电平后,停止输出控制信号或恢复信号。所述第二阈值为用以判定向SCL输出时钟信号的过程中I2C总线是否发生死锁的时长,其大小需根据实际I2C总线工作频率而定,大于I2C总线一个读数据周期的时间或一个写数据周期的时间,一般可设定为I2C总线一个读数据周期时间的2至3倍,或设定为I2C总线一个写数据周期时间的2至3倍。所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序;比如:主设备20、...、主设备21至从设备22、...、从设备23的排序。
M个可控开关中每一可控开关包含两连接端和一可控端;每一可控开关的可控端连接检测单元441,两连接端中任一连接端连接一设备的数据连接线,另一连接端连接该设备的时钟连接线。所述设备为连接于I2C总线上的主设备或从设备。比如:第一可控开关442的两连接端中任一连接端连接主设备20的数据连接线,另一连接端连接主设备20的时钟连接线,可控端连接检测单元441;第n可控开关443的两连接端中任一连接端连接主设备21的数据连接线,另一连接端连接主设备21的时钟连接线,可控端连接检测单元441;第n+1可控开关444的两连接端中任一连接端连接从设备22的数据连接线,另一连接端连接从设备22的时钟连接线,可控端连接检测单元441;第M可控开关346的两连接端中任一连接端连接从设备23的数据连接线,另一连接端连接从设备23的时钟连接线,可控端连接检测单元441。所述n为大于等于1且小于等于M-1的自然数。
M个可控开关中每一可控开关根据可控端接收到的控制信号,控制两对连接端断开与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接;根据可控端接收到的恢复信号,控制两对连接端恢复与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接。当可控开关断开与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接时,所述可控开关连接的设备断开与I2C总线的连接;当可控开关恢复与数据连接线、时钟连接线、数据线SDA和时钟线SCL的连接时,所述可控开关连接的设备连接于I2C总线上。
本发明的第三实施例中,在连接于I2C总线的设备出现故障时,SCL可能处于低电平,检测单元441通过断开连接于I2C总线上的任一设备后SCL是否恢复至高电平,来查找出现故障的设备,进而将出现故障的设备隔离出I2C总线,以消除I2C总线死锁,提高了I2C总线的可靠性和稳定性。
图5为本发明消除I2C总线死锁的方法的第一实施例的流程图。现结合图5,对本发明消除I2C总线死锁的方法的第一实施例进行说明,具体如下:
步骤501:检测I2C总线中的数据线SDA和时钟线SCL的状态;
所述数据线SDA和时钟线SCL的状态为高电平或低电平。
步骤502:判断所述SDA处于低电平的时间是否超过预设的第一阈值,如果是,执行步骤503,否则执行步骤504;
该步骤中,在检测到SCL处于高电平,SDA处于低电平时,判断SDA处于低电平的时间是否超过预设的第一阈值。
第一阈值为用以判定读数据或写数据过程中I2C总线是否发生死锁的时长;其大小需根据实际I2C总线工作频率而定,大于一个I2C总线一个读/写周期时间,一般可设定为I2C总线一个读/写周期时间的2~3倍。
步骤503:产生时钟信号并输出至所述SCL;
所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号。
步骤504:结束。
在步骤503之后进一步包含:
检测到所述SDA处于低电平且输出时钟信号的次数大于一预设次数,按照预设排序断开连接于I2C总线上的第m个设备;在检测到所述SCL仍处于低电平后,恢复所述第m个设备与I2C总线的连接,断开连接于I2C总线上的第m+1个设备;直至检测到所述SCL恢复至高电平后,停止断开I2C总线上设备的连接。其中,第m个设备连接有第m可控开关;所述m为大于等于1且小于等于N-1的自然数。
图6为本发明消除I2C总线死锁的方法的第二实施例的流程图。现结合图6,对本发明消除I2C总线死锁的方法的第二实施例进行说明,具体如下:
步骤601:检测I2C总线中的数据线SDA和时钟线SCL的状态;
所述数据线SDA和时钟线SCL的状态为高电平或低电平。
步骤602:判断SCL处于低电平的时间是否超过预设的第二阈值,如果是,执行步骤603,否则执行步骤607;
该步骤中,不论SDA是高电平还是低电平,只要SCL处于低电平的时间超过预设的第二阈值,就执行步骤603。
第二阈值为用以判定读数据或写数据过程中I2C总线是否发生死锁的时长;其大小需根据实际I2C总线工作频率而定,大于一个I2C总线一个读/写周期时间,一般可设定为I2C总线一个读/写周期时间的2~3倍。
步骤603:按照预设排序断开连接于I2C总线上的第n个设备;
该步骤中,第n个设备连接有第n可控开关;所述n为大于等于1且小于等于M-1的自然数;所述M为连接于I2C总线上的设备的数量,其值为大于等于2的自然数。
所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序。
步骤604:判断SCL是否于低电平,如果是,执行步骤605,否则执行步骤607;
通过对SCL的持续检测,判断SCL是否处于低电平。
步骤605:恢复所述第n个设备与I2C总线的连接;
步骤606:n值增1,之后执行步骤603;
步骤607:结束。
本发明的上述较佳实施例中,通过SCL和SDA的不同状态的检测结果采用不同的消除死锁的方法,在检测到SCL处于低电平的时长超过第二阈值时,断开连接于I2C总线上的设备来查找发生故障的设备,在检测到SCL恢复至高电平时,确定SCL恢复至高电平前被断开的设备发生故障,保持设备断开的状态,以消除I2C总线死锁;在检测到SCL处于高电平,而SDA处于低电平的时长超过第一阈值时,产生一特定时长的时钟信号并输出至SCL,以完成读数据或写数据操作,消除I2C总线死锁;在检测到SCL处于高电平,SDA处于低电平,且输出时钟信号的次数大于预设次数,断开连接于I2C总线上的设备来查找发生故障的设备,在检测到SDA恢复至高电平时,确定SDA恢复至高电平前被断开的设备发生故障,保持设备断开的状态,以消除I2C总线死锁。本发明的方法及装置能够解决任何原因导致的I2C总线死锁问题,提高了I2C总线的稳定性和可靠性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (9)
1.一种消除I2C总线死锁的装置,其特征在于,该装置包含:
检测单元,连接I2C总线中的数据线SDA和时钟线SCL;检测到所述SCL处于高电平,检测到所述SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至时钟单元;所述第一阈值为I2C总线一个读数据周期时间的2至3倍,或I2C总线一个写数据周期时间的2至3倍;检测单元还用于记录输出时钟触发信号的次数;在检测到输出时钟触发信号的次数大于一预设次数、且检测到所述SDA仍处于低电平,按照预设排序输出控制信号至N个可控开关中的第m可控开关的可控端;在检测到所述SDA仍处于低电平,输出恢复信号至所述第m可控开关的可控端,输出控制信号至所述N个可控开关中的第m+1可控开关的可控端;在检测到所述SDA恢复至高电平后,停止输出控制信号或恢复信号;所述N为连接于I2C总线上的设备的数量,其值为大于等于2的自然数;所述m为大于等于1且小于等于N-1的自然数;
时钟单元,连接I2C总线中的时钟线SCL;根据时钟触发信号产生时钟信号,输出时钟信号至所述SCL;所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号;
N个可控开关,其中每一可控开关包含两对连接端和一个可控端;所述每一可控开关的可控端连接所述检测单元,两对连接端中任一对的两个连接端分别连接一设备的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL;所述每一可控开关根据可控端接收到的控制信号,控制两对连接端断开与数据连接线、时钟连接线、数据线和时钟线的连接;根据可控端接收到的恢复信号,控制两对连接端恢复与数据连接线、时钟连接线、数据线和时钟线的连接;所述设备为连接于I2C总线的设备。
2.根据权利要求1所述的装置,其特征在于,所述检测单元包括:
第一检测子单元,连接所述SDA、所述SCL、第二检测子单元和所述时钟单元;在检测到所述SCL处于高电平,所述SDA处于低电平的时间超过预设的第一阈值,输出时钟触发信号至所述时钟单元;记录输出所述时钟触发信号的次数,并输出所述次数至第二检测子单元;
第二检测子单元,连接所述SDA、所述第一检测子单元和所述N个可控开关的可控端,在检测到所述SDA处于低电平且接收到的次数大于一预设次数,按照预设排序输出控制信号至第m可控开关的可控端;在检测到所述SDA仍处于低电平,输出恢复信号至第m可控开关的可控端,输出控制信号至第m+1可控开关的可控端;在检测到所述SDA恢复至高电平,停止输出控制信号或恢复信号。
3.根据权利要求1或2所述的装置,其特征在于,所述可控开关为晶闸管。
4.一种消除I2C总线死锁的装置,其特征在于,该装置包含:
检测单元,连接I2C总线的时钟线SCL和数据线SDA;在检测到所述SCL处于低电平的时间超过预设的第二阈值,按照预设排序输出控制信号至M个可控开关中的第n可控开关的可控端;在检测到所述SCL仍处于低电平,输出恢复信号至所述第n可控开关的可控端,输出控制信号至M个可控开关中的第n+1可控开关的可控端;在检测到所述SCL恢复至高电平后,停止输出控制信号或恢复信号;所述M为连接于I2C总线上的设备的数量,其值为大于等于2的自然数;所述n为大于等于1且小于等于M-1的自然数;
M个可控开关,所述M个可控开关中每一可控开关包含两对连接端和一个可控端;所述每一可控开关的可控端连接所述检测单元,两对连接端中任一对的两个连接端分别连接一设备的数据连接线和时钟连接线,另一对的两个连接端分别连接I2C总线的数据线SDA和时钟线SCL;
所述每一可控开关根据可控端接收到的控制信号,控制两对连接端断开与数据连接线、时钟连接线、数据线和时钟线的连接;根据可控端接收到的恢复信号,控制两对连接端恢复与数据连接线、时钟连接线、数据线和时钟线的连接;所述设备为连接于I2C总线的设备。
5.根据权利要求4所述的装置,其特征在于,所述可控开关为晶闸管。
6.一种消除I2C总线死锁的方法,其特征在于,该方法包含:
A、检测I2C总线中的时钟线SCL和数据线SDA的状态;
B、检测到所述SCL处于高电平,所述SDA处于低电平的时间超过预设的第一阈值,产生一时钟信号并输出至所述SCL;所述时钟信号包含完成至少一个读数据周期或写数据周期所需的时钟信号;
C、检测到输出所述时钟信号的次数大于一预设次数、且检测到所述SDA仍处于低电平,按照预设排序断开连接于I2C总线上的第m个设备;
D、在检测到所述SDA仍处于低电平后,恢复所述第m个设备与I2C总线的连接,断开连接于I2C总线上的第m+1个设备,直至检测到所述SDA恢复至高电平;
所述m为大于等于1且小于等于N-1的自然数;所述N为连接于I2C总线上的设备的数量,其值为大于等于2的自然数。
7.根据权利要求6所述的方法,其特征在于,所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序。
8.一种消除I2C总线死锁的方法,其特征在于,该方法包含:
A、检测I2C总线中的时钟线SCL和数据线SDA的状态;
B、检测到所述SCL处于低电平的时间超过预设的第二阈值,按照预设排序断开连接于I2C总线上的第n个设备;
C、在检测到所述SCL仍处于低电平,恢复所述第n个设备与I2C总线的连接,断开连接于I2C总线上的第n+1个设备,直至检测到所述SCL恢复至高电平;
所述n为大于等于1且小于等于M-1的自然数;所述M为连接于I2C总线上的设备的数量,其值为大于等于2的自然数。
9.根据权利要求8所述的方法,其特征在于,所述预设排序为按照地址设置的由连接于I2C总线上的主设备至连接于I2C总线上的从设备的排序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010606296 CN102073613B (zh) | 2010-12-15 | 2010-12-15 | 一种消除i2c总线死锁的装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010606296 CN102073613B (zh) | 2010-12-15 | 2010-12-15 | 一种消除i2c总线死锁的装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102073613A CN102073613A (zh) | 2011-05-25 |
CN102073613B true CN102073613B (zh) | 2013-05-08 |
Family
ID=44032158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010606296 Active CN102073613B (zh) | 2010-12-15 | 2010-12-15 | 一种消除i2c总线死锁的装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102073613B (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521187B (zh) * | 2011-11-29 | 2014-05-28 | 广东东研网络科技股份有限公司 | 一种i2c总线通信死锁解决方法 |
US8959268B2 (en) * | 2012-03-09 | 2015-02-17 | Canon Kabushiki Kaisha | Information processing apparatus, serial communication system, method of initialization of communication therefor and serial communication apparatus |
CN103678198B (zh) * | 2012-09-14 | 2017-07-07 | 京信通信系统(中国)有限公司 | 总线的锁定解除方法、装置及系统 |
CN103856381A (zh) * | 2012-11-28 | 2014-06-11 | 苏州工业园区新宏博通讯科技有限公司 | 自动恢复热插拔i2c总线锁死的方法、装置和系统 |
CN103412531B (zh) * | 2013-07-30 | 2016-09-07 | 华为数字技术(苏州)有限公司 | 一种总线控制方法及装置 |
CN103645975B (zh) * | 2013-11-28 | 2016-06-15 | 华为技术有限公司 | 一种异常恢复的方法及串行总线传输装置 |
JP6370132B2 (ja) * | 2014-07-01 | 2018-08-08 | 西部電機株式会社 | 通信異常検出装置、通信異常検出方法及びプログラム |
CN105589821B (zh) * | 2014-10-20 | 2019-03-12 | 深圳市中兴微电子技术有限公司 | 一种防止总线死锁的装置及方法 |
US20180196679A1 (en) * | 2015-06-29 | 2018-07-12 | Thomson Licensing | Initialization method for use in i2c system and master device |
US10310580B2 (en) * | 2015-10-09 | 2019-06-04 | Sandisk Technologies Llc | Voltage level detection and analog circuit arrangements for memory systems |
CN105335328B (zh) * | 2015-10-30 | 2019-07-16 | 上海斐讯数据通信技术有限公司 | 一种背板i2c总线死锁的消除方法、系统及电子设备 |
CN106201984A (zh) * | 2016-07-15 | 2016-12-07 | 青岛海信电器股份有限公司 | 一种数据读取方法及装置 |
CN106528460B (zh) * | 2016-10-11 | 2019-07-19 | Oppo广东移动通信有限公司 | 终端设备的初始化控制方法、装置和终端设备 |
CN106776054A (zh) * | 2016-12-27 | 2017-05-31 | 东莞新能德科技有限公司 | 一种死锁检测方法、装置和电路 |
KR102554978B1 (ko) * | 2017-02-14 | 2023-07-14 | 소니 세미컨덕터 솔루션즈 가부시키가이샤 | 통신 장치, 통신 방법, 프로그램, 및, 통신 시스템 |
CN106953735A (zh) * | 2017-04-27 | 2017-07-14 | 珠海格力电器股份有限公司 | Iic总线解锁方法及基于iic总线的通信系统 |
CN107562668B (zh) * | 2017-08-31 | 2019-02-12 | Oppo广东移动通信有限公司 | 总线死锁恢复系统和方法 |
CN108170627A (zh) * | 2017-12-12 | 2018-06-15 | 晶晨半导体(上海)股份有限公司 | 一种通过时钟信号控制的数据传输方法 |
EP3537307A4 (en) * | 2018-01-09 | 2019-12-25 | Shenzhen Goodix Technology Co., Ltd. | METHOD FOR HANDLING THE I2C BUS BLOCKING, ELECTRONIC DEVICE AND COMMUNICATION SYSTEM |
CN108563598A (zh) * | 2018-03-02 | 2018-09-21 | 上海芯导电子科技有限公司 | 一种自唤醒的i2c通讯架构系统 |
CN111382018A (zh) * | 2018-12-29 | 2020-07-07 | 上海复控华龙微系统技术有限公司 | 串行通信的故障检测方法及装置、可读存储介质 |
TWI714207B (zh) * | 2019-08-13 | 2020-12-21 | 智原科技股份有限公司 | 運用於ic匯流排的開始與結束偵測裝置與方法 |
CN110609762B (zh) * | 2019-09-24 | 2021-04-27 | 深圳市航顺芯片技术研发有限公司 | 一种防止先进高性能总线(ahb)死锁的方法及装置 |
CN110990313B (zh) * | 2019-11-29 | 2021-07-30 | 苏州浪潮智能科技有限公司 | 一种i3c总线处理时钟拉伸的方法、设备以及存储介质 |
CN110908841B (zh) * | 2019-12-03 | 2022-09-20 | 锐捷网络股份有限公司 | 一种i2c通信异常恢复方法及装置 |
CN111061587A (zh) * | 2019-12-12 | 2020-04-24 | 浪潮商用机器有限公司 | 一种i2c总线的通信控制方法、装置、设备及存储介质 |
CN111221765A (zh) * | 2019-12-31 | 2020-06-02 | 苏州浪潮智能科技有限公司 | 一种防止i2c总线地址冲突的通信方法及通信系统 |
CN111737183A (zh) * | 2020-08-05 | 2020-10-02 | 苏州浪潮智能科技有限公司 | 一种服务器及一种i2c总线的通信故障处理方法和系统 |
CN112131167B (zh) * | 2020-08-21 | 2022-06-21 | 山东云海国创云计算装备产业创新中心有限公司 | 一种基于lpc协议的i2c转发模块、系统及其使用方法 |
CN112187474B (zh) * | 2020-09-27 | 2024-04-09 | 三未信安科技股份有限公司 | 基于iic多主一从通信的密码认证自协商切换系统及方法 |
CN112422178B (zh) * | 2020-10-20 | 2023-02-03 | 浪潮思科网络科技有限公司 | 光模块监控方法、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101118528A (zh) * | 2007-08-31 | 2008-02-06 | 中兴通讯股份有限公司 | 一种i2c总线被从器件锁定后的恢复方法及装置 |
CN101609440A (zh) * | 2008-06-20 | 2009-12-23 | 华为技术有限公司 | 总线系统和总线从锁定状态中恢复的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070240019A1 (en) * | 2005-12-29 | 2007-10-11 | International Business Machines Corporation | Systems and methods for correcting errors in I2C bus communications |
-
2010
- 2010-12-15 CN CN 201010606296 patent/CN102073613B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101118528A (zh) * | 2007-08-31 | 2008-02-06 | 中兴通讯股份有限公司 | 一种i2c总线被从器件锁定后的恢复方法及装置 |
CN101609440A (zh) * | 2008-06-20 | 2009-12-23 | 华为技术有限公司 | 总线系统和总线从锁定状态中恢复的方法 |
Non-Patent Citations (1)
Title |
---|
侯喆等.由于IIC 总线锁死引起保护装置异常的问题分析.《电力系统保护与控制》.2010,第38卷(第7期),第106-108页. * |
Also Published As
Publication number | Publication date |
---|---|
CN102073613A (zh) | 2011-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102073613B (zh) | 一种消除i2c总线死锁的装置及方法 | |
EP1710709B1 (en) | Circuit and method of detecting and resolving stuck 12C buses | |
CN102521187B (zh) | 一种i2c总线通信死锁解决方法 | |
CN101359307B (zh) | Sas信道的测试装置及其测试方法 | |
CN101359309B (zh) | 串行附接小型计算机系统接口硬盘状态指示装置及方法 | |
CN107562668B (zh) | 总线死锁恢复系统和方法 | |
CN100346330C (zh) | 恢复i2c主器件和i2c从器件通讯的方法 | |
CN102130669B (zh) | 一种热插拔模块状态检测方法、系统、装置及网络设备 | |
CN102387074B (zh) | 业务线卡在位检测及复位方法及一种主控制卡和业务线卡 | |
CN211427190U (zh) | 一种基于飞腾处理器2000+的服务器电路和主板 | |
CN106354685A (zh) | 一种psu和me通信i2c总线挂死恢复的实现方法 | |
TW200809521A (en) | Fault-isolating SAS expander | |
US8862792B2 (en) | Retrieving status information from a remote device and corresponding host system | |
CN104346254A (zh) | I2c总线监控装置 | |
CN104135398A (zh) | 一种智能rs485集线器及总线锁死检测方法 | |
CN100426274C (zh) | 避免i2c总线锁定的方法与装置 | |
CN103530215B (zh) | 一种内部集成电路主机的自检方法、装置及主机 | |
CN104101100B (zh) | 热水器及其控制方法 | |
CN101894056A (zh) | 总线工作节点隔离装置及其故障恢复系统和方法 | |
CN101520767A (zh) | 一种数据传输速度自适应的方法及装置 | |
CN112214343B (zh) | 一种基于pca9511芯片的iic挂死的链路恢复电路及方法 | |
CN102841838B (zh) | I2c与sgpio的自动检测装置、系统及其方法 | |
CN116582471B (zh) | Pcie设备、pcie数据捕获系统和服务器 | |
CN105354157A (zh) | 配置iic器件的方法、装置和系统 | |
CN111913903A (zh) | 一种支持NVMe磁盘热插拔的控制系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Room 505, Taixing Building, 11 Garden East Road, Haidian District, Beijing, 100191 Co-patentee after: Shenzhen Innovation Software Technology Co., Ltd. Patentee after: Innovation Technology Co., Ltd. Address before: Room 0801-0810, 51 College Road, Haidian District, Beijing, 100191 Co-patentee before: Chuangxinke Software Technology (Shenzhen) Co., Ltd. Patentee before: Innovation and Technology Storage Technology Co., Ltd. |