一种服务器及一种I2C总线的通信故障处理方法和系统与流程

文档序号:22428642发布日期:2020-10-02 10:06阅读:311来源:国知局
一种服务器及一种I2C总线的通信故障处理方法和系统与流程

本发明涉及存储技术领域,特别是涉及一种服务器及一种i2c总线的通信故障处理方法和系统。



背景技术:

i2c总线是一种双向二线制同步串行总线,只需要两根线即可在连接于总线上的器件之间传送信息。即只需要一根数据线sda(serialdata,串行数据线)和一根时钟线scl(serialclock,串行时钟线)。sda和scl都是双向i/o线,接口电路为开漏输出,需通过上拉电阻接电源vcc。当总线空闲时。两根线都是高电平,连接总线的外同器件都是cmos器件,输出级也是开漏电路,这样的结构可以实现线与功能。

主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。在总线上主和从、发和收的关系不是恒定的,而取决于此时的数据传送方向。如果主机要发送数据给从机,则主机首先寻址从机,然后主动发送数据至从机,最后由主机终止数据传送。而如果主机要接收从机的数据,首先由主机寻址从机,然后主机接收从机发送的数据,最后由主机终止接收过程,在这种情况下,主机负责产生定时时钟和终止数据传送。此外,当多主机需要使用i2c总线时,可以通过仲裁机制确定当前的主机。

按照《i2c-busspecificationandusermanualv.6》规格手册的要求,后文简称为i2c规格手册,在进行数据信号的传输时,i2c的sda只有在scl为低电平的时候才能改变,scl为高电平时sda则需要保持,对应到芯片设计上则是上升沿采样,下降沿变化,可参阅图1。

由于i2c总线具有开漏输出、设置上拉电阻、线与逻辑这些硬件特性,决定了只要i2c总线上任何一个器件拉低了sda或者scl,其他器件都无法抬高它们,即看到的都是低电平。因此,如果有某一个器件不释放总线,则整个总线上的通讯都会被阻塞,其他器件看到的是总线忙碌,导致正常通信故障。按照i2c规格手册的定义,i2c总线的sda被一直拉低时,主机可发送9个clk信号以促使从机释放i2c总线。很多处理器会有相关的i2c控制器的寄存器地址,从而为用户提供相关接口来控制sda、scl信号的高低,例如x86体系处理器。但是,部分类型的处理器中未设置相关寄存器来直接控制sda、scl信号的高低,因此在i2c总线出现sda一直拉低时,无法通过发送9个clk信号恢复总线。针对这类处理器,目前的处理方案是通过cpld来解决,当cpld感知到i2c总线挂死时,cpld会发送9个clk。但是,这样的方案会占用cpld资源,特别是在原本没有预留cpld的板卡上,需重新打板,且当i2c总线上的i2c控制器的数量较多时,这样的方案的实施成本非常高,也会增大设计的复杂度,还可能导致i2c总线阻抗变化,影响通信质量。还有的处理方案是增加从机复位电路,当从机拉低sda时通过硬件实现复位,这样的方案也会增加硬件设计复杂度,增加方案的硬件成本。

综上所述,如何有效地进行i2c总线的通信故障处理,降低成本,降低设计的复杂度,是目前本领域技术人员急需解决的技术问题。



技术实现要素:

本发明的目的是提供一种服务器及一种i2c总线的通信故障处理方法和系统,以有效地进行i2c总线的通信故障处理,降低成本,降低设计的复杂度。

为解决上述技术问题,本发明提供如下技术方案:

一种i2c总线的通信故障处理方法,应用于i2c总线上的任一i2c控制器中,且i2c总线与目标接口复用,包括:

在识别出i2c总线的通信存在故障之后,将所述i2c总线切换为目标模式以使所述i2c总线中的串行数据线sda作为所述目标接口的第一管脚使用,使所述i2c总线中的串行时钟线scl作为所述目标接口的第二管脚使用;

在确定出所述目标接口的第一管脚为低电平之后,控制所述目标接口的第二管脚输出n个时钟信号;其中,所述n为不小于9的正整数;

将所述目标模式恢复为i2c总线模式,以使所述目标接口的第一管脚作为所述i2c总线中的串行数据线sda使用,使所述目标接口的第二管脚作为所述i2c总线中的串行时钟线scl使用。

