一种内部集成电路主机的自检方法、装置及主的制造方法

文档序号:6514521阅读:349来源:国知局
一种内部集成电路主机的自检方法、装置及主的制造方法
【专利摘要】本发明公开了一种内部集成电路主机的自检方法、装置及主机,属于通信【技术领域】。所述方法包括:I2C主机检测I2C总线是否忙碌;当所述I2C总线忙碌时,接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常。本发明通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检,可以实时进行,避免了在I2C主机等待自检的过程中,出现当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替,而造成控制I2C总线的I2C主机反复更换的问题。
【专利说明】—种内部集成电路主机的自检方法、装置及主机
【技术领域】
[0001]本发明涉及通信【技术领域】,特别涉及一种内部集成电路主机的自检方法、装置及主机。
【背景技术】
[0002]I2C (Inter Integrated Circuit,内部集成电路)总线是微电子通信控制领域广泛采用的一种总线标准,用于连接I2C主机、I2C从机等器件。I2C主机是初始化发送、产生时钟信号和终止发送的器件,可以成为控制I2C总线的器件,I2C从机是被I2C主机寻址的器件。
[0003]通常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总线上的器件不能正常工作。
[0004]为了避免出现这个问题,当备用的I2C主机与I2C总线连接时,备用的I2C主机会进行自检,以确保备用的I2C主机(如第二 I2C主机)取代当前控制I2C总线的I2C主机(如第一 I2C主机)控制I2C总线时,可以控制I2C总线。现有的I2C主机的自检方法包括:备用的I2C主机在I2C总线上申请I2C总线资源直到该I2C主机控制I2C总线;当该I2C主机控制I2C总线后,向I2C从机发送数据包;若接收到I2C从机的响应信号,则判定该I2C主机能控制I2C总线。
[0005]在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0006]备用的I2C主机只有等到I2C总线空闲时,才能控制I2C总线,并且只有该I2C主机控制I2C总线后,才能向I2C从机发送数据包,以判断该I2C主机能否控制I2C总线,因此现有的I2C主机的自检方法不能实时进行。如果在备用的I2C主机等待I2C总线空闲的过程中,当前控制I2C总线的I2C主机出现了故障,则不能避免出现反复更换控制I2C总线的I2C主机的问题。

【发明内容】

[0007]为了解决现有技术不能实时进行,不能避免出现反复更换控制I2C总线的I2C主机的问题,本发明实施例提供了一种内部集成电路I2C主机的自检方法、装置及主机。所述技术方案如下:
[0008]一方面,本发明实施例提供了一种内部集成电路I2C主机的自检方法,所述I2C主机通过所述I2C主机的链路与I2C总线连接,所述方法包括:
[0009]I2C主机检测I2C总线是否忙碌;[0010]当所述I2C总线忙碌时,接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常。
[0011]在第一种可能的实现方式中,所述I2C主机包括主设备和从设备,所述主设备通过所述I2C主机的链路与所述I2C总线连接,所述从设备与所述主设备连接,所述方法还包括:
[0012]当所述I2C总线忙碌时,控制所述主设备从所述从设备读取数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常;
[0013]当所述I2C主机的链路正常且所述I2C主机的读写功能正常时,判定所述I2C主机能控制所述I2C总线。
[0014]可选地,所述控制所述主设备从所述从设备读数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常,包括:
[0015]控制所述主设备从所述从设备中读取预设数据,当所述主设备读取到的数据与所述主设备中的预设数据相同时,判定所述I2C主机的读功能正常,当所述主设备读取到的数据与所述主设备中的预设数据不同时,判定所述I2C主机的读功能不正常;
[0016]控制所述主设备将所述主设备中的预设数据写入所述从设备,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据相同时,判定所述I2C主机的写功能正常,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据不同时,判定所述I2C主机的写功能不正常。
[0017]在第二种可能的实现方式中,所述I2C总线包括串行时钟线和串行数据线,所述I2C主机的链路包括串行时钟链路和串行数据链路,所述接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常,包括:
[0018]接收所述串行时钟线上的时钟信号,检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常;
[0019]接收所述串行数据线上起始信号后的第一个响应信号,检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常;
[0020]当所述串行时钟链路正常且所述串行数据链路正常时,判定所述I2C主机的链路正常。
[0021]可选地,所述检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常,包括:
[0022]在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的η倍,η > 2且η为整数;
[0023]检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;
[0024]当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;
[0025]当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。[0026]可选地,所述检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常,包括:
[0027]当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常;
[0028]当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正

