一种解除I2C总线死锁的方法及装置与流程

文档序号:11154928阅读:945来源:国知局
一种解除I2C总线死锁的方法及装置与制造工艺

本发明涉及电子技术领域,尤其涉及一种解除I2C总线死锁的方法及装置。



背景技术:

内部集成电路(Inter Integrated Circuit,I2C)总线是一种双向串行总线,用于连接微控制器及其外围设备,I2C总线有两根信号线,一根是串行数据线(Serial Data Line,SDA),一根是串行时钟线(Serial Clock Line,SCL),所有接到I2C总线上的设备的数据线都连接到I2C总线中的SDA,所有接到I2C总线上的设备的时钟线均连接到I2C总线中的SCL。

为了对I2C总线进行扩展以便于在系统中部署更多的I2C从设备,目前一般采用I2C总线扩展器件对I2C总线进行扩展,具体来说,通过I2C总线扩展器件可以将I2C总线的SDA扩展为多个SDA,以及可以将I2C总线的SCL扩展为多个SCL,即可以将I2C总线的SDA和SCL扩展为多路SDA和SCL,以便可以在I2C总线上挂接更多的从设备,以I2C总线扩展器件是PCA9548A为例,请参见图1,通过一个PCA9548A可以扩展出8路SDA和SCL。

在使用过程中,如果I2C总线扩展器件所连接的I2C从设备出现故障,I2C主机在通过I2C总线扩展器件访问该出现故障的I2C从设备时将会导致I2C总线锁死,处于死锁状态,从而导致系统的整个I2C模块无法正常使用,并且由于I2C总线扩展器件自身也是作为I2C从设备挂接在I2C总线上,所以这时I2C主机也无法再与I2C总线扩展器件进行通信,无法实现I2C总线的扩展功能。



技术实现要素:

本发明实施例提供一种解除I2C总线死锁的方法及装置,用于解决由于I2C总线处于死锁状态而导致I2C模块无法正常使用的技术问题。

一方面,提供一种解除I2C总线死锁的方法,该方法应用主机,所述I2C总线连接有所述主机和I2C总线扩展器件,所述I2C总线扩展器件用于将所述I2C总线的串行数据线SDA和串行数据线SCL扩展成至少两路SDA和SCL,所述方法包括:

若所述I2C总线扩展器件中的第一扩展通道开启后收到关闭指示但未成功关闭,则确定所述I2C总线处于死锁状态;其中,所述第一扩展通道用于在所述第一扩展通道开启时将所述至少两路SDA和SCL中的第一路SDA和SCL提供给第一I2C从设备,以使所述第一I2C从设备通过所述I2C总线与所述主机通信;

通过所述主机上的预设接口向所述I2C总线扩展器件发送复位触发信号,或,控制逻辑器件向所述I2C总线扩展器件发送复位触发信号,以触发所述I2C总线扩展器件进行复位;其中,通过所述I2C总线扩展器件的复位以解除所述I2C总线的所述死锁状态。

可选的,通过所述主机上的预设接口向所述I2C总线扩展器件发送复位触发信号,包括:

生成所述复位触发信号;

通过所述主机的通用输入输出(General Purpose Input Output,GPIO)接口向所述I2C总线扩展器件发送所述复位触发信号。

可选的,控制逻辑器件向所述I2C总线扩展器件发送复位触发信号,包括:

控制所述逻辑器件产生所述复位触发信号;其中,所述逻辑器件分别与所述主机和所述I2C总线扩展器件连接;

指示所述逻辑器件将所述复位触发信号发送给所述I2C总线扩展器件。

可选的,在通过所述主机上的预设接口向所述I2C总线扩展器件发送复位触发信号之前,或在控制逻辑器件向所述I2C总线扩展器件发送复位触发信号之前,所述方法还包括:

根据所述I2C总线扩展器件的器件类型,确定用于触发所述I2C总线扩展器件进行有效复位的复位有效电平;

通过所述主机上的预设接口向所述I2C总线扩展器件发送复位触发信号,或,控制逻辑器件向所述I2C总线扩展器件发送复位触发信号,以触发所述I2C总线扩展器件进行复位,包括:

通过所述预设接口向所述I2C总线扩展器件发送第一预设时长的所述复位有效电平,以使所述I2C总线扩展器件在第二预设时长后完成复位;或