优选的,还包括:

在确定出所述目标接口的第一管脚为高电平之后,控制所述目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制所述目标接口的第一管脚输出持续预设的第一时长的低电平信号;

在所述第一时长之后,控制所述目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在所述第二时长之后,执行将所述目标模式恢复为i2c总线模式的操作。

优选的,还包括:

在控制所述目标接口的第二管脚输出n个时钟信号之后,控制所述目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制所述目标接口的第一管脚输出持续预设的第一时长的低电平信号;

在所述第一时长之后,控制所述目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在所述第二时长之后,执行将所述目标模式恢复为i2c总线模式的操作。

优选的,所述时钟信号的周期为t,且所述t等于当前的通讯频率的倒数。

优选的,所述第一时长等于当前的通讯频率的倒数的一半。

优选的,所述目标接口为gpio接口,所述目标模式为gpio模式;

相应的,在确定出所述目标接口的第一管脚为低电平之后,控制所述目标接口的第二管脚输出n个时钟信号,包括:

将所述目标接口的第一管脚设置为输入模式,判断所述目标接口的第一管脚是否为低电平;

如果是,则将所述目标接口的第二管脚设置为输出模式,控制所述目标接口的第二管脚输出n个时钟信号。

优选的,i2c总线上的任一i2c控制器所对应的处理器均为ft2000+处理器。

一种i2c总线的通信故障处理系统,应用于i2c总线上的任一i2c控制器中,且i2c总线与目标接口复用,包括:

复用切换模块,用于在识别出i2c总线的通信存在故障之后,将所述i2c总线切换为目标模式以使所述i2c总线中的串行数据线sda作为所述目标接口的第一管脚使用,使所述i2c总线中的串行时钟线scl作为所述目标接口的第二管脚使用;

时钟信号输出模块,用于在确定出所述目标接口的第一管脚为低电平之后,控制所述目标接口的第二管脚输出n个时钟信号;其中,所述n为不小于9的正整数;

复用恢复模块,用于将所述目标模式恢复为i2c总线模式,以使所述目标接口的第一管脚作为所述i2c总线中的串行数据线sda使用,使所述目标接口的第二管脚作为所述i2c总线中的串行时钟线scl使用。

优选的,还包括:

stop信号第一模拟模块,用于在确定出所述目标接口的第一管脚为高电平之后,控制所述目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制所述目标接口的第一管脚输出持续预设的第一时长的低电平信号;

stop信号第二模拟模块,用于在所述第一时长之后,控制所述目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在所述第二时长之后,执行将所述目标模式恢复为i2c总线模式的操作。

一种服务器,包括上述所述的i2c总线的通信故障处理系统。

应用本发明实施例所提供的技术方案,并不需要如传统方案中额外的cpld来实现,本申请的方案不会增加硬件成本,也不会增加硬件设计的复杂度,方便进行方案的部署。具体的,本申请将i2c总线与目标接口复用,因此在任一i2c控制器中识别出i2c总线的通信存在故障之后,本申请的方案会将i2c总线切换为目标模式,即使得i2c总线中的串行数据线sda作为目标接口的第一管脚使用,使i2c总线中的串行时钟线scl作为目标接口的第二管脚使用。此时,如果确定出目标接口的第一管脚为低电平,即说明sda被拉低,则i2c控制器会控制目标接口的第二管脚输出n个时钟信号,即输出n个clk信号,当然,n需要为不小于9的正整数,输出了n个时钟信号之后,便可以将sda拉高,即解决了i2c总线中的sda被拉低而引发的通信故障情况,之后便可以将目标模式恢复为i2c总线模式。综上可知,本申请的方案有效地实现了i2c总线的通信故障处理,且不需要增加硬件,有利于降低方案的实施成本,降低了设计的复杂度。

附图说明

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

图1为在数据信号的传输时,sda数据变更需要scl为低电平的时序示意图;

图2为本发明中一种i2c总线的通信故障处理方法的实施流程图;

图3为ack信号期间拉低sda的时序示意图;

图4为本发明中一种i2c总线的通信故障处理系统的结构示意图。

具体实施方式

