一种IIC总线异常情况下自动复位实现方法及***
技术领域
本发明涉及嵌入式硬件领域,具体涉及一种IIC总线异常情况下自动复位实现方法及***。
背景技术
IIC即Inter-Integrated Circuit(集成电路总线),是由飞利浦半导体公司设计出来的一种简单、双向、二线制、同步串行总线,主要用来连接整体电路,IIC是一种多向控制总线,即多个芯片可以连接到同一总线结构下,利用该总线可实现多主机***所需的裁决、高低速设备同步等功能。由于IIC总线具有信号数量少、自动寻址、多主机时钟同步、仲裁等特点,所以在计算机***中使用IIC总线设计变得十分灵活和方便,IIC越来越多地在各类应用中得到较为广泛的应用。每个IIC从设备都具有唯一的地址,依靠地址的不同,通过总线仲裁,实现每个从设备(slave)和主设备(master)之间的分时访问。但是一旦总线上某个IIC从设备和主设备在正常通信过程中由于一些外界异常因素造成主设备复位,那么就会导致IIC总线通信过程中断,不能完成一个完整的IIC协议帧过程,导致IIC总线一直处于异常状态,相应的IIC从设备,以及整个***中其它IIC设备都无法继续正常工作,相当于IIC总线“挂死”。
对于上述情况,现有技术中,大多数主设备无法做到监测IIC总线异常,或者即使监测到IIC总线异常后也无法自行复位IIC总线,将其恢复为正常状态。即使某些主设备能监测到IIC总线异常,但其***通常为下列三种情况:***在从设备电源设计时增加控制电路,如果IIC总线异常时,主设备控制从设备电源关电和开电来恢复总线为正常状态;***是通过关闭IIC控制器,将IIC接口配置为IO(Input-Output)接口,让IO接口模拟IIC总线协议完成IIC协议帧的传输,之后重新配置为IIC接口,恢复总线为正常状态;***是在IIC主从设备之间设置隔离电路,待机时断开主从设备之间的连接,工作时打开连接,来避免待机状态下IIC总线异常的情况。第一种情况中需要对IIC从设备进行重新上电,造成从设备的大多数寄存器甚至全部寄存器恢复默认值,可能影响其正常工作,而且每个从设备都需要增加电源控制电路,会增加硬件成本。第二种情况中需要更改主设备的IIC/IO接口的配置,虽然IIC/IO接口在主设备中是可配置的,但通常这部分配置在***最底层的硬件配置字里面,只在***刚启动时会随着***其它参数一起配置,而在***完成启动配置后不能再进行随意切换。第三种情况中只是在***待机时断开IIC主从设备的连接,在正常通信出现IIC总线异常时,并没有提出针对性的解决方案。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种IIC总线异常情况下自动复位实现方法,无需对从设备开关电,也无需更改主设备IIC/IO接口的配置,更不需要断开IIC主从设备的连接,便能完成IIC总线异常的监测,且能够自动复位,恢复IIC总线为正常状态。
为达到以上目的,本发明采取的技术方案是,包括:
IIC主设备与IIC从设备建立通讯连接,进行数据交互;
监测IIC总线状态;
IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,以使IIC从设备释放IIC总线;
IIC总线状态恢复为正常,IIC主设备与IIC从设备重新建立连接。
在上述方案的基础上,所述监测IIC总线状态,具体步骤为:
通过CPLD监测IIC总线上时钟信号或数据信号的电平状态以实现对于IIC总线状态的监测。
在上述方案的基础上,所述IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
当IIC总线状态异常时,CPLD将IIC时钟SCL由输入信号转变为输出信号;
IIC时钟SCL发送模拟的9个IIC时钟脉冲至IIC总线;
IIC时钟SCL由输出信号转变为输入信号;
IIC从设备释放IIC总线。
在上述方案的基础上,所述IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
IIC主设备的IIC时钟信号SCL和IIC主设备的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由IIC主设备的GPIO2控制;
当IIC总线状态异常时,CPLD向IIC主设备发送中断请求信号;
通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
IIC从设备释放IIC总线;
二选一开关从GPIO1切回至IIC时钟信号SCL。
在上述方案的基础上,所述IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
IIC主设备的IIC时钟信号SCL和CPLD的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由CPLD的GPIO2控制;
当IIC总线状态异常时,通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
CPLD控制GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
IIC从设备释放IIC总线;
二选一开关从GPIO1切回至IIC时钟信号SCL。
本发明还提供一种IIC总线异常情况下自动复位实现***,包括:
第一连接建立模块,其用于IIC主设备与IIC从设备建立通讯连接,进行数据交互;
监测模块,其用于监测IIC总线状态;
脉冲发送模块,其用于当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,以使IIC从设备释放IIC总线;
第二连接建立模块,其用于当IIC总线状态恢复为正常,IIC主设备与IIC从设备重新建立连接。
在上述方案的基础上,所述监测模块监测IIC总线状态,具体过程为:
通过CPLD监测IIC总线上时钟信号或数据信号的电平状态以实现对于IIC总线状态的监测。
在上述方案的基础上,所述当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
当IIC总线状态异常时,CPLD将IIC时钟SCL由输入信号转变为输出信号;
IIC时钟SCL发送模拟的9个IIC时钟脉冲至IIC总线;
IIC时钟SCL由输出信号转变为输入信号;
IIC从设备释放IIC总线。
在上述方案的基础上,所述当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
IIC主设备的IIC时钟信号SCL和IIC主设备的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由IIC主设备的GPIO2控制;
当IIC总线状态异常时,CPLD向IIC主设备发送中断请求信号;
通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
IIC从设备释放IIC总线;
二选一开关从GPIO1切回至IIC时钟信号SCL。
在上述方案的基础上,所述当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
IIC主设备的IIC时钟信号SCL和CPLD的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由CPLD的GPIO2控制;
当IIC总线状态异常时,通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
CPLD控制GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
IIC从设备释放IIC总线;
二选一开关从GPIO1切回至IIC时钟信号SCL。
与现有技术相比,本发明的优点在于:通过对于IIC总线状态的监测,当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,从而让IIC从设备自动释放IIC总线,使IIC总线恢复正常的状态,整个过程无需对从设备开关电,也无需更改主设备IIC/IO接口的配置,更不需要断开IIC主从设备的连接,便能完成IIC总线异常的监测,且能够自动复位,恢复IIC总线为正常状态。
附图说明
图1为本发明实施例中一种IIC总线异常情况下自动复位实现方法的流程图;
图2为本发明实施例中一种IIC总线异常情况下自动复位实现方法第一个可选实施例的结构示意图;
图3为本发明实施例中一种IIC总线异常情况下自动复位实现方法第二个可选实施例的结构示意图;
图4为本发明实施例中一种IIC总线异常情况下自动复位实现方法第三个可选实施例的结构示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例提供一种IIC总线异常情况下自动复位实现方法,无需对从设备开关电,也无需更改主设备IIC/IO接口的配置,更不需要断开IIC主从设备的连接,便能完成IIC总线异常的监测,且能够自动复位,恢复IIC总线为正常状态。本发明实施例还相应的提供的一种IIC总线异常情况下自动复位实现***。
参见图1所示,本发明实施例提供的一种IIC总线异常情况下自动复位实现方法的一实施例包括:
S1:IIC主设备与IIC从设备建立通讯连接,进行数据交互;
本发明实施例中,IIC主设备启动指令,即可访问IIC从设备,建立通讯连接,然后IIC主设备与IIC从设备通信,进行寄存器读写等数据交互。
S2:监测IIC总线状态;
本发明实施例中,IIC总线上接有CPLD,CPLD以IIC设备的身份并通过菊花链的形式接入到IIC总线中,CPLD用于监测IIC总线状态,CPLD监测IIC总线上时钟信号或数据信号的电平状态以实现对于IIC总线状态的监测。当IIC总线正常工作时,IIC总线上的时钟信号、数据信号的电平处于常高状态或时高时低状态,CPLD只是作为一个IIC从设备身份存在于IIC总线上,不干扰也不影响IIC总线上其它IIC从设备与IIC主设备之间进行正常通信;当IIC总线处于异常工作状态时,IIC总线上的数据信号的电平会一直持续为低,当CPLD监测到IIC总线上数据信号电平一直持续为低时,即可判断IIC总线的工作状态为异常。
S3:IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,以使IIC从设备释放IIC总线;
本发明实施例,利用IIC总线协议中的Bus Clear(总线清零)原理,在数据信号电平一直为低时,往时钟信号上发送9个时钟脉冲,从而让IIC从设备自动释放IIC总线,使IIC总线恢复正常的状态。
S4:IIC总线状态恢复为正常,IIC主设备与IIC从设备重新建立连接。
本发明实施例的一种IIC总线异常情况下自动复位实现方法,通过对于IIC总线状态的监测,当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,从而让IIC从设备自动释放IIC总线,使IIC总线恢复正常的状态,整个过程无需对从设备开关电,也无需更改主设备IIC/IO接口的配置,更不需要断开IIC主从设备的连接,便能完成IIC总线异常的监测,且能够自动复位,恢复IIC总线为正常状态。
可选地,在上述一种IIC总线异常情况下自动复位实现方法实施例的基础上,本发明实施例的一种IIC总线异常情况下自动复位实现方法的第一个可选实施例中,图2所示为IIC主设备、IIC从设备、CPLD间的连接示意图,CPLD与IIC主设备的SCL(时钟线)和SDA(数据线)相连。IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
S311:当IIC总线状态异常时,CPLD将IIC时钟SCL由输入信号转变为输出信号。
S312:IIC时钟SCL发送模拟的9个IIC时钟脉冲至IIC总线;即当IIC总线状态异常时,CPLD从IIC从设备角色变为IIC主设备角色,IIC总线的时钟信号在CPLD中由输入信号转变为输出信号,数据信号在CPLD中依然为输入输出的双向信号,然后CPLD利用其工作时钟进行时钟分频,模拟出IIC时钟,通过转变为输出的IIC时钟管脚,向IIC总线上的IIC从设备发送9个IIC时钟脉冲。
S313:IIC时钟SCL由输出信号转变为输入信号,不干扰也不影响IIC总线上其它IIC从设备与IIC主设备之间进行正常通信;
S314:IIC从设备释放IIC总线。
可选地,在上述一种IIC总线异常情况下自动复位实现方法实施例的基础上,本发明实施例的一种IIC总线异常情况下自动复位实现方法的第二个可选实施例中,图3所示为IIC主设备、IIC从设备、CPLD间的连接示意图。IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
S321:IIC主设备的IIC时钟信号SCL和IIC主设备的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由IIC主设备的GPIO2控制。GPIO,即Gerneral-Purpose input-output,通用输入输出。
S322:当IIC总线状态异常时,CPLD向IIC主设备发送中断请求信号,即CPLD向IIC主设备的IRQ(Interrupt Request,中断请求)管脚发送一个中断请求信号,告知IIC主设备此时IIC总线状态异常。
S323:通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
S324:GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
S325:IIC从设备释放IIC总线;
S326:二选一开关从GPIO1切回至IIC时钟信号SCL。
可选地,在上述一种IIC总线异常情况下自动复位实现方法实施例的基础上,本发明实施例的一种IIC总线异常情况下自动复位实现方法的第二个可选实施例中,图4所示为IIC主设备、IIC从设备、CPLD间的连接示意图。IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
S331:IIC主设备的IIC时钟信号SCL和CPLD的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由CPLD的GPIO2控制;
S332:当IIC总线状态异常时,通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
S333:CPLD控制GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
S334:IIC从设备释放IIC总线;
S335:二选一开关从GPIO1切回至IIC时钟信号SCL。
本发明提供的一种IIC总线异常情况下自动复位实现***的一实施例包括:
第一连接建立模块,其用于IIC主设备与IIC从设备建立通讯连接,进行数据交互;
监测模块,其用于监测IIC总线状态。IIC总线上接有CPLD,监测模块用于驱使CPLD监测IIC总线状态,CPLD监测IIC总线上时钟信号或数据信号的电平状态以实现对于IIC总线状态的监测。
脉冲发送模块,其用于当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,以使IIC从设备释放IIC总线;
第二连接建立模块,其用于当IIC总线状态恢复为正常,IIC主设备与IIC从设备重新建立连接。
可选地,在上述一种IIC总线异常情况下自动复位实现***实施例的基础上,本发明实施例的一种IIC总线异常情况下自动复位实现***的第一个可选实施例中,当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
当IIC总线状态异常时,CPLD将IIC时钟SCL由输入信号转变为输出信号;
IIC时钟SCL发送模拟的9个IIC时钟脉冲至IIC总线;
IIC时钟SCL由输出信号转变为输入信号;
IIC从设备释放IIC总线。
可选地,在上述一种IIC总线异常情况下自动复位实现***实施例的基础上,本发明实施例的一种IIC总线异常情况下自动复位实现***的第二个可选实施例中,当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
IIC主设备的IIC时钟信号SCL和IIC主设备的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由IIC主设备的GPIO2控制;
当IIC总线状态异常时,CPLD向IIC主设备发送中断请求信号;
通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
IIC从设备释放IIC总线;
二选一开关从GPIO1切回至IIC时钟信号SCL。
可选地,在上述一种IIC总线异常情况下自动复位实现***实施例的基础上,本发明实施例的一种IIC总线异常情况下自动复位实现***的第三个可选实施例中,当IIC总线状态异常时,发送IIC时钟脉冲至IIC总线,具体步骤包括:
IIC主设备的IIC时钟信号SCL和CPLD的GPIO1接入二选一开关,再后接IIC从设备,所述二选一开关由CPLD的GPIO2控制;
当IIC总线状态异常时,通过GPIO2控制开关,二选一开关从IIC时钟信号SCL切换到GPIO1;
CPLD控制GPIO1向IIC总线发送模拟的9个IIC时钟脉冲;
IIC从设备释放IIC总线;
二选一开关从GPIO1切回至IIC时钟信号SCL。
本发明是参照根据本发明实施例的方法、设备(***)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。