专利名称:一种防止i2c总线锁定的方法、装置及系统的制作方法
技术领域:
本发明涉及电子通信控制领域,具体涉及一种防止I2C总线锁定的方法、装置及系统。
背景技术:
I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。目前已广泛应用在计算机制造,电信设备,消费电子等领域。在I2C总线技术规范中,总线协议有严格的时序要求。总线工作时,由总线上的主器件控制时钟线SCL传送时钟脉冲,由双向数据线SDA传送数据。I2C总线上每次传输的数据字节数不受限制,但每一个字节必须为8位,而且每个传送的字节后面从器件必须跟一个认可位(第9位),也叫应答位(ACK, Acknowledge bit)I2C总线技术规范中,开始和结束信号(也称起始和停止信号)定义如下起始信号⑶在时钟线SCL保持高电平期间,双向数据线SDA出现由高电平向低电平的变化,用于启动I2C总线,为I2C总线的起始信号;停止信号⑵在时钟线SCL保持高电平期间,双向数据线SDA出现由低电平向高电平的变化,用于停止I2C总线,为I2C总线的终止信号;应答信号(A) I2C总线的第9个脉冲对应应答位,若双向数据线SDA上显示低电平则为总线“应答”(A),若双向数据线SDA上显示高电平则为“非应答”(/A)。开始和结束信号一般都是由主器件产生,只有主器件才能对I2C总线实现管理与检测,如起始、停止、发送时钟等。I2C总线数据传输时,在时钟线SCL高电平期间,数据线SDA上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据O。只有在时钟线为低电平时,才允许数据线上的电平状态变化I2C总线的工作速度一般是取决于主控器的性能,参考I2C的总线规范,时钟线SCL的工作频率可以低至OHz。在正常通信的情况下I2C总线是不会锁定的,但是当系统复位时,如果I2C主器件还处在通信过程中,而此时SDA正由从器件驱动时,那么由于复位后主器件没有再发送时钟,SDA被从器件给拉到固定电平,如果SDA此时是低电平,那么主器件复位后,会一直认为I2C总线忙,进而无法对从器件操作,而从器件又无法自动退出这种状态,导致I2C总线被挂起,需要人为干预恢复总线的正常时序。目前各家芯片厂家正对这种情况提供了一些解决方法,例如从器件会检测SCL,当一定时间内没有时钟就结束本次操作,但I2C器件众多各个厂家之间都有差异,这就需要有一个附加的控制装置,统一解决这个问题。对于I2C锁定的恢复,目前采用的主要方法有两种I、复位时检测SDA状态,如果为低,往SCL上输出9个时钟。这种方法实现相对比较简单,也能解除总线锁定的状态,但如果时序在特定的位置被复位,会导致往从器件写入错误数据,由于从器件一般没有复位功能,这种误写有可能会影响系统的正常工作,下面举常用器件EEPROM AT24C04实例分析一下误写情况。图I是一个单字节写操作的SDA时序,图2是一个单字节随机读的SDA时序,在两个图上有I个ACK的标注了一根标示线,首先可以看到从开始到标示线处,读和写的时序都是完全相同的,如果主器件复位后,从器件时序正好处在标示线处,发出ACK等待主器件时钟回应,那么从器件会一直拉低数据线,等待主器件发出的时钟,这时防锁定装置检测到SDA拉低,往SCL上送出9个时钟,第I个时钟后从器件结束响应释放SDA,后面8个时钟参考图I实际上是往当前地址写入了 FF或者00 (取决于主器件在复位状态下SDA引脚输出的默认电平,如果是I或者三态,写入FF,如果是0,写入00),由于EEPROM经常会保存一些配置信息,这种误操作很有可能导致系统的异常,另外9个时钟后时序并未结束,复位后主器件第一次操作,和上次复位时残留的操作拼接成错误时序,也会导致第一次操作失败,只有到主器件发送一个STOP,才能恢复正常。2、复位时检测SDA状态,如果为低,往SCL上输出I个时钟,然后再检测SDA状态,如果为低再送一个时钟,循环往复,直到SDA变高。这种方法相较第一种要复杂很多,可以避免对从器件误写的操作,但是检测SDA变高不一定是从器件释放了 SDA,有可能是在读数据时从器件发送了一个1,如果这时就停止送时钟,那么SDA还是被从器件驱动,复位后主器件在发起第一次I2C操作时START无法正常发出,第一次操作肯定失败,只有等主器件发送一个STOP之后,从器件才会释放SDA。另外这种方法也存在着,复位后主器件第一次操作,和上次复位时残留的操作拼接成错误时序,导致第一次操作失败的问题因此,急需提出一种新的控一种防止I2C总线锁定的方法,避免出现I2C主器件复位过程中I2C总线被锁定以及恢复I2C总线时误操作I2C从器件等情况。
发明内容
本发明要解决的主要技术问题是,提供一种防止I2C总线锁定的方法、装置及系统,避免I2C主器件复位过程中I2C总线被锁定的情况发生,保证恢复I2C总线通信时的正确操作,提高系统工作的可靠性和稳定性。为解决上述技术问题,本发明提供一种防止I2C总线锁定的装置,包括复位信号获取模块,与I2C主器件连接,用于获取外界发送给所述I2C主器件的复位信号;控制模块,与I2C总线有效连接,用于在所述复位信号获取模块获取到所述复位信号后,发送预设的终止信号到所述I2C总线结束所述I2C总线上当前未结束操作。在本发明的一种实施例中,所述I2C总线包括串行时钟线和双向串行数据线,所述控制模块包括的时钟控制线和数据线分别与所述I2C总线的串行时钟总线和双向串行数据线连接。在本发明的一种实施例中,所述预设终止信号包括至少10个特定时序的脉冲。在本发明的一种实施例中,所述预设终止信号为10个特定时序的脉冲,所述特征时序为串行时钟总线上的脉冲与双向串行数据线上的脉冲的相位差为T/4,所述T为脉冲周期。
本发明还提供了一种防止I2C总线锁定的系统,包括I2C主器件和至少一个通过I2C总线与所述I2C主器件连接的I2C从器件,还包括用于防止I2C总线锁定的装置;所述I2C主器件用于接收外界发送的复位信号;所述装置包括复位信号获取模块,与所述I2C主器件连接,用于获取外界发送给所述I2C主器件的复位信号;控制模块,与所述I2C总线有效连接,用于在所述复位 信号获取模块获取到所述复位信号后,发送预设的终止信号到所述I2C总线结束所述I2C总线上当前未结束操作。在本发明的一种实施例中,所述I2C总线包括串行时钟线和双向串行数据线,所述控制模块包括的时钟控制线和数据线分别与所述I2C总线的串行时钟总线和双向串行数据线连接。在本发明的一种实施例中,所述预设终止信号包括至少10个特定时序的脉冲。在本发明的一种实施例中,所述预设终止信号为10个特定时序的脉冲,所述特征时序为串行时钟总线上的脉冲与双向串行数据线上的脉冲的相位差为T/4,所述T为脉冲周期。本发明还提供了一种防止I2C总线锁定的方法,包括检测I2C主器件是否收到外界发送复位信号;若检测到I2C主器件收到外界发送复位信号,则发送预设的终止信号到I2C总线结束所述I2C总线上当前未结束操作。在本发明的一种实施例中,所述预设终止信号包括至少10个特定时序的脉冲。在本发明的一种实施例中,所述预设终止信号为10个特定时序的脉冲,所述特征时序为串行时钟总线上的脉冲与双向串行数据线上的脉冲的相位差为T/4,所述T为脉冲周期。本发明的有益效果是本发明通过与I2C主器件连接的复位信号获取模块获取外界发送给I2C主器件的复位信号,获取到该复位信号后,表明I2C主器件要进行复位操作;然后通过与I2C总线有效连接的控制模块发送预设的终止信号到I2C总线结束该I2C总线上当前未结束操作,避免I2C主器件在复位过程中导致通信终端引起I2C总线被锁定的情况发生,避免了恢复I2C总线通信时对I2C从器件进行误操作,提高了系统工作的可靠性和稳定性。
图I为本发明一种单字节写操作的SDA时序图;图2为本发明一种单字节随机读的SDA时序图;图3为本发明一种实施例的防止I2C总线锁定的系统的结构框图;图4为本发明一种实施例的防止I2C总线锁定的装置的结构框图;图5为本发明一种实施例的特定时序的脉冲示意图;图6为本发明一种实施例的防止I2C总线锁定的方法的流程图。
具体实施例方式下面通过具体实施方式
结合附图对本发明作进一步详细说明。
请参考图3,本实施例中提供的防止I2C总线锁定的系统包括I2C主器件和至少一个通过I2C总线与所述I2C主器件连接的I2C从器件,I2C从器件还可包括多种类型,还包括用于防止I2C总线锁定的装置;其中,I2C主器件可用于接收外界发送的复位信号;请参见图4,本实施例中的用于防止I2C总线锁定的装置具体包括复位信号获取模块,与I2C主器件连接,用于获取外界发送给I2C主器件的复位信号;控制模块,与I2C总线有效连接,用于在复位信号获取模块获取到复位信号后,发送预设的终止信号到I2C总线结束I2C总线上当前未结束操作。即实施例主要通过在I2C总线上增加一个用于防止I2C总线锁定的装置,监测I2C主器件的复位信号,当发现主器件被复位时,送出设定的终止信号,结束I2C总线上可能中断的I2C总线操作。在复位期间主器件的控制器一般都是高阻输出,而从器件一般都没有复位管脚,也无法感知主器件被复位,因此在这种状态下用于防止I2C总线锁定的装置完全可以模拟主器件对从器件进行操作。避免I2C主器件在复位过程中导致通信终端引起I2C总线被锁定的情况发生,可避免恢复I2C总线通信时对I2C从器件进行误操作,提高系统工作的可靠性和稳定性。具体的,本实施例中的用于在复位信号获取模块可通过特定的硬件电路或者可编程器件实现;I2C总线包括串行时钟线SCL和双向串行数据线SDA,上述用于防止I2C总线锁定的装置包括的控制模块包括时钟控制线和数据线,且分别与I2C总线的串行时钟总线和双向串行数据线连接,以在I2C主器件复位时,发出预设的终止信号到I2C总线上。由于I2C总线上每个传送字节后面I2C从器件必须跟一个认可位,因此可认为I2C总线上的每个字节的长度为9位,进而可知I2C从器件需要最多9个终止信号STOP才能释放双向串行数据线SDA,基于上述分析,本实施例中的预设终止信号包括至少10个特定时序的脉冲,具体可优选为预设终止信号为10个特定时序的脉冲,请参见图5,该特定时序为串行时钟总线上SCL的脉冲与双向串行数据线SDA上的脉冲的相位差为T/4,该T为脉冲周期,具体为串行时钟总线上SCL的脉冲的相位比双向串行数据线SDA上的脉冲的相位提前T/4。当I2C从器件需要最多9个终止信号STOP才能释放双向串行数据线SDA时,在第10个特定时序的脉冲时从器件响应,本次操作结束。由上可知,如果从器件需要N (0 < N < 10)个时钟释放SDA,那么那N个时钟之内SDA对于从器件都是输出,前N个STOP就等效为N个时钟,第N+1个STOP从器件响应,总线操作结束,后面如果还有STOP,对总线没有影响。因此本实施例中的预设终止信号包括的特定时序的脉冲个数具体可根据实际情况进行选择,并非固定为上述10个。为了更好的理解本发明,下面结合防止I2C总线锁定的具体方法对本发明做进一步说明,请参见图6 步骤61 :检测到I2C主器件收到外界发送复位信号;步骤62 :发送上述预设的终止信号(即图5所示的脉冲信号)到I2C总线结束所述I2C总线上当前未结束操作。本实施例中的方法不需要监控或者考虑I2C总线的状态,实现流程更简单、成本更低,下面以各种情况为例做进一步的简要说明
I、复位时I2C总线空闲,没有正在进行的读写操作这种情况下,10个STOP对从器件没有任何影响,总线保持空闲2、复位时12C总线正在通信,SDA由主器件驱动这种情况,从器件响应第一个STOP,结束上一次操作,后续STOP不响应,总线保持空闲。3复位时12C总线正在通信,SDA由从器件驱动这里不管从器件驱动的SDA是高还是低,对于从器件来说SDA都是输出,假设从器件需要最多的9个时钟才能释放数据线,那么控制模块发出的前9个STOP,对于从器件而言,由于SDA从器件是输出,实际就等效为9个时钟,这样9个STOP后从器件释放SDA,这时最后第10个STOP从器件响应,本次操作结束,总线保持空闲。步骤63:操作结束。本发明通过与I2C主器件连接的复位信号获取模块监测I2C主器件是否要进行复位操作;如是,通过与I2C总线有效连接的控制模块发送预设的终止信号到I2C总线结束该I2C总线上当前未结束操作,避免I2C主器件在复位过程中导致通信终端引起I2C总线被锁定的情况发生,可避免恢复I2C总线通信时对I2C从器件进行误操作,进而提高系统工作的可靠性和稳定性。以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。权利要求
1.ー种防止I2C总线锁定的装置,其特征在于包括 复位信号获取模块,与I2C主器件连接,用于获取外界发送给所述I2C主器件的复位信号; 控制模块,与I2C总线有效连接,用于在所述复位信号获取模块获取到所述复位信号后,发送预设的终止信号到所述I2C总线结束所述I2C总线上当前未结束操作。
2.如权利要求I所述防止I2C总线锁定的装置,其特征在于,所述I2C总线包括串行时钟线和双向串行数据线,所述控制模块包括的时钟控制线和数据线分别与所述I2C总线的串行时钟总线和双向串行数据线连接。
3.如权利要求I或2所述的防止I2C总线锁定的装置,其特征在于,所述预设終止信号包括至少10个特定时序的脉冲。
4.如权利要求3所述的防止I2C总线锁定的装置,其特征在于,所述预设終止信号为10个特定时序的脉冲,所述特征时序为串行时钟总线上的脉冲与双向串行数据线上的脉冲的相位差为T/4,所述T为脉冲周期。
5.ー种防止I2C总线锁定的系统,其特征在于,包括I2C主器件和至少ー个通过I2C总线与所述I2C主器件连接的I2C从器件,还包括用于防止I2C总线锁定的装置; 所述I2C主器件用于接收外界发送的复位信号; 所述装置包括复位信号获取模块,与所述I2C主器件连接,用于获取外界发送给所述I2C主器件的复位信号; 控制模块,与所述I2C总线有效连接,用于在所述复位信号获取模块获取到所述复位信号后,发送预设的终止信号到所述I2C总线结束所述I2C总线上当前未结束操作。
6.如权利要求5所述防止I2C总线锁定的系统,其特征在于,所述I2C总线包括串行时钟线和双向串行数据线,所述控制模块包括的时钟控制线和数据线分别与所述I2C总线的串行时钟总线和双向串行数据线连接。
7.如权利要求5或6所述的防止I2C总线锁定的系统,其特征在于,所述预设終止信号包括至少10个特定时序的脉冲。
8.如权利要求7所述的防止I2C总线锁定的系统,其特征在于,所述预设終止信号为10个特定时序的脉冲,所述特征时序为串行时钟总线上的脉冲与双向串行数据线上的脉冲的相位差为T/4,所述T为脉冲周期。
9.ー种防止I2C总线锁定的方法,其特征在于包括 检测I2C主器件是否收到外界发送复位信号; 若检测到I2C主器件收到外界发送复位信号,则发送预设的終止信号到I2C总线结束所述I2C总线上当前未结束操作。
10.如权利要求9所述的防止I2C总线锁定的方法,其特征在于,所述预设終止信号包括至少10个特定时序的脉冲。
11.如权利要求10所述的防止I2C总线锁定的方法,其特征在于,所述预设終止信号为10个特定时序的脉冲,所述特征时序为串行时钟总线上的脉冲与双向串行数据线上的脉冲的相位差为T/4,所述T为脉冲周期。
全文摘要
本发明公开了一种防止I2C总线锁定的方法、装置及系统,通过与I2C主器件连接的复位信号获取模块获取外界发送给I2C主器件的复位信号,获取到该复位信号后,表明I2C主器件要进行复位操作;然后通过与I2C总线有效连接的控制模块发送预设的终止信号到I2C总线结束该I2C总线上当前未结束操作,避免I2C主器件在复位过程中导致通信终端引起I2C总线被锁定的情况发生,避免了恢复I2C总线通信时对I2C从器件进行误操作,提高了系统工作的可靠性和稳定性。
文档编号G06F13/40GK102662902SQ20121009036
公开日2012年9月12日 申请日期2012年3月30日 优先权日2012年3月30日
发明者董超 申请人:中兴通讯股份有限公司