本发明的核心是提供一种i2c总线的通信故障处理方法,有效地实现了i2c总线的通信故障处理,且不需要增加硬件,有利于降低方案的实施成本,降低了设计的复杂度。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图2,图2为本发明中一种i2c总线的通信故障处理方法的实施流程图,该i2c总线的通信故障处理方法可以应用于i2c总线上的任一i2c控制器中,且i2c总线与目标接口复用,该i2c总线的通信故障处理方法可以包括以下步骤:

步骤s101:在识别出i2c总线的通信存在故障之后,将i2c总线切换为目标模式以使i2c总线中的串行数据线sda作为目标接口的第一管脚使用,使i2c总线中的串行时钟线scl作为目标接口的第二管脚使用。

在实际应用中,常见的i2c总线的通信故障是sda被拉低,例如主机向从机写数据或写地址时,从机会发送ack信号,在第9个clk的期间拉低sda,可参阅图3,为ack信号期间拉低sda的时序示意图,当然,图3表示的是正常运行的时序示意图。例如在ack信号,发生了异常情况,例如主机被插拔了一次,导致从机没有收到clk信号,则sda便会被一直拉低,引起i2c总线的通信故障。当然,除了从机发送ack信号期间,其他时间段当sda为低电平时,由于异常而导致从机没有收到clk信号,也会导致从机将i2c总线挂死,即拉低sda。

本申请的i2c总线与目标接口复用,目标接口的具体类型可以根据实际需要进行设定和选取,只要基于目标接口,能够实现后续步骤的操作即可,即选取的目标接口能够实现本申请的目的即可。例如在本发明的一种具体实施方式中,考虑到gpio接口可以设置输入模式或者输出模式,可以很好的实现本申请的目的,因此,在具体实施时,目标接口可以选取为gpio接口,相应的,目标模式便为gpio模式。

i2c总线上的任意i2c控制器均可以执行本申请的方案,但通常而言,是当i2c控制器作为主机时,才会识别出i2c总线的通信存在故障,执行本申请的方案进程。例如某一个主机与作为从机的传感器或智能电池通信失败时,该主机可以确定i2c总线的通信存在故障,又如,某一个主机检测出i2c总线过长时间均处于忙碌状态时,可以确定i2c总线的通信存在故障。

在识别出i2c总线的通信存在故障之后,主机便会将i2c总线切换为目标模式以使i2c总线中的串行数据线sda作为目标接口的第一管脚使用,使i2c总线中的串行时钟线scl作为目标接口的第二管脚使用,即此时i2c总线作为目标接口来使用。

例如,目标接口为gpio接口,目标模式为gpio模式,并且例如对于某个i2c总线而言,该i2c总线的scl例如与gpio接口的b0管脚复用,该i2c总线的sda则与gpio接口的b1管脚复用。并且需要强调的是,在实际应用中,i2c总线的数量也可以有多个,针对不同的i2c总线,可以配置相应的目标接口与i2c总线实现复用。

步骤s102:在确定出目标接口的第一管脚为低电平之后,控制目标接口的第二管脚输出n个时钟信号;其中,n为不小于9的正整数。

i2c总线作为目标接口来使用之后,需要判断目标接口的第一管脚是否为低电平。例如当目标接口为gpio接口,目标模式为gpio模式时,步骤s102可以具体包括:

目标接口的第一管脚设置为输入模式,判断目标接口的第一管脚是否为低电平;

如果是,则将目标接口的第二管脚设置为输出模式,控制目标接口的第二管脚输出n个时钟信号。

例如前述例子中,i2c总线的scl与gpio接口的b0管脚复用,该i2c总线的sda与gpio接口的b1管脚复用,则将管脚b1设置为输入模式,判断管脚b1是否为低电平。如果是,则可以说明i2c总线的通信故障是因为sda被从机挂死了,即被从机拉低了,为了使从机释放sda,本申请便会控制目标接口的第二管脚输出n个时钟信号,使得从机释放sda。该例子中,即控制b0管脚输出n个时钟信号。

需要说明的是,由于基于i2c通信时,是由一个字节加上一位ack信号构成,即一共9位,假设是在第一位的通信期间出现了异常,从机拉低了sda,则主机需要输出9个clk信号,可以使得从机释放sda,假设是在发送ack信号期间出现了通信异常,从机拉低了sda,则主机只需要输出1个clk信号就可以使得从机释放sda。即通常而言,主机输出最多9个clk信号,便可以使得从机释放sda,因此本申请的方案中,n需要设置为不小于9的正整数,实际应用中通常将n设置为9即可。当然,n大于9时也能够实现本申请的目的。