控制所述逻辑器件向所述I2C总线扩展器件发送第一预设时长的所述复位有效电平,以使所述I2C总线扩展器件在第二预设时长后完成复位;

其中,所述第二预设时长小于等于所述第一预设时长。

可选的,在触发所述I2C总线扩展器件进行复位之后,所述方法还包括:

确定所述I2C总线是否已经解除所述死锁状态;

若确定所述I2C总线已经解除所述死锁状态,则确定所述第一I2C从设备发生故障。

另一方面,提供一种装置,该装置通过I2C总线与I2C总线扩展器件连接,I2C总线扩展器件用于将I2C总线的串行数据线SDA和串行数据线SCL扩展成至少两路SDA和SCL;该装置包括:

第一确定模块,用于若所述I2C总线扩展器件中的第一扩展通道开启后收到关闭指示但未成功关闭,则确定所述I2C总线处于死锁状态;其中,所述第一扩展通道用于在所述第一扩展通道开启时将所述至少两路SDA和SCL中的第一路SDA和SCL提供给第一I2C从设备,以使所述第一I2C从设备通过所述I2C总线与所述装置通信;

控制模块,用于通过所述主机上的预设接口向所述I2C总线扩展器件发送复位触发信号,或,控制逻辑器件向所述I2C总线扩展器件发送复位触发信号,以触发所述I2C总线扩展器件进行复位;其中,通过所述I2C总线扩展器件的复位以解除所述I2C总线的所述死锁状态。

可选的,所述控制模块用于:

生成所述复位触发信号;

通过所述主机的通用输入输出GPIO接口向所述I2C总线扩展器件发送所述复位触发信号。

可选的,所述控制模块用于:

控制所述逻辑器件产生所述复位触发信号;其中,所述逻辑器件分别与所述主机和所述I2C总线扩展器件连接;

指示所述逻辑器件将所述复位触发信号发送给所述I2C总线扩展器件。

可选的,所述装置还包括:

第二确定模块,用于在通过所述主机上的预设接口向所述I2C总线扩展器件发送复位触发信号之前,或在控制逻辑器件向所述I2C总线扩展器件发送复位触发信号之前,根据所述I2C总线扩展器件的器件类型,确定用于触发所述I2C总线扩展器件进行有效复位的复位有效电平;

所述控制模块用于:

通过所述预设接口向所述I2C总线扩展器件发送第一预设时长的所述复位有效电平,以使所述I2C总线扩展器件在第二预设时长后完成复位;或

控制所述逻辑器件向所述I2C总线扩展器件发送第一预设时长的所述复位有效电平,以使所述I2C总线扩展器件在第二预设时长后完成复位;

其中,所述第二预设时长小于等于所述第一预设时长。

可选的,所述装置还包括:

第三确定模块,用于在触发所述I2C总线扩展器件进行复位之后,确定所述I2C总线是否已经解除所述死锁状态;

第四确定模块,用于若确定所述I2C总线已经解除所述死锁状态,则确定所述第一I2C从设备发生故障。

本发明实施例提供的解除I2C总线死锁的方法和装置,在I2C总线扩展器件中的第一扩展通道开启的过程中可以关闭第一扩展通道,由于第一扩展通道是用于将I2C总线的SDA和SCL提供给第一I2C从设备以便第一I2C从设备能够与主机进行通信,所以当第一扩展通道无法关闭时则可以认为I2C总线的SDA一直处于拉低的状态,这样就会导致I2C总线处于死锁状态,即,在第一扩展通道开启后又收到关闭指示但未成功关闭时,可以确定I2C总线处于死锁状态,此时向I2C总线扩展器件发送复位触发信号就可以触发I2C总线扩展器件进行复位,由于I2C总线扩展器件自身也是作为I2C总线的I2C从设备,通过I2C总线扩展器件的复位可以带动I2C总线进行复位,进而解除I2C总线的死锁状态,也就是说,本发明实施例通过向I2C总线扩展器件发送复位触发信号的方式可以快速解除I2C总线的死锁状态,这样可以尽量减小甚至消除可能由于第一I2C从设备发生故障而导致I2C总线出现死锁的负面影响,以保证其它I2C从设备与主机之间的正常通信,提高I2C总线的有效性,进而提高系统的可靠性。