巾O
[0029]进一步地,所述检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常,还包括:
[0030]当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者,
[0031]当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者,
[0032]当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常;
[0033]否则,判定所述串行数据链路不正常。
[0034]在第三种可能的实现方式中,所述方法还包括:
[0035]当所述I2C总线空闲时,控制所述I2C总线,并向I2C从机发送预设数据包;
[0036]当接收到所述I2C从机发送的响应信号时,判定所述I2C主机能控制所述I2C总线。
[0037]另一方面,本发明实施例提供了一种内部集成电路12C主机的自检装置,所述12C主机通过所述I2C主机的链路与I2C总线连接,所述装置包括:
[0038]总线检测模块,用于检测I2C总线是否忙碌;
[0039]链路检测模块,用于当所述I2C总线忙碌时,接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常。
[0040]在第一种可能的实现方式中,所述I2C主机包括主设备和从设备,所述主设备通过所述I2C主机的链路与所述I2C总线连接,所述从设备与所述主设备连接,所述装置还包括:
[0041]读写功能检测模块,用于当所述I2C总线忙碌时,控制所述主设备从所述从设备读取数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常;
[0042]判断模块,用于当所述I2C主机的链路正常且所述I2C主机的读写功能正常时,判定所述I2C主机能控制所述I2C总线。
[0043]可选地,所述读写功能检测模块包括:
[0044]读取比较单元,用于控制所述主设备从所述从设备中读取预设数据,当所述主设备读取到的数据与所述主设备中的预设数据相同时,判定所述I2C主机的读功能正常,当所述主设备读取到的数据与所述主设备中的预设数据不同时,判定所述I2C主机的读功能不正常;
[0045]写入比较单元,用于控制所述主设备将所述主设备中的预设数据写入所述从设备,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据相同时,判定所述I2C主机的写功能正常,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据不同时,判定所述I2C主机的写功能不正常。
[0046]在第二种可能的实现方式中,所述I2C总线包括串行时钟线和串行数据线,所述I2C主机的链路包括串行时钟链路和串行数据链路,所述链路检测模块包括:
[0047]串行时钟链路检测单元,用于接收所述串行时钟线上的时钟信号,检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常; [0048]串行数据链路检测单元,用于接收所述串行数据线上起始信号后的第一个响应信号,检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常;
[0049]判断单元,用于当所述串行时钟链路正常且所述串行数据链路正常时,判定所述I2C主机的链路正常。
[0050]可选地,所述串行时钟链路检测单元包括:
[0051]采样子单元,用于在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的η倍,n≥2且n为整数;
[0052]数量检测子单元,用于检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。
[0053]可选地,所述串行数据链路检测单元用于,
[0054]当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常;
[0055]当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正常
[0056]进一步地,所述串行数据链路检测单元还用于,
[0057]当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者,
[0058]当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者,
[0059]当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常;
[0060]否则,判定所述串行数据链路不正常。
[0061]在第三种可能的实现方式中,所述装置还包括:
[0062]主机检测模块,用于所述I2C总线空闲时,控制I2C总线,并向12C从机发送预设数据包;
[0063]判断模块,用于当接收到所述I2C从机发送的响应信号时,判定所述12C主机能控制所述12C总线。[0064]又一方面,本发明实施例提供了一种内部集成电路I2C主机,所述主机包括总线接口和处理器,所述处理器用于上述I2C主机的自检方法。
[0065]本发明实施例提供的技术方案带来的有益效果是:
[0066]通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的I2C主机反复更换的问题。
【专利附图】