时钟信号的周期可以根据实际需要进行设定,在本发明的一种具体实施方式中,时钟信号的周期为t,且t等于当前的通讯频率的倒数。例如当前的通讯频率为100khz,则时钟信号的周期t便是10us。则前述例子中,配置b0为高电平,延时5us,再配置b0为低电平,延时5us,然后重复9次,便可以产生9个时钟信号。

该种实施方式中设置时钟信号的周期为t时,考虑到了当前的通讯频率,可以避免时钟信号的周期设置的太短时,从机来不及处理,即出现将时钟信号漏识别的情况,当然,时钟信号的周期设置的过长时,则会延长本申请方案的执行耗时,因此,该种实施方式中将时钟信号的周期t设置为等于当前的通讯频率的倒数,可以保障方案的正常实施,耗时也不会过长。

步骤s103:将目标模式恢复为i2c总线模式,以使目标接口的第一管脚作为i2c总线中的串行数据线sda使用,使目标接口的第二管脚作为i2c总线中的串行时钟线scl使用。

控制目标接口的第二管脚输出n个时钟信号之后,使得从机释放sda,i2c总线的通信便可以恢复正常,因此,便可以将目标模式恢复为i2c总线模式,即此时将目标接口恢复为i2c总线进行使用,该步骤描述的i2c总线模式,即表示此时是作为i2c总线使用而不是作为目标接口使用。

在本发明的一种具体实施方式中,还可以包括:

在确定出目标接口的第一管脚为高电平之后,控制目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制目标接口的第一管脚输出持续预设的第一时长的低电平信号;

在第一时长之后,控制目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在第二时长之后,执行将目标模式恢复为i2c总线模式的操作。

申请人发现,在实际应用中,在识别出i2c总线的通信存在故障,将i2c总线切换为目标模式之后,会识别出目标接口的第一管脚为高电平。经过分析之后发现,该种异常情况并不是从机将sda拉低了,而是由于器件插拔等原因,导致i2c总线的电平抖动,致使i2c控制器判断为失去了总线仲裁,从而等待总线上的stop信号,这样在i2c控制器收到stop信号之前,i2c控制器都将不再往总线上发送任何数据。特别是在多主机通信时,会发生这样的异常情况。

因此,该种实施方式中,在确定出目标接口的第一管脚为高电平之后,控制目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制目标接口的第一管脚输出持续预设的第一时长的低电平信号。仍以前文的b0,b1管脚为例,则控制b0和b1均为输出模式,且控制b0为高电平,b1为低电平,持续第一时长。

第一时长的具体取值可以根据实际需要进行设定,例如第一时长可以等于当前的通讯频率的倒数的一半,保障失去仲裁的i2c控制器可以正确接收并识别出stop信号。例如当前的通讯频率为100khz,则第一时长为5us。

在第一时长之后,便控制b1和b0均输出高电平信号,并持续预设的第二时长,第二时长的具体取值可以根据实际需要进行设定。在第二时长之后,便可以恢复为i2c总线模式的操作。恢复为i2c总线模式之后,便可以重新进行仲裁,执行正常的通信流程。

此外,在实际应用中,在步骤s102之后,也可以按照上述的实施例,进行stop信号的发送,即还可以包括:

在控制目标接口的第二管脚输出n个时钟信号之后,控制目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制目标接口的第一管脚输出持续预设的第一时长的低电平信号;

在第一时长之后,控制目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在第二时长之后,执行将目标模式恢复为i2c总线模式的操作。

该种实施方式中,无论是sda被拉低,还是i2c控制器失去仲裁,均会进行stop信号的发送的这一操作,有利于简化程序的设计。

i2c总线上各个i2c控制器的具体类型也均可以根据实际需要进行设定和选取,例如在本发明的一种具体实施方式中,i2c总线上的任一i2c控制器所对应的处理器可以均为ft2000+处理器。