在本发明实施例中,主机可以通过主机上的预设接口向I2C总线扩展器件发送复位触发信号,即可以由主机自身直接向I2C总线扩展器件发送复位触发信号,或者主机也可以控制逻辑器件向I2C总线扩展器件发送复位触发信号。

当主机自身直接向I2C总线扩展器件发送复位触发信号时,主机可以利用自身现有的接口资源即可控制I2C总线扩展器件进行复位以解除I2C总线的死锁状态,而无需增加额外的配置,通用性较高。

另外,由于逻辑器件是比较常规、通用的器件,且制作成本较低并且通用性也较高,目前的系统中一般已经具有现成的逻辑器件,所以采用控制逻辑器件向I2C总线扩展器件发送复位触发信号的方式所花费的成本也较低,通用性也较高。并且通过逻辑器件发送复位触发信号的方式还可以尽量减少对主机上的一些接口的占用,在主机的接口资源有限的情况下,可以便于I2C总线扩展器件通过逻辑器件能够有效地进行复位,并且,逻辑器件的位置可以任意设置,例如设置在靠近I2C总线扩展器件的位置,这样还可以尽量缩短复位触发信号传输至I2C总线扩展器件的时间,以便于I2C总线扩展器件能够快速地获得复位触发信号进而快速地执行复位操作,从而可以缩短解除I2C总线处于死锁状态而耗用的时间,提高I2C总线的解锁效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为现有技术中通过PCA9548A对I2C总线进行扩展的示意图;

图2为本发明实施例中I2C主机与I2C总线扩展器件连接的示意图;

图3为本发明实施例中解除I2C总线死锁的方法的流程图;

图4为本发明实施例中第一种发送复位触发信号的方式的示意图;

图5为本发明实施例中第二种发送复位触发信号的方式的示意图;

图6为本发明实施例中装置的结构框图;

图7为本发明实施例中装置的另一结构框图;

图8为本发明实施例中装置的另一结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,在不做特别说明的情况下,一般表示前后关联对象是一种“或”的关系。

首先介绍本发明实施例的应用场景。

I2C总线上一般连接有至少一个I2C主机和至少一个I2C从设备,或者也可以将I2C主机称为主设备,而将I2C从设备称为从设备,只有I2C总线上的I2C主设备才能对I2C总线实现管理和检测,即产生起始信号和停止信号,如图1所示,可以将图1中的PC9548A以及PC9548A下挂的其它设备看作是I2C主机的I2C从设备。为了简化描述,后续将I2C主机简称为主机。

本发明实施例提供一种解除I2C总线死锁的方法,该方法可以应用于前述的主机,即该方法中各步骤的执行主体可以是前述的主机,该主机与I2C总线扩展器件均连接在I2C总线上,通过I2C总线扩展器件可以将I2C总线的SDA和SCL扩展成多路SDA和SCL,而扩展的每一路SDA和SCL可以对应一个扩展通道,扩展通道具有类似开关的功能,当扩展通道被开启时,与该扩展通道连接的I2C从设备可以通过所扩展出的SDA和SCL获得SDA信号和SCL信号,当扩展通道被关闭时,与该扩展通道连接的I2C从设备则无法再获得SDA信号和SCL信号,相当于是说,扩展通道的作用是将所扩展出的SDA和SCL提供给其下挂的I2C从设备,以使得其下挂的I2C从设备能够通过该扩展通道连接到I2C总线上,进而通过I2C总线与主机进行通信。

一般来说,I2C总线扩展器件内部可以集成寄存器,主机可以通过控制I2C总线扩展器件内部的寄存器来实现对I2C总线扩展器件开启或关闭的控制。

请参见图2,图2为本发明实施例中主机与I2C总线扩展器件连接的示意图,在图2是以I2C总线扩展器件扩展了3路SDA和SCL为例进行图示说明,在扩展出的每一路SDA和SCL下可以挂接一个I2C从设备,即如图2中的I2C从设备1-3。需要说明的是,由于I2C总线扩展器件也是挂接在I2C总线上,所以可以将I2C总线扩展器件也看作是主机的一个I2C从设备。