【附图说明】
[0067]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0068]图1是本发明实施例提供的一种I2C主机的自检方法的应用场景图;
[0069]图2是本发明实施例一提供的一种I2C主机的自检方法的流程图;
[0070]图3是本发明实施例二提供的一种I2C主机的自检方法的流程图;
[0071]图4是本发明实施例二提供的检测I2C主机的链路是否正常的流程图;
[0072]图5是本发明实施例三提供的一种I2C主机的自检方法的流程图;
[0073]图6是本发明实施例四提供的一种I2C主机的自检装置的结构示意图;
[0074]图7是本发明实施例五提供的一种I2C主机的自检装置的结构示意图;
[0075]图8是本发明实施例六提供的一种I2C主机的硬件结构图。
【具体实施方式】
[0076]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0077]首先结合图1简单介绍一下本发明实施例提供的I2C主机的自检方法的应用场景,该应用场景仅为本发明实施例的其中一个应用场景,本发明并不限制于此。
[0078]I2C总线为两线式串行总线,包括SCUSerial Clock,串行时钟)线和SDA(SerialData,串行数据)线,通常用于连接微控制器及其外围设备。如图1所示,为了保证对I2C总线的稳定控制,I2C总线上一般连接有主用和备用两台I2C主机,在本发明实施例中,分别为第一 I2C主机1、第二 I2C主机2,容易知道,主用I2C主机是指当前控制I2C总线的I2C主机,备用I2C主机是指当前未控制I2C总线的I2C主机。
[0079]在本发明实施例中,I2C主机可以为微控制器,如CPLD(Complex ProgrammableLogic Device,复杂可编程逻辑器件)、FPGA (Field Programmable Gate Array,现场可编程门阵列)。
[0080]I2C总线上还连接有若干个I2C从机,例如第一 I2C从机3、第二 I2C从机4、以及第三I2C从机5。在本发明实施例中,I2C从机包括但不限于LOXLiquid Crystal Display,液晶显示器)驱动器、I/O (Input/Output,输入/输出)口(如键盘接口)、存储器(如RAM(Random Access Memory,随机存储器)、EEPROM (Electrically Erasable ProgrammableRead-Only Memory,电可擦可编程只读存储器))、数据转换器、收音机和视频系统的数字调谐和信号处理电路和音频拨号电话的DTMF (Dual Tone Multi Frequency,双音多频)发生器。
[0081]需要说明的是,图1中I2C主机和I2C从机的数目仅为举例,与I2C总线连接的I2C主机数目还可以增多,I2C从机数目可以增多或减少。
[0082]I2C主机和I2C从机均通过各自的I2C链路连接在I2C总线6上。具体地,第一I2C主机I和I2C总线6之间通过第一链路16连接,第二 I2C主机2和I2C总线6之间通过第二链路26连接,第一 I2C从机3和I2C总线6之间通过第三链路36连接,第二 I2C从机4和I2C总线6之间通过第四链路46连接,第三I2C从机5和I2C总线6之间通过第五链路56连接。容易知道,由于I2C总线包括SCL线和SDA线,因此I2C主机或I2C从机各自与I2C总线连接的链路也包括SCL链路和SDA链路两条链路。
[0083]实施例一
[0084]本发明实施例提供了一种I2C主机的自检方法,该方法可以在备用的I2C主机与I2C总线建立连接时执行,参见图2,该方法包括:
[0085]步骤101:I2C主机检测I2C总线是否忙碌。
[0086]步骤102:当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
[0087]本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的I2C主机反复更换的问题。
[0088]实施例二
[0089]本发明实施例提供了一种I2C主机的自检方法,该方法可以在备用的I2C主机与I2C总线建立连接时执行,参见图3,该方法包括:
[0090]步骤201:I2C主机检测I2C总线是否忙碌。
[0091]具体地,该步骤201可以包括:检测SCL线上在一个预设的标准时钟信号的周期内是否有电平变化;若SCL线上在一个预设的标准时钟信号的周期内有电平变化,则I2C总线忙碌;若SCL线上在一个预设的标准时钟信号的周期内没有电平变化,则I2C总线空闲。
[0092]需要说明的是,根据I2C协议,当I2C总线上进行数据传输时,即I2C总线忙碌时,SCL线上会出现高低变化的电平,且电平变化的周期为预设的标准时钟信号的周期(两个高电平之间的时间间隔为预设的标准时钟信号的周期);当I2C总线上没有进行数据传输时,即I2C总线空闲时,SCL线上保持为高电平。通常每个I2C总线上都会预设一个标准时钟信号,每个与该I2C总线连接的设备都可以获取到该I2C总线的标准时钟信号的周期和/或频率。在正常情况下,SCL线上的时钟信号频率与该标准时钟信号频率相同。
[0093]步骤202:当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
[0094]具体地,参见图3,该步骤202可以包括:[0095]步骤2021:接收SCL线上的时钟信号,检测该时钟信号是否与预设的标准时钟信号相同,以判断SCL链路是否正常。
[0096]可选地,该步骤2021可以包括:在采样时间内,以第一信号作为参考信号,对时钟信号进行采样,并记录采样结果为高电平的数量;检测记录的高电平数量是否与预定数量相同;当检测到记录的高电平数量与预定数量相同时,判定SCL链路正常;当检测到记录的高电平数量与预定数量不同时,判定SCL链路不正常。
[0097]在本实施例中,第一信号的频率为标准时钟信号频率的η倍,n ^ 2且η为整数。预定数量是在采样时间内,以第一信号作为参考信号,对标准时钟信号进行采样获得的采样结果为高电平的数量。
[0098]进一步地,采样时间可以为至少一个标准时钟信号的周期。
[0099]步骤2022:接收SDA线上起始信号后的第一个响应信号,检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断SDA链路是否正常。
[0100]可选地,该步骤2022可以包括:当起始信号后的第一个响应信号为低电平时,判定SDA链路正常;当起始信号后的第一个响应信号为高电平时,判定SDA链路不正常。
[0101]需要说明的是,I2C协议中规定,SDA线上必须以字节为单位传输数据,每个字节后跟一个响应信号,但传输的字节数量不受限制。预设的标准响应信号为表明接收成功的响应信号。一般用低电平的响应信号表明接收成功。但当I2C主机读取I2C从机的数据时,I2C主机读取I2C从机最后一个字节的数据后,会将SDA线保持为高电平(由于SDA线和SCL线都通过上拉电路连接到电源,因此只要不进行操作即可实现响应信号为高电平),以表明接收成功,然后I2C主机发送停止信号(SCL线为高电平时,SDA线从低电平切换为高电平)。除了上述情况,`一般当响应信号为高电平时,表明接收失败。
[0102]根据I2C协议,I2C总线上开始数据传输时,首先由I2C主机发送起始信号(SCL线为高电平时,SDA线从高电平切换为低电平),然后I2C主机会发送与该I2C主机通信的I2C从机的七位地址和数据方向位,该七位地址是I2C从机的标识,可根据该地址确定与I2C主机通信的I2C从机。当该I2C从机接收到I2C主机发送的七位地址和数据方向位后,将SDA线上的电平拉低,以实现响应信号为低电平,表明I2C从机已成功接收到I2C主机发送的七位地址和数据方向位。接着根据数据方向位,“O”(低电平)表示I2C主机将数据写入到I2C从机,“I”(高电平)表示I2C主机读取I2C从机的数据,I2C主机和I2C从机之间开始在I2C总线上以八位数据为单位传输数据,每八位数据传输完成后,会有一位响应信号,响应信号是高电平,还是低电平由I2C主机和I2C从机中接收数据的一方决定。数据传输完成后,I2C主机发送停止信号。
[0103]无论数据方向位的电平是高电平还是低电平,I2C主机发送七位地址和数据方向位后,I2C从机如果成功接收,一定会将SDA线上的电平拉低,使响应信号为低电平。数据传输的过程中,如果是I2C主机将数据写入I2C从机,I2C从机每成功接收八位数据后,都会将SDA线上的电平拉低,使响应信号为低电平;如果是I2C主机读取I2C从机的数据,I2C主机每成功接收八位数据后,一般也会将SDA线上的电平拉低,使响应信号为低电平,只有当I2C主机接收到最后八位数据后,才会保持SDA线为高电平,即响应信号为高电平。
[0104]因此只需要检测起始信号后的第一个响应信号(表明I2C从机是否接收到七位地址和数据方向位的响应信号)是否为低电平,即响应信号是否与标准响应信号相同,即可判断SDA链路是否正常,判断方法简单方便。选择起始信号后的第一个响应信号进行判断的原因,一是响应信号的位置是根据起始信号确定的,选择第一个响应信号进行判断比较方便,二是该响应信号只需根据电平高低判断即可,不需要考虑数据方向位和是否是数据传输的最后一位数据,判断起来比较简单。
[0105] 进一步地,该步骤2022还可以包括:当数据方向位、起始信号后的第一个响应信号、起始信号后的第二个响应信号均为低电平时,或者当数据方向位和起始信号后的第二个响应信号均为高电平、起始信号后的第一个响应信号为低电平、起始信号后的第二个响应信号后的信号为停止信号时,或者当数据方向位为高电平、起始信号后的第一个响应信号和起始信号后的第一个响应信号均为低电平、起始信号后的第二个响应信号后的信号不是停止信号时,判定SDA链路正常;否则,判定SDA链路不正常。以防止起始信号后的第一位响应信号是由于I2C总线的误操作而成为低电平信号的,将可能不正常的SDA链路误判为好的,提高了检测的可靠性,降低了风险。
[0106]容易知道,该步骤2022还可以根据起始信号后的第三个响应信号、第四个响应信号、…、甚至是最后一个响应信号判定SDA链路,本发明对判断起始信号后的第几个响应信号、判断几个响应信号并不限制,检测起始信号后的第一个响应信号和第二个响应信号只是优选,本发明并不限制于此。
[0107]步骤2023:当检测到SCL链路正常且SDA链路正常时,判定I2C主机的链路正常。
[0108]步骤203:当I2C总线忙碌时,控制master (主设备)从salve (从设备)读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常。
[0109]在本实施例中,该步骤203在步骤201之后执行,与步骤202没有先后顺序。
[0110]在本实施例中,I2C主机可以包括Controller (控制器)、master (主设备)、slave(从设备)、时钟计数器、以及ACK (Acknowledgement,确认)计数器。控制器用于控制I2C主机自检的执行和自检结果的判定。master用于控制I2C总线和完成I2C主机的读写功能,master还可以用于从slave读取预设数据,以判定I2C主机的读功能是否正常,向slave写入预设数据,以使slave判定I2C主机的写功能是否正常。时钟计数器用于实现SCL线上时钟信号的计数,ACK计数器用于实现SDA线上低电平的响应信号的计数。master通过I2C主机的链路与I2C主机连接,salve、时钟计数器、ACK计数器分别与master连接,Controller分别与master、salve、时钟计数器、ACK计数器连接。其中,Controller、master、时钟计数器、ACK计数器可以为现有的I2C主机中的元器件,salve为本发明实施例在I2C主机中增加的器件。salve可以为与I2C从机相同的元器件,如存储器,但是salve与I2C从机不同,I2C从机与I2C总线连接,salve与master连接且salve中还包括用于比较数据是否相同的器件,如比较器、处理器等。
[0111]具体地,该步骤203可以包括:控制master从salve中读取预设数据,当master读取到的数据与master中的预设数据相同时,判定I2C主机的读功能正常,当master读取到的数据与master中的预设数据不同时,判定I2C主机的读功能不正常;控制master将master中的预设数据写入salve,当master写入salve中的数据与salve中的预设数据相同时,判定I2C主机的写功能正常,当master写入salve中的数据与salve中的预设数据不同时,判定I2C主机的写功能不正常。
[0112]需要说明的是,预设数据为在步骤203之前,存储在master和salve中的数据,且master中的预设数据和salve中的预设数据是相同的。
[0113]步骤204:当检测到I2C主机的链路正常且I2C主机的读写功能正常时,判定I2C主机能控制I2C总线。该步骤204在步骤202和步骤203之后执行。
[0114]在本实施例的一种实现方式中,该方法还可以包括步骤205和步骤206。
[0115]步骤205:当I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包。该步骤205在步骤201之后执行。
[0116]优选地,预设数据包可以为一包占用I2C总线时间少的数据,如只包括七位地址、数据方向位和八位数据的数据包。
[0117]可选地,I2C从机可以是任意选定的,也可以是预先设定的。
[0118]步骤206:当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线。该步骤206在步骤205之后执行。
[0119]容易知道,在步骤202之前,该方法还可以包括步骤:从I2C模式切换为GPIO(General Purpose Input/Output,通用输入输出口)模式。
[0120]相应地,在步骤202之后,该方法还包括步骤:从GPIO模式切换为I2C模式。
[0121]其中,I2C主机在GPIO模式下,只检测I2C总线上的电平变化,不进行数据处理。
[0122]本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。
[0123]实施例三
[0124]本发明实施例提供了一种I2C主机的自检方法,是对实施例二的一种改进,该方法可以在备用的I2C主机与I2C总线建立连接时执行,参见图5,该方法包括:
[0125]步骤301:I2C主机检测I2C总线是否忙碌。当I2C总线空闲时,执行步骤302 ;当I2C总线忙碌时,执行步骤303。
[0126]可选地,该步骤301可以与实施例二中的步骤201相同,在此不再详述。
[0127]步骤302:控制I2C总线,向I2C从机发送预设数据包,并根据是否接收到I2C从机发送的响应信号,判断I2C主机能否控制I2C总线。
[0128]可选地,该步骤302可以包括:当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线;当没有接收到I2C从机发送的响应信号时,判定I2C主机不能控制I2C总线。
[0129]步骤303:接收SCL线上的时钟信号,检测接收的时钟信号是否与预设的标准时钟信号相同,并根据时钟信号的检测结果判断SCL链路是否正常。当SCL链路正常时,执行步骤304 ;当SCL链路不正常时,执行步骤305。
[0130]可选地,该步骤303可以与实施例二中的步骤2021相同,在此不再详述。
[0131 ] 步骤304:接收SDA线上起始信号后的第一个响应信号,检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,并根据起始信号后的第一个响应信号的检测结果判断SDA链路是否正常。当SDA链路正常时,执行步骤306 ;当SDA链路不正常时,执行步骤305。
[0132]可选地,该步骤304可以与实施例二中的步骤2022相同,在此不再详述。
[0133]步骤305:判定I2C主机不能控制I2C总线。
[0134]步骤306:控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常。当I2C主机的读写功能正常时,执行步骤307 ;当I2C主机的读写功能不正常时,执行步骤305。
[0135]可选地,该步骤306可以与实施例二中的步骤203相同,在此不再详述。
[0136]步骤307:判定I2C主机能控制I2C总线。
[0137]容易知道,可以使用标志位Flag标明I2C主机自检的进度,如Flag为000表明未进行自检,Flag为001表明SCL链路自检通过(SCL链路正常),Flag为010表明SDA链路自检通过(SDA链路正常),Flag为100表明读写功能自检通过(读写功能正常),Flag为111表明所有自检通过(链路正常且读写功能正常),Flag为101表明自检不通过(链路不正常或读写功能不正常)。
[0138]本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行12C主机自检。本发明实施例可以实时进行,避免了在12C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。另外,当检测I2C主机的链路不正常时,直接判定I2C主机不能判定I2C总线,不需要继续对I2C主机的读写功能进行检测,节省了检测耗费的时间和资源。
[0139]实施例四
[0140]本发明实施例提供了一种I2C主机的自检装置,适用于检测刚与I2C总线建立连接的I2C主机,参见图6,该装置包括:
[0141]总线检测模块401,用于检测I2C总线是否忙碌;
[0142]链路检测模块402,用于当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
[0143]本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的I2C主机反复更换的问题。
[0144]实施例五
[0145]本发明实施例提供了一种I2C主机的自检装置,适用于检测刚与I2C总线建立连接的I2C主机,参见图7,该装置包括:
[0146]总线检测模块501,用于检测I2C总线是否忙碌;[0147]链路检测模块502,用于当检测到I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
[0148]可选地,总线检测模块501可以包括:
[0149]电平检测单元,用于检测SCL线上在一个预设的标准时钟信号的周期内是否有电平变化;
[0150]总线判断单元,用于当SCL线上在一个预设的标准时钟信号的周期内有电平变化时,判定I2C总线忙碌;当SCL线上在一个预设的标准时钟信号的周期内没有电平变化时,判定I2C总线空闲。
[0151]在实际应用中,电平检测单元可以为时钟计数器,总线判断单元可以为Controller。
[0152]需要说明的是,根据I2C协议,当I2C总线上进行数据传输时,即I2C总线忙碌时,SCL线上会出现高低变化的电平,且电平变化的周期为预设的标准时钟信号的周期(两个高电平之间的时间间隔为预设的标准时钟信号的周期);当I2C总线上没有进行数据传输时,即I2C总线空闲时,SCL线上保持为高电平。通常每个I2C总线上都会预设一个标准时钟信号,每个与该I2C总线连接的设备都可以获取到该I2C总线的标准时钟信号的周期和/或频率。在正常情况下,SCL线上的时钟信号频率与该标准时钟信号频率相同。
[0153]可选地,链路检测模块502可以包括:
[0154]SCL链路检测单元,用于接收SCL线上的时钟信号,检测该时钟信号是否与预设的标准时钟信号相同,以判断SCL链路是否正常;
[0155]SDA链路检测单元,用于接收SDA线上起始信号后的第一个响应信号,检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断SDA链路是否正常;
[0156]判断单元,用于当SCL链路正常且SDA链路正常时,判定I2C主机的链路正常。
[0157]具体地,SCL链路检测单元可以包括:
[0158]采样子单元,用于在采样时间内,以第一信号作为参考信号,对时钟信号进行采样,并记录采样结果为高电平的数量,第一信号的频率为标准时钟信号频率的η倍,η >2且η为整数;
[0159]数量检测子单元,用于检测记录的高电平数量是否与预定数量相同,预定数量是在采样时间内,以第一信号作为参考信号,对标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到记录的高电平数量与预定数量相同时,判定SCL链路正常;当检测到记录的高电平数量与预定数量不同时,判定SCL链路不正常。
[0160]在实际应用中,采样子单元可以为时钟计数器,数量检测子单元可以为Controller。
[0161]具体地,SDA链路检测单元可以用于,当起始信号后的第一个响应信号为低电平时,判定SDA链路正常;当起始信号后的第一个响应信号为高电平时,判定SDA链路不正常。
[0162]在实际应用中,SDA链路检测单元可以为Controller。判定起始信号后的响应信号是否为低电平,可以由ACK计数器完成。
[0163]需要说明的是,I2C协议中规定,SDA线上必须以字节为单位传输数据,每个字节后跟一个响应信号,但传输的字节数量不受限制。预设的标准响应信号为表明接收成功的响应信号。一般用低电平的响应信号表明接收成功。但当I2C主机读取I2C从机的数据时,I2C主机读取I2C从机最后一个字节的数据后,会将SDA线保持为高电平(由于SDA线和SCL线都通过上拉电路连接到电源,因此只要不进行操作即可实现响应信号为高电平),以表明接收成功,然后I2C主机发送停止信号(SCL线为高电平时,SDA线从低电平切换为高电平)。除了上述情况,一般当响应信号为高电平时,表明接收失败。
[0164]根据I2C协议,I2C总线上开始数据传输时,首先由I2C主机发送起始信号(SCL线为高电平时,SDA线从高电平切换为低电平),然后I2C主机会发送与该I2C主机通信的I2C从机的七位地址和数据方向位,该七位地址是I2C从机的标识,可根据该地址确定与I2C主机通信的I2C从机。当该I2C从机接收到I2C主机发送的七位地址和数据方向位后,将SDA线上的电平拉低,以实现响应信号为低电平,表明I2C从机已成功接收到I2C主机发送的七位地址和数据方向位。接着根据数据方向位,“O”(低电平)表示I2C主机将数据写入到I2C从机,“I”(高电平)表示I2C主机读取I2C从机的数据,I2C主机和I2C从机之间开始在I2C总线上以八位数据为单位传输数据,每八位数据传输完成后,会有一位响应信号,响应信号是高电平,还是低电平由I2C主机和I2C从机中接收数据的一方决定。数据传输完成后,I2C主机发送停止信号。
[0165]无论数据方向位的电平是高电平还是低电平,I2C主机发送七位地址和数据方向位后,I2C从机如果成功接收,一定会将SDA线上的电平拉低,使响应信号为低电平。数据传输的过程中,如果是I2C主机将数据写入I2C从机,I2C从机每成功接收八位数据后,都会将SDA线上的电平拉低,使响应信号为低电平;如果是I2C主机读取I2C从机的数据,I2C主机每成功接收八位数据后,一般也会将SDA线上的电平拉低,使响应信号为低电平,只有当I2C主机接收到最后八位数据后,才会保持SDA线为高电平,即响应信号为高电平。
[0166]因此只需要检测起始信号后的第一个响应信号(表明I2C从机是否接收到七位地址和数据方向位的响应信号)是否为低电平,即响应信号是否与标准响应信号相同,即可判断SDA链路是否正常,判断方法简单方便。选择起始信号后的第一个响应信号进行判断的原因,一是响应信号的位置是根据起始信号确定的,选择第一个响应信号进行判断比较方便,二是该响应信号只需根据电平高低判断即可,不需要考虑数据方向位和是否是数据传输的最后一位数据,判断起来比较简单。
[0167]进一步地,SDA链路检测单元还可以用于,当数据方向位、起始信号后的第一个响应信号、起始信号后的第二个响应信号均为低电平时,或者当数据方向位和起始信号后的第二个响应信号均为高电平、起始信号后的第一个响应信号为低电平、起始信号后的第二个响应信号后的信号为停止信号时,或者当数据方向位为高电平、起始信号后的第一个响应信号和起始信号后的第二个响应信号均为低电平、起始信号后的第二个响应信号后的信号不是停止信号时,判定SDA链路正常;否则,判定SDA链路不正常。
[0168]优选地,判断单元还可以用于,当SCL链路不正常时,判定I2C主机的链路不正常。
[0169]在实际应用中,判断单元可以为Controller。
[0170]在本实施例的一种实现方式中,该装置还可以包括:读写功能检测模块503,用于当I2C总线忙碌时,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常。
[0171]判断模块504,用于当I2C主机的链路正常且I2C主机的读写功能正常时,判定I2C主机能控制I2C总线。[0172]在实际应用中,读写功能检测模块503和判断模块504可以为Controller。
[0173]可选地,读写功能检测模块503可以包括:
[0174]读取比较单元,用于控制master从salve中读取预设数据,当master读取到的数据与master中的预设数据相同时,判定I2C主机的读功能正常;当master读取到的数据与master中的预设数据不同时,判定I2C主机的读功能不正常;
[0175]写入比较单元,用于控制master将master中的预设数据写入salve,当master写入salve中的数据与salve中的预设数据相同时,判定I2C主机的写功能正常,当master中写入salve中的数据与salve中的预设数据不同时,判定I2C主机的写功能不正常。
[0176]在实际应用中,判定master读取到的数据与master中的预设数据是否相同,可以由master完成,判定master写入salve中的数据与salve中的预设数据是否相同,可以由salve完成。
[0177]进一步地,判断模块504还可以用于,当I2C主机的链路不正常时,判定I2C主机不能控制I2C总线。
[0178]在本实施例的另一种实现方式中,该装置还可以包括:主机检测模块505,用于当I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包。
[0179]相应地,判断模块504用于,当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线。
[0180]在实际应用中,主机检测模块505可以为master。
[0181]在本实施例的又一种实现方式中,该装置还可以包括隔离模块,用于在装置不访问I2C总线时,隔离装置与I2C总线,可防止I2C总线误操作。
[0182]本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。
[0183]实施例六
[0184]本发明实施例提供了一种I2C主机,参见图8,该I2C主机60—般包括总线接口61、存储器62、以及处理器63等部件。总线接口 61包括I2C主机的链路,用于接收I2C总线上传输的数据包或向I2C总线发送数据包。该I2C主机还包括时钟计数器64和ACK计数器65。时钟计数器64用于实现SCL线上时钟信号的计数,ACK计数器65用于实现SDA线上低电平的响应信号的计数。本领域技术人员可以理解,图8中所示出的结构并不构成对该I2C主机60的限定,该I2C主机60可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0185]下面结合图8对I2C主机60的各个构成部件进行具体的介绍:
[0186]存储器62可用于存储软件程序以及应用模块,处理器63通过运行存储在存储器62的软件程序以及应用模块,从而执行I2C主机60的各种功能应用以及数据处理。存储器62可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如检测I2C总线是否忙碌等)等;存储数据区可存储根据I2C主机60的处理所创建的数据(比如I2C总线是否忙碌的检测结果)等。此外,存储器62可以包括高速RAM(Random Access Memory,随机存取存储器),还可以包括非易失性存储器(non-volatilememory ),例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0187]处理器63运行存储器62中的程序,可用于检测I2C总线是否忙碌。
[0188]具体地,时钟计数器64可用于,检测SCL线上在一个预设的标准时钟信号的周期内是否有电平变化。
[0189]相应地,处理器63可以实现,当SCL线上在一个预设的标准时钟信号的周期内有电平变化时,判定I2C总线忙碌;当SCL线上在一个预设的标准时钟信号的周期内没有电平变化时,判定I2C总线空闲。
[0190]需要说明的是,根据I2C协议,当I2C总线上进行数据传输时,即I2C总线忙碌时,SCL线上会出现高低变化的电平,且电平变化的周期为预设的标准时钟信号的周期(两个高电平之间的时间间隔为预设的标准时钟信号的周期);当I2C总线上没有进行数据传输时,即I2C总线空闲时,SCL线上保持为高电平。通常每个I2C总线上都会预设一个标准时钟信号,每个与该I2C总线连接的设备都可以获取到该I2C总线的标准时钟信号的周期和/或频率。在正常情况下,SCL线上的时钟信号频率与该标准时钟信号频率相同。
[0191]进一步地,总线接口 61可用于,当I2C总线忙碌时,接收I2C总线上传输的数据包。
[0192]相应地,处理器63可以实现,根据I2C总线上传输的数据包检测I2C主机的链路
是否正常。
[0193]具体地,总线接口 61可用于,接收SCL线上的时钟信号、SDA线上起始信号后的第一个响应信号。
[0194]相应地,处理器63可以实现,检测时钟信号是否与预设的标准时钟信号相同,以判断SCL链路是否正常;检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断SDA链路是否正常;当SCL链路正常且SDA链路正常时,判定I2C主机的链路正

巾O
[0195]更具体地,时钟计数器64可用于,在采样时间内,以第一信号作为参考信号,对时钟信号进行采样,并记录采样结果为高电平的数量,第一信号的频率为标准时钟信号频率的η倍,η≥2且η为整数。
[0196]相应地,处理器63可以实现,检测记录的高电平数量是否与预定数量相同,预定数量是在采样时间内,以第一信号作为参考信号,对标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到记录的高电平数量与预定数量相同时,判定SCL链路正常;当检测到记录的高电平数量与预定数量不同时,判定SCL链路不正常。
[0197]更具体地,处理器63可以实现,当起始信号后的第一个响应信号为低电平时,判定SDA链路正常;当起始信号后的第一个响应信号为高电平时,判定SDA链路不正常。
[0198]在实际应用中,判定起始信号后的响应信号是否为低电平,可以由ACK计数器65完成。
[0199]需要说明的是,I2C协议中规定,SDA线上必须以字节为单位传输数据,每个字节后跟一个响应信号,但传输的字节数量不受限制。预设的标准响应信号为表明接收成功的响应信号。一般用低电平的响应信号表明接收成功。但当I2C主机读取I2C从机的数据时,I2C主机读取I2C从机最后一个字节的数据后,会将SDA线保持为高电平(由于SDA线和SCL线都通过上拉电路连接到电源,因此只要不进行操作即可实现响应信号为高电平),以表明接收成功,然后I2C主机发送停止信号(SCL线为高电平时,SDA线从低电平切换为高电平)。除了上述情况,一般当响应信号为高电平时,表明接收失败。
[0200]根据I2C协议,I2C总线上开始数据传输时,首先由I2C主机发送起始信号(SCL线为高电平时,SDA线从高电平切换为低电平),然后I2C主机会发送与该I2C主机通信的I2C从机的七位地址和数据方向位,该七位地址是I2C从机的标识,可根据该地址确定与I2C主机通信的I2C从机。当该I2C从机接收到I2C主机发送的七位地址和数据方向位后,将SDA线上的电平拉低,以实现响应信号为低电平,表明I2C从机已成功接收到I2C主机发送的七位地址和数据方向位。接着根据数据方向位,“O”(低电平)表示I2C主机将数据写入到I2C从机,“I”(高电平)表示I2C主机读取I2C从机的数据,I2C主机和I2C从机之间开始在I2C总线上以八位数据为单位传输数据,每八位数据传输完成后,会有一位响应信号,响应信号是高电平,还是低电平由I2C主机和I2C从机中接收数据的一方决定。数据传输完成后,I2C主机发送停止信号。
[0201 ] 无论数据方向位的电平是高电平还是低电平,I2C主机发送七位地址和数据方向位后,I2C从机如果成功接收,一定会将SDA线上的电平拉低,使响应信号为低电平。数据传输的过程中,如果是I2C主机将数据写入I2C从机,I2C从机每成功接收八位数据后,都会将SDA线上的电平拉低,使响应信号为低电平;如果是I2C主机读取I2C从机的数据,I2C主机每成功接收八位数据后,一般也会将SDA线上的电平拉低,使响应信号为低电平,只有当I2C主机接收到最后八位数据后,才会保持SDA线为高电平,即响应信号为高电平。
[0202]因此只需要检测起始信号后的第一个响应信号(表明I2C从机是否接收到七位地址和数据方向位的响应信号)是否为低电平,即响应信号是否与标准响应信号相同,即可判断SDA链路是否正常,判断方法简单方便。选择起始信号后的第一个响应信号进行判断的原因,一是响应信号的位置是根据起始信号确定的,选择第一个响应信号进行判断比较方便,二是该响应信号只需根据电平高低判断即可,不需要考虑数据方向位和是否是数据传输的最后一位数据,判断起来比较简单。
[0203]进一步地,总线接口 61可用于,接收SDA线上的数据方向位和起始信号后的第二个响应信号。
[0204]相应地,处理器63可以实现,当数据方向位、起始信号后的第一个响应信号、起始信号后的第二个响应信号均为低电平时,或者当数据方向位和起始信号后的第二个响应信号均为高电平、起始信号后的第一个响应信号为低电平、起始信号后的第二个响应信号后的信号为停止信号时,或者当数据方向位为高电平、起始信号后的第一个响应信号和起始信号后的第一个响应信号均为低电平、起始信号后的第二个响应信号后的信号不是停止信号时,判定SDA链路正常;否则,判定SDA链路不正常。以防止起始信号后的第一位响应信号是由于I2C总线的误操作而成为低电平信号的,将可能不正常的SDA链路误判为好的,提高了检测的可靠性,降低了风险。
[0205]优选地,处理器63还可以实现,当SCL链路不正常时,判定I2C主机的链路不正堂
巾O
[0206]在本实施例的一种实现方式中,I2C主机包括多个存储器62,其中,至少有一个存储器62属于master,至少有一个存储器62属于salve。master还包括至少一个处理器,用于实现从slave读取预设数据,以判定I2C主机的读功能是否正常,向slave写入预设数据,以使slave判定I2C主机的写功能是否正常,salve还包括用于比较数据的器件(图8中未示出),如比较器、处理器等。
[0207]处理器63可以实现,当检测到I2C总线忙碌时,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常;当I2C主机的链路正常且I2C主机的读写功能正常时,判定I2C主机能控制I2C总线。
[0208]具体地,处理器63可以实现,控制master从salve中读取预设数据,当master读取到的数据与master中的预设数据相同时,判定I2C主机的读功能正常,当master读取到的数据与master中的预设数据不同时,判定I2C主机的读功能不正常;控制master将master中的预设数据写入salve,当master写入salve中的数据与salve中的预设数据相同时,判定I2C主机的写功能正常,当master写入salve中的数据与salve中的预设数据不同时,判定I2C主机的写功能不正常。
[0209]优选地,处理器63还可以实现,当I2C主机的链路不正常时,判定I2C主机不能控制I2C总线。
[0210]在本实施例的另一种实现方式中,处理器63还可以实现,当I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包。
[0211]相应地,处理器63可以实现,当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线。
[0212]本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。
[0213]需要说明的是:上述实施例提供的I2C主机的自检装置在I2C主机自检时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的I2C主机的自检方法和I2C主机的自检装置实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0214]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0215]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0216]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种内部集成电路I2C主机的自检方法,所述I2C主机通过所述I2C主机的链路与I2C总线连接,其特征在于,所述方法包括: I2C主机检测I2C总线是否忙碌; 当所述I2C总线忙碌时,接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常。
2.根据权利要求1所述的方法,其特征在于,所述I2C主机包括主设备和从设备,所述主设备通过所述I2C主机的链路与所述I2C总线连接,所述从设备与所述主设备连接,所述方法还包括: 当所述I2C总线忙碌时,控制所述主设备从所述从设备读取数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常; 当所述I2C主机的链路正常且所述I2C主机的读写功能正常时,判定所述I2C主机能控制所述I2C总线。
3.根据权利要求2所述的方法,其特征在于,所述控制所述主设备从所述从设备读数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常,包括: 控制所述主设备从所述从设备中读取预设数据,当所述主设备读取到的数据与所述主设备中的预设数据相同时,判定所述I2C主机的读功能正常,当所述主设备读取到的数据与所述主设备 中的预设数据不同时,判定所述I2C主机的读功能不正常; 控制所述主设备将所述主设备中的预设数据写入所述从设备,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据相同时,判定所述I2C主机的写功能正常,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据不同时,判定所述I2C主机的写功能不正常。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述I2C总线包括串行时钟线和串行数据线,所述I2C主机的链路包括串行时钟链路和串行数据链路,所述接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常,包括: 接收所述串行时钟线上的时钟信号,检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常; 接收所述串行数据线上起始信号后的第一个响应信号,检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常; 当所述串行时钟链路正常且所述串行数据链路正常时,判定所述I2C主机的链路正堂巾O
5.根据权利要求4所述的方法,其特征在于,所述检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常,包括:在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的η倍,η >2且η为整数;检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量; 当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正堂巾O
6.根据权利要求4所述的方法,其特征在于,所述检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常,包括: 当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常; 当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正常。
7.根据权利要求6所述的方法,其特征在于,所述检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常,还包括: 当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者, 当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者, 当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常; 否则,判定所述串行数据链路不正常。
8.根据权利要求1-`3任一项所述的方法,其特征在于,所述方法还包括: 当所述I2C总线空闲时,控制所述I2C总线,并向I2C从机发送预设数据包; 当接收到所述I2C从机发送的响应信号时,判定所述I2C主机能控制所述I2C总线。
9.一种内部集成电路I2C主机的自检装置,所述I2C主机通过所述I2C主机的链路与I2C总线连接,其特征在于,所述装置包括: 总线检测模块,用于检测I2C总线是否忙碌; 链路检测模块,用于当所述I2C总线忙碌时,接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常。
10.根据权利要求9所述的装置,其特征在于,所述I2C主机包括主设备和从设备,所述主设备通过所述I2C主机的链路与所述I2C总线连接,所述从设备与所述主设备连接,所述装置还包括: 读写功能检测模块,用于当所述I2C总线忙碌时,控制所述主设备从所述从设备读取数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常; 判断模块,用于当所述I2C主机的链路正常且所述I2C主机的读写功能正常时,判定所述I2C主机能控制所述I2C总线。
11.根据权利要求10所述的装置,其特征在于,所述读写功能检测模块包括: 读取比较单元,用于控制所述主设备从所述从设备中读取预设数据,当所述主设备读取到的数据与所述主设备中的预设数据相同时,判定所述I2C主机的读功能正常,当所述主设备读取到的数据与所述主设备中的预设数据不同时,判定所述I2C主机的读功能不正常; 写入比较单元,用于控制所述主设备将所述主设备中的预设数据写入所述从设备,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据相同时,判定所述I2C主机的写功能正常,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据不同时,判定所述I2C主机的写功能不正常。
12.根据权利要求9-11任一项所述的装置,其特征在于,所述I2C总线包括串行时钟线和串行数据线,所述I2C主机的链路包括串行时钟链路和串行数据链路,所述链路检测模块包括: 串行时钟链路检测单元,用于接收所述串行时钟线上的时钟信号,检测所述时钟信号是否与预设的标准时钟信号相同,以判断所 述串行时钟链路是否正常; 串行数据链路检测单元,用于接收所述串行数据线上起始信号后的第一个响应信号,检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常; 判断单元,用于当所述串行时钟链路正常且所述串行数据链路正常时,判定所述I2C主机的链路正常。
13.根据权利要求12所述的装置,其特征在于,所述串行时钟链路检测单元包括: 采样子单元,用于在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的η倍,η≥2且η为整数; 数量检测子单元,用于检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。
14.根据权利要求12所述的装置,其特征在于,所述串行数据链路检测单元用于, 当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常; 当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正常。
15.根据权利要求14所述的装置,其特征在于,所述串行数据链路检测单元还用于, 当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者, 当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者, 当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常; 否则,判定所述串行数据链路不正常。
16.根据权利要求9-11任一项所述的装置,其特征在于,所述装置还包括: 主机检测模块,用于所述I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包; 判断模块,用于当接收到所述I2C从机发送的响应信号时,判定所述I2C主机能控制所述I2C总线。
17.一种内部集成电路I2C主机,其特征在于,所述主机包括总线接口和处理器,所述处理器用于执行权利 要求1-8任一项所述的I2C主机的自检方法。
【文档编号】G06F11/267GK103530215SQ201310462874
【公开日】2014年1月22日 申请日期:2013年9月30日 优先权日:2013年9月30日
【发明者】郭中天, 种锋生, 黄平 申请人:杭州华为数字技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1