ft2000+处理器通常是64位的ft2000+处理器,处理器中集成了64个自主开发的armv8指令集兼容处理器内核ftc662,采用片上并行系统体系结构。通过集成高效处理器核心、基于数据亲和的大规模一性存储架构、层次式二维mesh互连网络,优化存储访问延时,提供了领先的计算性能、访存带宽和io扩展能力。可以应用在高性能、高吞吐率的服务器领域,例如对处理能力和吞吐能力要求很高的行业大型业务主机、高性能服务器系统和大型互联网数据中心等。

应用本发明实施例所提供的技术方案,并不需要如传统方案中额外的cpld来实现,本申请的方案不会增加硬件成本,也不会增加硬件设计的复杂度,方便进行方案的部署。具体的,本申请将i2c总线与目标接口复用,因此在任一i2c控制器中识别出i2c总线的通信存在故障之后,本申请的方案会将i2c总线切换为目标模式,即使得i2c总线中的串行数据线sda作为目标接口的第一管脚使用,使i2c总线中的串行时钟线scl作为目标接口的第二管脚使用。此时,如果确定出目标接口的第一管脚为低电平,即说明sda被拉低,则i2c控制器会控制目标接口的第二管脚输出n个时钟信号,即输出n个clk信号,当然,n需要为不小于9的正整数,输出了n个时钟信号之后,便可以将sda拉高,即解决了i2c总线中的sda被拉低而引发的通信故障情况,之后便可以将目标模式恢复为i2c总线模式。综上可知,本申请的方案有效地实现了i2c总线的通信故障处理,且不需要增加硬件,有利于降低方案的实施成本,降低了设计的复杂度。

相应于上面的方法实施例,本发明实施例还提供了一种i2c总线的通信故障处理系统,可与上文相互对应参照。该i2c总线的通信故障处理系统可以应用于i2c总线上的任一i2c控制器中,且i2c总线与目标接口复用,可参阅图4,包括:

复用切换模块401,用于在识别出i2c总线的通信存在故障之后,将i2c总线切换为目标模式以使i2c总线中的串行数据线sda作为目标接口的第一管脚使用,使i2c总线中的串行时钟线scl作为目标接口的第二管脚使用;

时钟信号输出模块402,用于在确定出目标接口的第一管脚为低电平之后,控制目标接口的第二管脚输出n个时钟信号;其中,n为不小于9的正整数;

复用恢复模块403,用于将目标模式恢复为i2c总线模式,以使目标接口的第一管脚作为i2c总线中的串行数据线sda使用,使目标接口的第二管脚作为i2c总线中的串行时钟线scl使用。

在本发明的一种具体实施方式中,还可以包括:

stop信号第一模拟模块,用于在确定出目标接口的第一管脚为高电平之后,控制目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制目标接口的第一管脚输出持续预设的第一时长的低电平信号;

stop信号第二模拟模块,用于在第一时长之后,控制目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在第二时长之后,触发复用恢复模块403。

在本发明的一种具体实施方式中,时钟信号输出模块402在控制目标接口的第二管脚输出n个时钟信号之后,还可以触发stop信号第一模拟模块,stop信号第一模拟模块用于控制目标接口的第二管脚输出持续预设的第一时长的高电平信号,且控制目标接口的第一管脚输出持续预设的第一时长的低电平信号;

stop信号第二模拟模块则用于在第一时长之后,控制目标接口的第一管脚以及第二管脚均输出高电平信号,并持续预设的第二时长,并在第二时长之后,触发复用恢复模块403。

在本发明的一种具体实施方式中,时钟信号的周期为t,且t等于当前的通讯频率的倒数。

在本发明的一种具体实施方式中,第一时长等于当前的通讯频率的倒数的一半。

在本发明的一种具体实施方式中,目标接口为gpio接口,目标模式为gpio模式;

相应的,时钟信号输出模块402,具体用于:

将目标接口的第一管脚设置为输入模式,判断目标接口的第一管脚是否为低电平;

如果是,则将目标接口的第二管脚设置为输出模式,控制目标接口的第二管脚输出n个时钟信号。

在本发明的一种具体实施方式中,i2c总线上的任一i2c控制器所对应的处理器均为ft2000+处理器。

相应于上面的方法和系统实施例,本发明实施例还提供了一种服务器,可以包括上述任一实施例中的i2c总线的通信故障处理系统,可与上文相互对应参照,此处不再重复说明。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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