I2C总线扩展器件,或者也可以称为I2C选通复用器。在具体实施过程中,I2C总线扩展器件可以包括不同类型或者不同规格的器件,例如可以为PCA9548、PCA9548A、74FST3251等器件,或者可以为其它可编程逻辑器件(Complex Programmable Logic Device,CPLD),本发明实施例对于I2C总线扩展器件具体为何种器件不做具体限制,只要其能将I2C总线的SDA和SCL扩展为至少两路SDA和SCL的器件即可。

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。

请参见图3,本发明实施例中的解除I2C总线死锁的方法的流程描述如下。

步骤301:若I2C总线扩展器件中的第一扩展通道开启后收到关闭指示但未关闭成功,则确定I2C总线处于死锁状态。

也就是说,在I2C总线扩展器件中的第一扩展通道开启后,可以通过向I2C总线扩展器件发送关闭指示的方式以指示I2C总线扩展器件关闭第一扩展通道,即此处的关闭指示是用于指示I2C总线扩展器件关闭第一扩展通道。

其中,第一扩展通道可以指I2C总线扩展器件所包括的所有扩展通道中的任意一个扩展通道,如图2所示,例如可以是指与I2C从设备1-3中任意一个I2C从设备所对应的扩展通道。以第一扩展通道是图2所示的与I2C从设备1所对应的扩展通道为例,那么I2C从设备即为本发明实施例中的第一I2C从设备。当第一扩展通道开启时,I2C从设备1通过第一扩展通道与I2C总线连接,此时I2C从设备1可以获得I2C总线的SDA信号和SCL信号,即I2C从设备1此时与主机都挂接在I2C总线上,能够与主机进行通信。

当主机需要访问I2C从设备1时,可以控制第一扩展通道开启,在第一扩展通道开启之前或者在主机访问I2C从设备1的过程中,I2C从设备1可能发生故障,那么I2C从设备1就无法对主机进行应答,但此时由于开启第一扩展通道会将I2C总线的SDA拉低,但I2C从设备1却无法进行应答,就会使得I2C总线的SDA一直处于拉低状态,进而导致I2C总线处于死锁状态。

所以,在第一扩展通道开启之后,例如在主机确定已经结束对I2C从设备1的访问过程之后,主机可以对I2C总线扩展器件进行控制以关闭第一扩展通道,例如向I2C总线扩展器件发送前述的关闭指示以指示I2C总线扩展器件关闭第一扩展通道。进一步地,在发送关闭指示之后,主机可以判断第一扩展通道是否已经成功关闭,例如可以在发送关闭指示一定时间间隔之后再判断第一扩展通道是否已经成功关闭,等待一定时间间隔再执行判断的目的是为了给I2C总线扩展器件预留足够的时间以执行关闭第一扩展通道的操作。

若确定第一扩展通道并未成功关闭,此时则可以认为I2C总线被锁死了,即处于死锁状态,并且,此时可以确定I2C从设备1可能已经发生故障,同时,可以输出告警信息以告知用户I2C从设备1可能发生故障了,以便用户能够及时查看或者进行相应处理,尽量降低由于设备故障而带来的业务中断或其它负面影响。

步骤302:通过主机上的预设接口向I2C总线扩展器件发送复位触发信号,或,控制逻辑器件性I2C总线扩展器件发送复位触发信号,已出发I2C总线扩展器件进行复位。

在确定I2C总线处于死锁状态之后,本发明实施例中,主机可以向I2C总线扩展器件发送复位触发信号以触发I2C总线扩展器件进行复位。由于I2C总线扩展器件自身也是作为I2C总线的一个I2C从设备,通过I2C总线扩展器件的复位可以带动I2C总线进行复位,即将之前一直处于拉低状态的SDA释放进而解除I2C总线的死锁状态,也就是说,可以通过I2C总线扩展器件的复位来解决I2C总线的死锁状态。

因为当I2C总线处于死锁状态时,I2C总线上连接的所有I2C从设备均无法访问主机,同时主机也无法访问所有的I2C从设备,即,当I2C总线处于死锁状态时,主机与所有的I2C从设备之间均无法进行通信,相当于此时系统中的I2C模块处于失效状态,那么系统中基于I2C总线的所有通信业务均无法进行,所以,在I2C总线的死锁状态被解除后,可以方便其它I2C从设备与主机之间进行通信,以保证系统的正常运行,进而提高系统的可靠性。同时,在I2C总线的死锁状态被解除后,I2C总线扩展器件的扩展功能可以继续使用,进而可以提高I2C总线的利用率和有效性。

