本发明涉及通信技术领域,特别是涉及总线死锁恢复系统和方法。
背景技术:
i2c总线是一种广泛应用于嵌入式系统设备中,实现主控制器与外设之间通信的双线串行总线。i2c总线包括双向的数据线(serialdata,sda)和时钟线(serialclockline,scl)。每一连接到i2c总线上的i2c设备既可作为主设备,用以负责总线时钟、起始信号及相关初始化数据的产生,也可作为从设备,用以作为被寻址对象。i2c总线上连接有至少一个主设备和至少一个从设备。
在实际通信时,主设备先发送一个开始信号,对i2c总线上的从设备进行寻址,从设备响应后可以进行相应的读写操作。读写数据长度以字节为单位,从设备每接收到一个字节,就发出一个应答信号(ak),当受到干扰,时钟信号保持为高电平,数据信号保持为低电电平时,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总线的可靠性和稳定性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为一个实施例中总线死锁恢复系统处于正常工作状态下的示意图;
图1b为图1a中总线死锁恢复系统的i2c总线处于死锁状态下的示意图;
图2为另一个实施例中总线死锁恢复系统的示意图;
图3为再一个实施例中总线死锁恢复系统的示意图;
图4为一个实施例中总线死锁恢复方法的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1a所示,一种总线死锁恢复系统,包括i2c总线、主设备110和从设备120,主设备110、从设备120连接在i2c总线上。i2c总线包括数据线sda和时钟线scl,数据线sda用于传输数据信号,时钟线scl用于传输时钟信号。主设备110、从设备120分别包含两连接线,每一设备的两连接线中,与i2c总线中的数据线sda连接的连接线称为数据连接线,与i2c总线中的时钟线scl连接的连接线称为时钟连接线。其中,主设备110、从设备120可以为i2c总线上允许连接的微处理器以及各种外围设备,如存储器、led及lcd驱动器、a/d及d/a转换器等。
在一个实施例中,主设备110包括输入输出接口112、检测模块114和控制模块116。其中,输入输出接口112接地。检测模块114能够检测i2c总线上传输的时钟信号的状态和数据信号的状态,并根据检测结果判断i2c总线是否处于死锁状态。如图1b所示,控制模块116分别与输入输出接口112、检测模块114连接,当i2c总线处于死锁状态时,控制模块116通过控制输入输出接口使时钟信号在预设时间段后变为低电平信号,使i2c总线从死锁状态恢复。也即,当i2c总线处于死锁状态时,控制模块116通过断开输入输出接口与地的连接,使i2c总线的时钟线与地连接,使时钟信号在预设时间段后变为低电平信号,数据信号变就会由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。该系统能够在降低成本的同时,消除i2c总线的死锁,提高i2c总线的可靠性和稳定性。
在一个实施例中,控制模块116使时钟信号在预设时间段后变为低电平信号,数据信号就会由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。其中,预设时间段为时钟周期的9倍及以上。对于传输速率为100k时,一个时钟周期典型值为10us,高低电平各自保持的时间在5us,也即,可以将时钟信号置低90微秒及以上,就能保证数据信号由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。具体地,预设时间段可以设置为100毫秒。
在一个实施例中,时钟信号的状态包括低电平状态和高电平状态,数据信号的状态包括低电平状态和高电平状态。检测模块的检测结果会呈现多种结果,当检测结果为时钟信号为高电平状态的持续时间大于第一预设值,且数据信号为低电平状态的持续时长大于第二预设值时,检测模块114判定i2c总线处于死锁状态。第一预设值、第二预设值可以相等,也可以不等,其第一预设值、第二预设值均大于时钟周期的9倍及以上。当然,第一预设值、第二预设值也可以根据实际需求来设定,在此不做限定。
可选的,检测模块114还可以通过检测是否收到从设备120反馈的应答信号判断i2c总线是否处于死锁状态。
i2c总线的数据传输可分为四个阶段,包括:开始、数据读写、应答和停止。在实际通信时,主设备110先发送一个开始信号(start),对i2c总线上的从设备120进行寻址,从设备120响应后可以进行相应的读写操作。读写数据长度以字节为单位,从设备120每接收到一个字节,就发出一个应答信号(ak),表示当前传输状态是否正常,一次操作对数据长度没有限制,传输完成后,主设备110向总线发送停止信号(stop)释放总线。当检测模块114未检测到从设备120反馈的应答信号时,则说明i2c总线处于死锁状态,控制模块116通过控制输入输出接口112使时钟信号在预设时间段后变为低电平信号,使i2c总线从死锁状态恢复。
如图2所示,在一个实施例中,总线死锁恢复系统还包括开关单元118,开关单元包括控制端、第一连接端和第二连接端。其中,控制端与输入输出接口112连接,第一连接端与i2c总线的时钟线连接,第二连接端接地。具体地,开关单元118可以为智能开关、三极管、mos管等电控开关。
i2c总线正常通信时,主设备的输入输出接口112经开关单元118接地,检测模块114检测发现,当i2c总线处于死锁状态时,主设备通过输入输出接口112控制开关单元118导通开关单元118的第一连接端和所述第二连接端使时钟线接地,将时钟信号置低,置低预设时间段后,时钟信号变为低电平信号,数据信号变就会由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。
通过该系统,可以快速检测出i2c总线是否处于死锁状态,并在i2c总线处于死锁状态时,使时钟线接地,将时钟信号置低为低电平信号,使i2c总线从死锁状态恢复,该系统在不增加任何复位信号线或缓冲器件的条件下,能够在降低成本的同时,消除i2c总线的死锁,提高i2c总线的可靠性和稳定性。
如图3所示,在一个实施例中,主设备310包括输入输出接口312、检测模块314和控制模块316。其中,输入输出接口312与i2c总线的时钟线连接。检测模块314,检测i2c总线上传输的时钟信号和数据信号的信号状态并根据检测结果判断i2c总线是否处于死锁状态。控制模块316,分别与输入输出接口312、检测模块314连接,当i2c总线处于死锁状态时,控制模块316通过控制输入输出接口312使时钟信号在预设时间段后变为低电平信号,使i2c总线从死锁状态恢复。也即,当i2c总线处于死锁状态时,控制模块316控制输入输出接口312输出低电平给时钟线,将时钟信号置低为低电平信号,置低预设时间段后,输入输出接口312输出高阻态,使i2c总线从死锁状态恢复。该系统能够在降低成本的同时,消除i2c总线的死锁,提高i2c总线的可靠性和稳定性。
在一个实施例中,控制模块316使时钟信号在预设时间段后变为低电平信号,数据信号就会由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。其中,预设时间段为时钟周期的9倍及以上。对于传输速率为100k时,一个时钟周期典型值为10us,高低电平各自保持的时间在5us,也即,可以将时钟信号置低90微秒及以上,就能保证数据信号由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。具体地,预设时间段可以设置为100毫秒。
在一个实施例中,第一预设值、第二预设值可以相等,也可以不等,其第一预设值、第二预设值均大于时钟周期的9倍及以上。当然,第一预设值、第二预设值也可以根据实际需求来设定,在此不做限定。
在一个实施例中,当检测模块314检测到时钟信号为高电平状态的持续时间大于第一预设值,且数据信号为低电平状态的持续时长大于第二预设值时,则检测模块判定i2c总线处于死锁状态。
可选的,检测模块314还可以通过检测是否收到从设备120反馈的应答信号。当检测模块314未检测到从设备120反馈的应答信号时,则说明i2c总线处于死锁状态,控制模块316通过控制输入输出接口312使时钟信号在预设时间段后变为低电平信号,使i2c总线从死锁状态恢复。
在一个实施例中,输入输出接口312为开漏结构或开集结构,输入输出接口312与时钟线连接。i2c总线传输信号时,输入输出接口312输出高阻态,高阻态为三态门电路的一种输出状态,既不是高电平也不是低电平,而是高阻状态。当i2c总线处于死锁状态时,控制模块316控制输入输出接口312输出低电平,这样与输人输出接口312连接的串行时钟线被置低为低电平信号。置低一段时间(100ms)后,输人输出接口312输出高阻态,使i2c总线从死锁状态恢复。
通过该系统,检测模块314可以快速检测出i2c总线是否处于死锁状态,并在i2c总线处于死锁状态时,控制模块316可以控制具有开漏结构或开集结构的输入输出接口312输出低电平给时钟线,将时钟信号置低为低电平信号,置低预设时间段后,输入输出接口312输出高阻态,使i2c总线从死锁状态恢复。该系统在不增加任何复位信号线或缓冲器件的条件下,能够在降低成本的同时,消除i2c总线的死锁,提高i2c总线的可靠性和稳定性。
本发明实施例还提供一种总线死锁恢复方法,总线死锁恢复方法基于总线死锁系统,该系统包括i2c总线、主设备和从设备,主设备、从设备连接在i2c总线上,主设备包括输入输出接口,输入输出接口接地或与i2c总线的时钟线连接。如图4所示,总线死锁恢复方法,包括:
步骤402:主设备检测i2c总线上传输的时钟信号的状态和数据信号的状态,并根据检测结果判断i2c总线是否处于死锁状态。
需要说明的是:i2c总线包括数据线sda和时钟线scl,数据线sda用于传输数据信号,时钟线scl用于传输时钟信号。主设备、从设备分别包含两连接线,每一设备的两连接线中,与i2c总线中的数据线sda连接的连接线称为数据连接线,与i2c总线中的时钟线scl连接的连接线称为时钟连接线。
主设备检测i2c总线上传输的时钟信号的状态和数据信号的状态,其中,时钟信号的状态包括低电平状态和高电平状态,数据信号的状态包括低电平状态和高电平状态。主设备根据检测结果判断i2c总线是否处于死锁状态,也即主设备根据检测的时钟信号的状态和数据信号的状态的结果判断判断i2c总线是否处于死锁状态。
步骤404:当i2c总线处于死锁状态时,主设备通过控制输入输出接口使时钟信号在预设时间段后变为低电平信号,使i2c总线从死锁状态恢复。
当主设备根据检测结果判断该i2c总线处于死锁状态时,主设备通过控制输入输出接口使时钟信号在预设时间段后变为低电平信号,使i2c总线从死锁状态恢复。
上述总线死锁恢复方法,可以快速检测出i2c总线是否处于死锁状态,并在i2c总线处于死锁状态时,将时钟信号置低为低电平信号,使i2c总线从死锁状态恢复,该方法在不增加任何复位信号线或缓冲器件的条件下,能够在降低成本的同时,消除i2c总线的死锁,提高i2c总线的可靠性和稳定性。
在一个实施例中,根据检测结果判断i2c总线是否处于死锁状态,包括:
当时钟信号为高电平状态的持续时间大于第一预设值,且数据信号为低电平状态的持续时长大于第二预设值时,i2c总线处于死锁状态。
时钟信号的状态包括低电平状态和高电平状态,数据信号的状态包括低电平状态和高电平状态。当检测到时钟信号为高电平状态的持续时间大于第一预设值,且数据信号为低电平状态的持续时长大于第二预设值时,则判定i2c总线处于死锁状态。第一预设值、第二预设值可以相等,也可以不等,其第一预设值、第二预设值均大于时钟周期的9倍及以上。当然,第一预设值、第二预设值也可以根据实际需求来设定,在此不做限定。
在一个实施例中,主设备还可以通过检测是否收到从设备反馈的应答信号来判断i2c总线是否处于死锁状态。
i2c总线的数据传输可分为四个阶段,包括:开始、数据读写、应答和停止。在实际通信时,主设备先发送一个开始信号(start),对i2c总线上的从设备进行寻址,从设备响应后可以进行相应的读写操作。读写数据长度以字节为单位,从设备每接收到一个字节,就发出一个应答信号(ak),表示当前传输状态是否正常,一次操作对数据长度没有限制,传输完成后,主设备向总线发送停止信号(stop)释放总线。当未检测到从设备反馈的应答信号时,则说明i2c总线处于死锁状态。
在一个实施例中,所述主设备通过控制所述输入输出接口使所述时钟信号在预设时间段后变为低电平信号,使所述i2c总线从死锁状态恢复,包括:
所述主设备断开所述输入输出接口与地的连接,使所述时钟线接地,将所述时钟信号置低变为低电平信号,使所述i2c总线从死锁状态恢复。
具体地,i2c总线正常通信时,主设备的输入输出接口经开关单元接地,其中,开关单元包括控制端、第一连接端和第二连接端。控制端与输入输出接口连接,第一连接端与i2c总线的时钟线连接,第二连接端接地。当i2c总线处于死锁状态时,主设备通过输入输出接口控制开关单元导通所述第一连接端和所述第二连接端使所述时钟线接地,将时钟信号置低变为低电平信号。置低预设时间段后,数据信号变就会由低电平信号变为高电平信号,使i2c总线从死锁状态恢复。
在一个实施例中,所述主设备通过控制所述输入输出接口使所述时钟信号在预设时间段后变为低电平信号,使所述i2c总线从死锁状态恢复,包括:
所述主设备控制所述输入输出接口输出低电平信号给所述时钟线,使所述时钟信号置低变为低电平信号,使所述i2c总线从死锁状态恢复。
具体地,输入输出接口为开漏结构或开集结构,输入输出接口与时钟线连接。i2c总线传输信号时,输入输出接口输出高阻态,当i2c总线处于死锁状态时,控制模块控制输入输出接口输出低电平,这样与输人输出接口连接的串行时钟线被置低为低电平信号。置低一段时间(100ms)后,输人输出接口输出高阻态,使时钟信号置低变为低电平信号,数据信号释放为高电平信号,使i2c总线从死锁状态恢复。
在一个实施例中,使i2c总线从死锁状态恢复后,还包括从设备对从死锁状态恢复后的i2c总线进行初始化的步骤。
具体地,i2c总线恢复死锁状态后,i2c总线在通讯前,其从设备对从死锁状态恢复后的i2c总线进行初始化以确保i2c总线的稳定性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。