也就是说,通过向I2C总线扩展器件发送复位触发信号的方式可以快速解除I2C总线的死锁状态,这样可以尽量减小甚至消除可能由于第一I2C从设备发生故障而导致I2C总线出现死锁的负面影响,以保证其它I2C从设备与主机之间的正常通信,提高I2C总线的有效性,进而提高系统的可靠性。

为了便于本领域技术人员对本发明实施例中的方案进行理解,以下提供两种实施方式用于说明主机是如何向I2C总线扩展器件发送复位触发信号的,当然,本发明实施例包括但不限于以下两种方式,凡是通过主机或者通过主机控制向I2C总线扩展器件发送复位触发信号以触发I2C总线扩展器件进行复位的方式均应在本发明的保护范围之内。

第一种方式:

通过主机上的预设接口向I2C总线扩展器件发送复位触发信号,以触发I2C总线扩展器件进行复位。具体来说,在需要控制I2C总线扩展器件进行复位时,主机可以生成复位触发信号,再通过主机上的预设接口向I2C总线扩展器件发送复位触发信号。

也就是说,在需要控制I2C总线扩展器件进行复位时,主机可以先生成复位触发信号,再通过主机自身所配置的预设接口向I2C总线扩展器件发送该复位触发信号。其中,主机中的预设接口可以是指能够用于向I2C总线扩展器件传输复位触发信号的接口,预设接口可以由用户预先配置,或者可以由主机自主选择,例如主机可以按照自身当前的接口资源的使用情况选择出用于向I2C总线扩展器件发送复位触发信号的接口,比如主机有4个预设接口,但是当前其中的三个都处于工作状态而另外一个处于空闲状态,为了能够尽快将复位触发信号发送给I2C总线扩展器件,此时主机可以选择通过当前处于空闲状态的接口向I2C总线扩展器件发送复位触发信号,或者主机还可以根据其它因素来选择当前用于向I2C总线扩展器件发送复位触发信号的接口,本发明不做具体限制。

当主机自身直接向I2C总线扩展器件发送复位触发信号时,主机可以利用自身现有的接口资源即可控制I2C总线扩展器件进行复位以解除I2C总线的死锁状态,而无需增加额外的配置,通用性较高。

在具体实施过程中,预设接口例如可以是主机中的GPIO接口,如图4所示,主机通过GPIO接口向I2C总线扩展器件发送复位触发信号,此时GPIO接口与I2C总线扩展器件之间可以具有电性连接关系。另外,由于器件的复位一般是通过复位引脚接收复位触发信号,所以在图4中示出了I2C总线扩展器件包括复位引脚的示例。

由于GPIO接口是一般设备中的通用接口,通过GPIO接口向I2C总线扩展器件发送复位触发信号的方式,这样利用通用的接口资源即实现对I2C总线死锁状态的快速解除。并且使用GPIO接口传输数据时所消耗的功耗也较低,这样可以尽量降低系统的整体功耗,另外,由于GPIO内置I2C从机接口,主机即使在待机模式下也能够全速工作,进而方便主机能够在不同工作模式均能够将复位触发信号快速地发送给I2C总线扩展器件,以提高I2C总线扩展器件复位的效率。

第二种方式:

控制逻辑器件向I2C总线扩展器件发送复位触发信号,以触发I2C总线扩展器件进行复位。具体来说,主机可以先控制逻辑器件产生复位触发信号,再指示逻辑器件将复位触发信号发送给I2C总线扩展器件。

本发明实施例中,在主机与I2C总线扩展器件之间设置有逻辑器件,逻辑器件可以分别与主机和I2C总线扩展器件连接,例如图5所示。逻辑器件例如可以包括复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)或者现场可编程门阵列(Field-Programmable Gate Array,FPGA),等等。

由于逻辑器件是比较常规、通用的器件,且制作成本较低并且通用性也较高,目前的一些系统中已经具有现成的逻辑器件,所以通过逻辑器件向I2C总线扩展器件发送复位触发信号的方式所花费的成本也较低,通用性较高。

同时,采用逻辑器件生成并发送复位触发信号的方式还可以尽量减少对于主机自身资源(例如处理器资源和接口资源)的耗用,以便于主机能够利用这些资源处理其它更多的业务,在主机接口资源有限的情况下,通过逻辑器件可以随时向I2C总线扩展器件发送复位触发信号,而无需等待主机的接口空闲,这样可以便于I2C总线扩展器件能够有效、快速地进行复位。

并且,逻辑器件的位置也可以随意设置,例如设置在靠近I2C总线扩展器件的位置,这样可以缩短复位触发信号的传输时间,提高复位触发信号的传输速率,以便于I2C总线扩展器件能够快速获得复位触发信号而执行复位操作,进而缩短解除I2C总线处于死锁状态而耗用的时间,提高I2C总线的解锁效率。

一般来说,器件在进行复位时一般是通过接收复位有效电平而进行复位,即前述的复位触发信号可以是以电平的形态呈现。并且,不同的器件进行有效复位所需要的复位有效电平可能不同,这和器件的制作工艺以及具体性能有关,例如对于不同的I2C总线扩展器件来说,触发其进行有效复位的有效复位电平可能是高电平,也可能是低电平。所以,在发送复位触发信号之前,主机可以先根据I2C总线扩展器件的器件类型,确定用于触发I2C总线扩展器件进行有效复位的复位有效电平,以I2C总线扩展器件是PCA9548A为例,触发PCA9548A进行有效复位的有效复位电平即为低电平。

对于本发明实施例中的通过主机的预设接口或者控制逻辑器件向I2C总线扩展器件发送复位触发信号的方式,则是指通过主机产生或者由主机控制逻辑器件产生能够触发I2C总线扩展器件进行有效复位的电平,继续以I2C总线扩展器件是PCA9548A为例,为了触发PCA9548A进行有效复位,主机或者逻辑器件可以产生低电平。

而且,器件完成复位操作一般需要一定的时长,根据器件类型的不同,完成复位所需时长一般不同,例如对于一种可能的I2C总线扩展器件来说,要完成复位的最短时长为500纳秒(ns),所以在本发明实施中,在向I2C总线扩展器件发送复位有效电平时,可以持续发送第一预设时长,以使得I2C总线扩展器件在第二预设时长后完成复位。

第一预设时长可以是指器件完成复位操作所需的最短时长,例如一个器件完成复位操作所需的最短时长为500ns,此时则可以将第一预设时长设置为500ns,这样可以确保器件能够正常进行复位,器件则可以在500ns后完成复位,即此时第一预设时长和第二预设长相等。

或者,第一预设时长可以是指大于器件完成复位所需的最短时长,继续前述例子,例如可以将第一预设时长设置为600ns,因为在有些情况下,为了避免器件在进行复位操作过程中可能发生的意外而导致时间的额外消耗,所以为了最大程度的确保复位成功,可以将第一预定时长设置为稍稍大于器件复位所需的最短时长,至于需要大于最短时长多久,可以根据I2C总线扩展器件的器件特性以及对于复位时间要求的高低程度而定,本发明实施例不做具体限制。

当将第一预设时长设置为大于器件完成复位所需的最短时长时,例如设置为600ns,由于器件复位所需的最短时长为500ns,所以器件在不发生意见的情况下则不会造成复位时间的额外消耗,即在500ns就完成启动,此时第二预设时长为500ns,小于第一预设时长。或者,由于一些意外,器件可能在550ns或者在600ns时才完成启动,此时第二预设时长也是小于或等于第一预设时长。

另外,在向I2C总线扩展器件发送复位触发信号之后,主机还可以进一步判断I2C总线的死锁状态是否已经成功解除,例如判断之前被拉低的SDA是否被释放,或者可以通过主机直接用于检测I2C总线的状态的检测模块来检测并判断I2C总线的死锁状态是否被解除。因为在复位触发信号的传输过程中,或者在I2C总线扩展器件基于复位触发信号进行复位操作的过程中,可能会出现一些导致复位失败的因素,所以为了尽量确保死锁状态解除的准确性,主机在发送复位触发信号或者在间隔发送复位触发信号的一定时间之后,可以进行检测。

若确定I2C总线的死锁状态没有解除,主机可以再次发送复位触发信号以再次触发I2C总线扩展器件进行复位,以确保有效复位,或者可以输出提示信息,以便用户能够及时获知这一异常情况,再人工对设备进行检测,等等。

若确定I2C总线的死锁状态已经解除,则可以确定第一I2C从设备发生了故障,进而再通过输出提示信息的方式对用户进行提示,以便用户能够从多个I2C从设备中确定出发生故障的I2C从和设备。在具体实施过程中,主机可以采用上述方法再对其它I2C从设备是否发生故障进行检测,当I2C从设备的数量较多时,采用本发明实施例中的方法可以快速地从多个I2C从设备中确定发生故障的设备,以提高故障设备的定位效率,同时由于无需人工进行检测,可以降低人力成本。

本发明实施例提供的解除I2C总线死锁的方法,在I2C总线扩展器件中的第一扩展通道开启的过程中可以关闭第一扩展通道,由于第一扩展通道是用于将I2C总线的SDA和SCL提供给第一I2C从设备以便第一I2C从设备能够与主机进行通信,所以当第一扩展通道无法关闭时则可以认为I2C总线的SDA一直处于拉低的状态,这样就会导致I2C总线处于死锁状态,即,在第一扩展通道开启后又收到关闭指示但未成功关闭时,可以确定I2C总线处于死锁状态,此时向I2C总线扩展器件发送复位触发信号就可以触发I2C总线扩展器件进行复位,由于I2C总线扩展器件自身也是作为I2C总线的I2C从设备,通过I2C总线扩展器件的复位可以带动I2C总线进行复位,进而解除I2C总线的死锁状态,也就是说,本发明实施例通过向I2C总线扩展器件发送复位触发信号的方式可以快速解除I2C总线的死锁状态,这样可以尽量减小甚至消除可能由于第一I2C从设备发生故障而导致I2C总线出现死锁的负面影响,以保证其它I2C从设备与主机之间的正常通信,提高I2C总线的有效性,进而提高系统的可靠性。

在本发明实施例中,主机可以通过主机上的预设接口向I2C总线扩展器件发送复位触发信号,即可以由主机自身直接向I2C总线扩展器件发送复位触发信号,或者主机也可以控制逻辑器件向I2C总线扩展器件发送复位触发信号。

当主机自身直接向I2C总线扩展器件发送复位触发信号时,主机可以利用自身现有的接口资源即可控制I2C总线扩展器件进行复位以解除I2C总线的死锁状态,而无需增加额外的配置,通用性较高。

另外,由于逻辑器件是比较常规、通用的器件,且制作成本较低并且通用性也较高,目前的系统中一般已经具有现成的逻辑器件,所以采用控制逻辑器件向I2C总线扩展器件发送复位触发信号的方式所花费的成本也较低,通用性也较高。并且通过逻辑器件发送复位触发信号的方式还可以尽量减少对主机上的一些接口的占用,在主机的接口资源有限的情况下,可以便于I2C总线扩展器件通过逻辑器件能够有效地进行复位,并且,逻辑器件的位置可以任意设置,例如设置在靠近I2C总线扩展器件的位置,这样还可以尽量缩短复位触发信号传输至I2C总线扩展器件的时间,以便于I2C总线扩展器件能够快速地获得复位触发信号进而快速地执行复位操作,从而可以缩短解除I2C总线处于死锁状态而耗用的时间,提高I2C总线的解锁效率。

请参见图6,基于同一发明构思,本发明实施例还提供一种装置,该装置通过I2C总线与I2C总线扩展器件连接,I2C总线扩展器件用于将I2C总线的SDA和SCL扩展成至少两路SDA和SCL。该装置包括第一确定模块601和控制模块602,而且本发明实施例中的第一确定模块601和控制模块602可以通过硬件处理器来实现相关功能单元。其中:

第一确定模块601,用于若I2C总线扩展器件中的第一扩展通道开启后收到关闭指示但未成功关闭,则确定I2C总线处于死锁状态;其中,第一扩展通道用于在第一扩展通道开启时将至少两路SDA和SCL中的第一路SDA和SCL提供给第一I2C从设备,以使第一I2C从设备通过I2C总线与装置通信;

控制模块602,用于通过主机上的预设接口向I2C总线扩展器件发送复位触发信号,或,控制逻辑器件向I2C总线扩展器件发送复位触发信号,以触发I2C总线扩展器件进行复位;其中,通过I2C总线扩展器件的复位以解除I2C总线的死锁状态。

可选的,控制模块602用于:

生成复位触发信号;

通过主机的通用输入输出GPIO接口向I2C总线扩展器件发送复位触发信号。

可选的,控制模块602用于:

控制逻辑器件产生复位触发信号;其中,逻辑器件分别与主机和I2C总线扩展器件连接;

指示逻辑器件将复位触发信号发送给I2C总线扩展器件。

可选的,请参见图7,本发明实施例中的装置还包括:

第二确定模块701,用于在通过主机上的预设接口向I2C总线扩展器件发送复位触发信号之前,或在控制逻辑器件向I2C总线扩展器件发送复位触发信号之前,根据I2C总线扩展器件的器件类型,确定用于触发I2C总线扩展器件进行有效复位的复位有效电平;

控制模块602用于:

通过预设接口向I2C总线扩展器件发送第一预设时长的复位有效电平,以使I2C总线扩展器件在第二预设时长后完成复位;或

控制逻辑器件向I2C总线扩展器件发送第一预设时长的复位有效电平,以使I2C总线扩展器件在第二预设时长后完成复位;

其中,第二预设时长小于等于第一预设时长。

可选的,请参见图8,本发明实施例中的装置还包括:

第三确定模块801,用于在触发I2C总线扩展器件进行复位之后,确定I2C总线是否已经解除死锁状态;

第四确定模块802,用于若确定I2C总线已经解除死锁状态,则确定第一I2C从设备发生故障。

由于本发明实施例中的装置与上述解除I2C总线死锁的方法解决问题的原理相似,因此本发明实施例中装置的实施可以参见上述解除I2C总线死锁的方法的实施,在此不再赘述。

本发明实施例中的装置,在I2C总线扩展器件中的第一扩展通道开启的过程中可以关闭第一扩展通道,由于第一扩展通道是用于将I2C总线的SDA和SCL提供给第一I2C从设备以便第一I2C从设备能够与主机进行通信,所以当第一扩展通道无法关闭时则可以认为I2C总线的SDA一直处于拉低的状态,这样就会导致I2C总线处于死锁状态,即,在第一扩展通道开启后又收到关闭指示但未成功关闭时,可以确定I2C总线处于死锁状态,此时向I2C总线扩展器件发送复位触发信号就可以触发I2C总线扩展器件进行复位,由于I2C总线扩展器件自身也是作为I2C总线的I2C从设备,通过I2C总线扩展器件的复位可以带动I2C总线进行复位,进而解除I2C总线的死锁状态,也就是说,本发明实施例通过向I2C总线扩展器件发送复位触发信号的方式可以快速解除I2C总线的死锁状态,这样可以尽量减小甚至消除可能由于第一I2C从设备发生故障而导致I2C总线出现死锁的负面影响,以保证其它I2C从设备与主机之间的正常通信,提高I2C总线的有效性,进而提高系统的可靠性。

在本发明实施例中,主机可以通过主机上的预设接口向I2C总线扩展器件发送复位触发信号,即可以由主机自身直接向I2C总线扩展器件发送复位触发信号,或者主机也可以控制逻辑器件向I2C总线扩展器件发送复位触发信号。

当主机自身直接向I2C总线扩展器件发送复位触发信号时,主机可以利用自身现有的接口资源即可控制I2C总线扩展器件进行复位以解除I2C总线的死锁状态,而无需增加额外的配置,通用性较高。

另外,由于逻辑器件是比较常规、通用的器件,且制作成本较低并且通用性也较高,目前的系统中一般已经具有现成的逻辑器件,所以采用控制逻辑器件向I2C总线扩展器件发送复位触发信号的方式所花费的成本也较低,通用性也较高。并且通过逻辑器件发送复位触发信号的方式还可以尽量减少对主机上的一些接口的占用,在主机的接口资源有限的情况下,可以便于I2C总线扩展器件通过逻辑器件能够有效地进行复位,并且,逻辑器件的位置可以任意设置,例如设置在靠近I2C总线扩展器件的位置,这样还可以尽量缩短复位触发信号传输至I2C总线扩展器件的时间,以便于I2C总线扩展器件能够快速地获得复位触发信号进而快速地执行复位操作,从而可以缩短解除I2C总线处于死锁状态而耗用的时间,提高I2C总线的解锁效率。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1