CN103530215A - 一种内部集成电路主机的自检方法、装置及主机 - Google Patents

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

Info

Publication number
CN103530215A
CN103530215A CN201310462874.4A CN201310462874A CN103530215A CN 103530215 A CN103530215 A CN 103530215A CN 201310462874 A CN201310462874 A CN 201310462874A CN 103530215 A CN103530215 A CN 103530215A
Authority
CN
China
Prior art keywords
main frame
signal
bus
link
normal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310462874.4A
Other languages
English (en)
Other versions
CN103530215B (zh
Inventor
郭中天
种锋生
黄平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XFusion Digital Technologies Co Ltd
Original Assignee
Hangzhou Huawei Digital Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Huawei Digital Technologies Co Ltd filed Critical Hangzhou Huawei Digital Technologies Co Ltd
Priority to CN201310462874.4A priority Critical patent/CN103530215B/zh
Publication of CN103530215A publication Critical patent/CN103530215A/zh
Application granted granted Critical
Publication of CN103530215B publication Critical patent/CN103530215B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明公开了一种内部集成电路主机的自检方法、装置及主机,属于通信技术领域。所述方法包括:I2C主机检测I2C总线是否忙碌;当所述I2C总线忙碌时,接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常。本发明通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检,可以实时进行,避免了在I2C主机等待自检的过程中,出现当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替,而造成控制I2C总线的I2C主机反复更换的问题。

Description

一种内部集成电路主机的自检方法、装置及主机
技术领域
本发明涉及通信技术领域,特别涉及一种内部集成电路主机的自检方法、装置及主机。
背景技术
I2C(Inter Integrated Circuit,内部集成电路)总线是微电子通信控制领域广泛采用的一种总线标准,用于连接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主机不能控制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总线。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
备用的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主机包括主设备和从设备,所述主设备通过所述I2C主机的链路与所述I2C总线连接,所述从设备与所述主设备连接,所述方法还包括:
当所述I2C总线忙碌时,控制所述主设备从所述从设备读取数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常;
当所述I2C主机的链路正常且所述I2C主机的读写功能正常时,判定所述I2C主机能控制所述I2C总线。
可选地,所述控制所述主设备从所述从设备读数据并向所述从设备写入数据,以检测所述I2C主机的读写功能是否正常,包括:
控制所述主设备从所述从设备中读取预设数据,当所述主设备读取到的数据与所述主设备中的预设数据相同时,判定所述I2C主机的读功能正常,当所述主设备读取到的数据与所述主设备中的预设数据不同时,判定所述I2C主机的读功能不正常;
控制所述主设备将所述主设备中的预设数据写入所述从设备,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据相同时,判定所述I2C主机的写功能正常,当所述主设备写入所述从设备中的数据与所述从设备中的预设数据不同时,判定所述I2C主机的写功能不正常。
在第二种可能的实现方式中,所述I2C总线包括串行时钟线和串行数据线,所述I2C主机的链路包括串行时钟链路和串行数据链路,所述接收所述I2C总线上传输的数据包,并根据所述数据包检测所述I2C主机的链路是否正常,包括:
接收所述串行时钟线上的时钟信号,检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常;
接收所述串行数据线上起始信号后的第一个响应信号,检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常;
当所述串行时钟链路正常且所述串行数据链路正常时,判定所述I2C主机的链路正常。
可选地,所述检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常,包括:
在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的n倍,n≥2且n为整数;
检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;
当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;
当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。
可选地,所述检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常,包括:
当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常;
当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正常。
进一步地,所述检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常,还包括:
当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者,
当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者,
当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常;
否则,判定所述串行数据链路不正常。
在第三种可能的实现方式中,所述方法还包括:
当所述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总线包括串行时钟线和串行数据线,所述I2C主机的链路包括串行时钟链路和串行数据链路,所述链路检测模块包括:
串行时钟链路检测单元,用于接收所述串行时钟线上的时钟信号,检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常;
串行数据链路检测单元,用于接收所述串行数据线上起始信号后的第一个响应信号,检测所述起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断所述串行数据链路是否正常;
判断单元,用于当所述串行时钟链路正常且所述串行数据链路正常时,判定所述I2C主机的链路正常。
可选地,所述串行时钟链路检测单元包括:
采样子单元,用于在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的n倍,n≥2且n为整数;
数量检测子单元,用于检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。
可选地,所述串行数据链路检测单元用于,
当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常;
当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正常。
进一步地,所述串行数据链路检测单元还用于,
当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者,
当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者,
当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常;
否则,判定所述串行数据链路不正常。
在第三种可能的实现方式中,所述装置还包括:
主机检测模块,用于所述I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包;
判断模块,用于当接收到所述I2C从机发送的响应信号时,判定所述I2C主机能控制所述I2C总线。
又一方面,本发明实施例提供了一种内部集成电路I2C主机,所述主机包括总线接口和处理器,所述处理器用于上述I2C主机的自检方法。
本发明实施例提供的技术方案带来的有益效果是:
通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的I2C主机反复更换的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种I2C主机的自检方法的应用场景图;
图2是本发明实施例一提供的一种I2C主机的自检方法的流程图;
图3是本发明实施例二提供的一种I2C主机的自检方法的流程图;
图4是本发明实施例二提供的检测I2C主机的链路是否正常的流程图;
图5是本发明实施例三提供的一种I2C主机的自检方法的流程图;
图6是本发明实施例四提供的一种I2C主机的自检装置的结构示意图;
图7是本发明实施例五提供的一种I2C主机的自检装置的结构示意图;
图8是本发明实施例六提供的一种I2C主机的硬件结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
首先结合图1简单介绍一下本发明实施例提供的I2C主机的自检方法的应用场景,该应用场景仅为本发明实施例的其中一个应用场景,本发明并不限制于此。
I2C总线为两线式串行总线,包括SCL(Serial Clock,串行时钟)线和SDA(Serial Data,串行数据)线,通常用于连接微控制器及其***设备。如图1所示,为了保证对I2C总线的稳定控制,I2C总线上一般连接有主用和备用两台I2C主机,在本发明实施例中,分别为第一I2C主机1、第二I2C主机2,容易知道,主用I2C主机是指当前控制I2C总线的I2C主机,备用I2C主机是指当前未控制I2C总线的I2C主机。
在本发明实施例中,I2C主机可以为微控制器,如CPLD(ComplexProgrammable Logic Device,复杂可编程逻辑器件)、FPGA(Field ProgrammableGate Array,现场可编程门阵列)。
I2C总线上还连接有若干个I2C从机,例如第一I2C从机3、第二I2C从机4、以及第三I2C从机5。在本发明实施例中,I2C从机包括但不限于LCD(LiquidCrystal Display,液晶显示器)驱动器、I/O(Input/Output,输入/输出)口(如键盘接口)、存储器(如RAM(Random Access Memory,随机存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器))、数据转换器、收音机和视频***的数字调谐和信号处理电路和音频拨号电话的DTMF(Dual Tone Multi Frequency,双音多频)发生器。
需要说明的是,图1中I2C主机和I2C从机的数目仅为举例,与I2C总线连接的I2C主机数目还可以增多,I2C从机数目可以增多或减少。
I2C主机和I2C从机均通过各自的I2C链路连接在I2C总线6上。具体地,第一I2C主机1和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链路两条链路。
实施例一
本发明实施例提供了一种I2C主机的自检方法,该方法可以在备用的I2C主机与I2C总线建立连接时执行,参见图2,该方法包括:
步骤101:I2C主机检测I2C总线是否忙碌。
步骤102:当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的I2C主机反复更换的问题。
实施例二
本发明实施例提供了一种I2C主机的自检方法,该方法可以在备用的I2C主机与I2C总线建立连接时执行,参见图3,该方法包括:
步骤201:I2C主机检测I2C总线是否忙碌。
具体地,该步骤201可以包括:检测SCL线上在一个预设的标准时钟信号的周期内是否有电平变化;若SCL线上在一个预设的标准时钟信号的周期内有电平变化,则I2C总线忙碌;若SCL线上在一个预设的标准时钟信号的周期内没有电平变化,则I2C总线空闲。
需要说明的是,根据I2C协议,当I2C总线上进行数据传输时,即I2C总线忙碌时,SCL线上会出现高低变化的电平,且电平变化的周期为预设的标准时钟信号的周期(两个高电平之间的时间间隔为预设的标准时钟信号的周期);当I2C总线上没有进行数据传输时,即I2C总线空闲时,SCL线上保持为高电平。通常每个I2C总线上都会预设一个标准时钟信号,每个与该I2C总线连接的设备都可以获取到该I2C总线的标准时钟信号的周期和/或频率。在正常情况下,SCL线上的时钟信号频率与该标准时钟信号频率相同。
步骤202:当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
具体地,参见图3,该步骤202可以包括:
步骤2021:接收SCL线上的时钟信号,检测该时钟信号是否与预设的标准时钟信号相同,以判断SCL链路是否正常。
可选地,该步骤2021可以包括:在采样时间内,以第一信号作为参考信号,对时钟信号进行采样,并记录采样结果为高电平的数量;检测记录的高电平数量是否与预定数量相同;当检测到记录的高电平数量与预定数量相同时,判定SCL链路正常;当检测到记录的高电平数量与预定数量不同时,判定SCL链路不正常。
在本实施例中,第一信号的频率为标准时钟信号频率的n倍,n≥2且n为整数。预定数量是在采样时间内,以第一信号作为参考信号,对标准时钟信号进行采样获得的采样结果为高电平的数量。
进一步地,采样时间可以为至少一个标准时钟信号的周期。
步骤2022:接收SDA线上起始信号后的第一个响应信号,检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断SDA链路是否正常。
可选地,该步骤2022可以包括:当起始信号后的第一个响应信号为低电平时,判定SDA链路正常;当起始信号后的第一个响应信号为高电平时,判定SDA链路不正常。
需要说明的是,I2C协议中规定,SDA线上必须以字节为单位传输数据,每个字节后跟一个响应信号,但传输的字节数量不受限制。预设的标准响应信号为表明接收成功的响应信号。一般用低电平的响应信号表明接收成功。但当I2C主机读取I2C从机的数据时,I2C主机读取I2C从机最后一个字节的数据后,会将SDA线保持为高电平(由于SDA线和SCL线都通过上拉电路连接到电源,因此只要不进行操作即可实现响应信号为高电平),以表明接收成功,然后I2C主机发送停止信号(SCL线为高电平时,SDA线从低电平切换为高电平)。除了上述情况,一般当响应信号为高电平时,表明接收失败。
根据I2C协议,I2C总线上开始数据传输时,首先由I2C主机发送起始信号(SCL线为高电平时,SDA线从高电平切换为低电平),然后I2C主机会发送与该I2C主机通信的I2C从机的七位地址和数据方向位,该七位地址是I2C从机的标识,可根据该地址确定与I2C主机通信的I2C从机。当该I2C从机接收到I2C主机发送的七位地址和数据方向位后,将SDA线上的电平拉低,以实现响应信号为低电平,表明I2C从机已成功接收到I2C主机发送的七位地址和数据方向位。接着根据数据方向位,“0”(低电平)表示I2C主机将数据写入到I2C从机,“1”(高电平)表示I2C主机读取I2C从机的数据,I2C主机和I2C从机之间开始在I2C总线上以八位数据为单位传输数据,每八位数据传输完成后,会有一位响应信号,响应信号是高电平,还是低电平由I2C主机和I2C从机中接收数据的一方决定。数据传输完成后,I2C主机发送停止信号。
无论数据方向位的电平是高电平还是低电平,I2C主机发送七位地址和数据方向位后,I2C从机如果成功接收,一定会将SDA线上的电平拉低,使响应信号为低电平。数据传输的过程中,如果是I2C主机将数据写入I2C从机,I2C从机每成功接收八位数据后,都会将SDA线上的电平拉低,使响应信号为低电平;如果是I2C主机读取I2C从机的数据,I2C主机每成功接收八位数据后,一般也会将SDA线上的电平拉低,使响应信号为低电平,只有当I2C主机接收到最后八位数据后,才会保持SDA线为高电平,即响应信号为高电平。
因此只需要检测起始信号后的第一个响应信号(表明I2C从机是否接收到七位地址和数据方向位的响应信号)是否为低电平,即响应信号是否与标准响应信号相同,即可判断SDA链路是否正常,判断方法简单方便。选择起始信号后的第一个响应信号进行判断的原因,一是响应信号的位置是根据起始信号确定的,选择第一个响应信号进行判断比较方便,二是该响应信号只需根据电平高低判断即可,不需要考虑数据方向位和是否是数据传输的最后一位数据,判断起来比较简单。
进一步地,该步骤2022还可以包括:当数据方向位、起始信号后的第一个响应信号、起始信号后的第二个响应信号均为低电平时,或者当数据方向位和起始信号后的第二个响应信号均为高电平、起始信号后的第一个响应信号为低电平、起始信号后的第二个响应信号后的信号为停止信号时,或者当数据方向位为高电平、起始信号后的第一个响应信号和起始信号后的第一个响应信号均为低电平、起始信号后的第二个响应信号后的信号不是停止信号时,判定SDA链路正常;否则,判定SDA链路不正常。以防止起始信号后的第一位响应信号是由于I2C总线的误操作而成为低电平信号的,将可能不正常的SDA链路误判为好的,提高了检测的可靠性,降低了风险。
容易知道,该步骤2022还可以根据起始信号后的第三个响应信号、第四个响应信号、…、甚至是最后一个响应信号判定SDA链路,本发明对判断起始信号后的第几个响应信号、判断几个响应信号并不限制,检测起始信号后的第一个响应信号和第二个响应信号只是优选,本发明并不限制于此。
步骤2023:当检测到SCL链路正常且SDA链路正常时,判定I2C主机的链路正常。
步骤203:当I2C总线忙碌时,控制master(主设备)从salve(从设备)读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常。
在本实施例中,该步骤203在步骤201之后执行,与步骤202没有先后顺序。
在本实施例中,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中还包括用于比较数据是否相同的器件,如比较器、处理器等。
具体地,该步骤203可以包括:控制master从salve中读取预设数据,当master读取到的数据与master中的预设数据相同时,判定I2C主机的读功能正常,当master读取到的数据与master中的预设数据不同时,判定I2C主机的读功能不正常;控制master将master中的预设数据写入salve,当master写入salve中的数据与salve中的预设数据相同时,判定I2C主机的写功能正常,当master写入salve中的数据与salve中的预设数据不同时,判定I2C主机的写功能不正常。
需要说明的是,预设数据为在步骤203之前,存储在master和salve中的数据,且master中的预设数据和salve中的预设数据是相同的。
步骤204:当检测到I2C主机的链路正常且I2C主机的读写功能正常时,判定I2C主机能控制I2C总线。该步骤204在步骤202和步骤203之后执行。
在本实施例的一种实现方式中,该方法还可以包括步骤205和步骤206。
步骤205:当I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包。该步骤205在步骤201之后执行。
优选地,预设数据包可以为一包占用I2C总线时间少的数据,如只包括七位地址、数据方向位和八位数据的数据包。
可选地,I2C从机可以是任意选定的,也可以是预先设定的。
步骤206:当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线。该步骤206在步骤205之后执行。
容易知道,在步骤202之前,该方法还可以包括步骤:从I2C模式切换为GPIO(General Purpose Input/Output,通用输入输出口)模式。
相应地,在步骤202之后,该方法还包括步骤:从GPIO模式切换为I2C模式。
其中,I2C主机在GPIO模式下,只检测I2C总线上的电平变化,不进行数据处理。
本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。
实施例三
本发明实施例提供了一种I2C主机的自检方法,是对实施例二的一种改进,该方法可以在备用的I2C主机与I2C总线建立连接时执行,参见图5,该方法包括:
步骤301:I2C主机检测I2C总线是否忙碌。当I2C总线空闲时,执行步骤302;当I2C总线忙碌时,执行步骤303。
可选地,该步骤301可以与实施例二中的步骤201相同,在此不再详述。
步骤302:控制I2C总线,向I2C从机发送预设数据包,并根据是否接收到I2C从机发送的响应信号,判断I2C主机能否控制I2C总线。
可选地,该步骤302可以包括:当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线;当没有接收到I2C从机发送的响应信号时,判定I2C主机不能控制I2C总线。
步骤303:接收SCL线上的时钟信号,检测接收的时钟信号是否与预设的标准时钟信号相同,并根据时钟信号的检测结果判断SCL链路是否正常。当SCL链路正常时,执行步骤304;当SCL链路不正常时,执行步骤305。
可选地,该步骤303可以与实施例二中的步骤2021相同,在此不再详述。
步骤304:接收SDA线上起始信号后的第一个响应信号,检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,并根据起始信号后的第一个响应信号的检测结果判断SDA链路是否正常。当SDA链路正常时,执行步骤306;当SDA链路不正常时,执行步骤305。
可选地,该步骤304可以与实施例二中的步骤2022相同,在此不再详述。
步骤305:判定I2C主机不能控制I2C总线。
步骤306:控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常。当I2C主机的读写功能正常时,执行步骤307;当I2C主机的读写功能不正常时,执行步骤305。
可选地,该步骤306可以与实施例二中的步骤203相同,在此不再详述。
步骤307:判定I2C主机能控制I2C总线。
容易知道,可以使用标志位Flag标明I2C主机自检的进度,如Flag为000表明未进行自检,Flag为001表明SCL链路自检通过(SCL链路正常),Flag为010表明SDA链路自检通过(SDA链路正常),Flag为100表明读写功能自检通过(读写功能正常),Flag为111表明所有自检通过(链路正常且读写功能正常),Flag为101表明自检不通过(链路不正常或读写功能不正常)。
本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。另外,当检测I2C主机的链路不正常时,直接判定I2C主机不能判定I2C总线,不需要继续对I2C主机的读写功能进行检测,节省了检测耗费的时间和资源。
实施例四
本发明实施例提供了一种I2C主机的自检装置,适用于检测刚与I2C总线建立连接的I2C主机,参见图6,该装置包括:
总线检测模块401,用于检测I2C总线是否忙碌;
链路检测模块402,用于当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的I2C主机反复更换的问题。
实施例五
本发明实施例提供了一种I2C主机的自检装置,适用于检测刚与I2C总线建立连接的I2C主机,参见图7,该装置包括:
总线检测模块501,用于检测I2C总线是否忙碌;
链路检测模块502,用于当检测到I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路是否正常。
可选地,总线检测模块501可以包括:
电平检测单元,用于检测SCL线上在一个预设的标准时钟信号的周期内是否有电平变化;
总线判断单元,用于当SCL线上在一个预设的标准时钟信号的周期内有电平变化时,判定I2C总线忙碌;当SCL线上在一个预设的标准时钟信号的周期内没有电平变化时,判定I2C总线空闲。
在实际应用中,电平检测单元可以为时钟计数器,总线判断单元可以为Controller。
需要说明的是,根据I2C协议,当I2C总线上进行数据传输时,即I2C总线忙碌时,SCL线上会出现高低变化的电平,且电平变化的周期为预设的标准时钟信号的周期(两个高电平之间的时间间隔为预设的标准时钟信号的周期);当I2C总线上没有进行数据传输时,即I2C总线空闲时,SCL线上保持为高电平。通常每个I2C总线上都会预设一个标准时钟信号,每个与该I2C总线连接的设备都可以获取到该I2C总线的标准时钟信号的周期和/或频率。在正常情况下,SCL线上的时钟信号频率与该标准时钟信号频率相同。
可选地,链路检测模块502可以包括:
SCL链路检测单元,用于接收SCL线上的时钟信号,检测该时钟信号是否与预设的标准时钟信号相同,以判断SCL链路是否正常;
SDA链路检测单元,用于接收SDA线上起始信号后的第一个响应信号,检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断SDA链路是否正常;
判断单元,用于当SCL链路正常且SDA链路正常时,判定I2C主机的链路正常。
具体地,SCL链路检测单元可以包括:
采样子单元,用于在采样时间内,以第一信号作为参考信号,对时钟信号进行采样,并记录采样结果为高电平的数量,第一信号的频率为标准时钟信号频率的n倍,n≥2且n为整数;
数量检测子单元,用于检测记录的高电平数量是否与预定数量相同,预定数量是在采样时间内,以第一信号作为参考信号,对标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到记录的高电平数量与预定数量相同时,判定SCL链路正常;当检测到记录的高电平数量与预定数量不同时,判定SCL链路不正常。
在实际应用中,采样子单元可以为时钟计数器,数量检测子单元可以为Controller。
具体地,SDA链路检测单元可以用于,当起始信号后的第一个响应信号为低电平时,判定SDA链路正常;当起始信号后的第一个响应信号为高电平时,判定SDA链路不正常。
在实际应用中,SDA链路检测单元可以为Controller。判定起始信号后的响应信号是否为低电平,可以由ACK计数器完成。
需要说明的是,I2C协议中规定,SDA线上必须以字节为单位传输数据,每个字节后跟一个响应信号,但传输的字节数量不受限制。预设的标准响应信号为表明接收成功的响应信号。一般用低电平的响应信号表明接收成功。但当I2C主机读取I2C从机的数据时,I2C主机读取I2C从机最后一个字节的数据后,会将SDA线保持为高电平(由于SDA线和SCL线都通过上拉电路连接到电源,因此只要不进行操作即可实现响应信号为高电平),以表明接收成功,然后I2C主机发送停止信号(SCL线为高电平时,SDA线从低电平切换为高电平)。除了上述情况,一般当响应信号为高电平时,表明接收失败。
根据I2C协议,I2C总线上开始数据传输时,首先由I2C主机发送起始信号(SCL线为高电平时,SDA线从高电平切换为低电平),然后I2C主机会发送与该I2C主机通信的I2C从机的七位地址和数据方向位,该七位地址是I2C从机的标识,可根据该地址确定与I2C主机通信的I2C从机。当该I2C从机接收到I2C主机发送的七位地址和数据方向位后,将SDA线上的电平拉低,以实现响应信号为低电平,表明I2C从机已成功接收到I2C主机发送的七位地址和数据方向位。接着根据数据方向位,“0”(低电平)表示I2C主机将数据写入到I2C从机,“1”(高电平)表示I2C主机读取I2C从机的数据,I2C主机和I2C从机之间开始在I2C总线上以八位数据为单位传输数据,每八位数据传输完成后,会有一位响应信号,响应信号是高电平,还是低电平由I2C主机和I2C从机中接收数据的一方决定。数据传输完成后,I2C主机发送停止信号。
无论数据方向位的电平是高电平还是低电平,I2C主机发送七位地址和数据方向位后,I2C从机如果成功接收,一定会将SDA线上的电平拉低,使响应信号为低电平。数据传输的过程中,如果是I2C主机将数据写入I2C从机,I2C从机每成功接收八位数据后,都会将SDA线上的电平拉低,使响应信号为低电平;如果是I2C主机读取I2C从机的数据,I2C主机每成功接收八位数据后,一般也会将SDA线上的电平拉低,使响应信号为低电平,只有当I2C主机接收到最后八位数据后,才会保持SDA线为高电平,即响应信号为高电平。
因此只需要检测起始信号后的第一个响应信号(表明I2C从机是否接收到七位地址和数据方向位的响应信号)是否为低电平,即响应信号是否与标准响应信号相同,即可判断SDA链路是否正常,判断方法简单方便。选择起始信号后的第一个响应信号进行判断的原因,一是响应信号的位置是根据起始信号确定的,选择第一个响应信号进行判断比较方便,二是该响应信号只需根据电平高低判断即可,不需要考虑数据方向位和是否是数据传输的最后一位数据,判断起来比较简单。
进一步地,SDA链路检测单元还可以用于,当数据方向位、起始信号后的第一个响应信号、起始信号后的第二个响应信号均为低电平时,或者当数据方向位和起始信号后的第二个响应信号均为高电平、起始信号后的第一个响应信号为低电平、起始信号后的第二个响应信号后的信号为停止信号时,或者当数据方向位为高电平、起始信号后的第一个响应信号和起始信号后的第二个响应信号均为低电平、起始信号后的第二个响应信号后的信号不是停止信号时,判定SDA链路正常;否则,判定SDA链路不正常。
优选地,判断单元还可以用于,当SCL链路不正常时,判定I2C主机的链路不正常。
在实际应用中,判断单元可以为Controller。
在本实施例的一种实现方式中,该装置还可以包括:读写功能检测模块503,用于当I2C总线忙碌时,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常。
判断模块504,用于当I2C主机的链路正常且I2C主机的读写功能正常时,判定I2C主机能控制I2C总线。
在实际应用中,读写功能检测模块503和判断模块504可以为Controller。
可选地,读写功能检测模块503可以包括:
读取比较单元,用于控制master从salve中读取预设数据,当master读取到的数据与master中的预设数据相同时,判定I2C主机的读功能正常;当master读取到的数据与master中的预设数据不同时,判定I2C主机的读功能不正常;
写入比较单元,用于控制master将master中的预设数据写入salve,当master写入salve中的数据与salve中的预设数据相同时,判定I2C主机的写功能正常,当master中写入salve中的数据与salve中的预设数据不同时,判定I2C主机的写功能不正常。
在实际应用中,判定master读取到的数据与master中的预设数据是否相同,可以由master完成,判定master写入salve中的数据与salve中的预设数据是否相同,可以由salve完成。
进一步地,判断模块504还可以用于,当I2C主机的链路不正常时,判定I2C主机不能控制I2C总线。
在本实施例的另一种实现方式中,该装置还可以包括:主机检测模块505,用于当I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包。
相应地,判断模块504用于,当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线。
在实际应用中,主机检测模块505可以为master。
在本实施例的又一种实现方式中,该装置还可以包括隔离模块,用于在装置不访问I2C总线时,隔离装置与I2C总线,可防止I2C总线误操作。
本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。
实施例六
本发明实施例提供了一种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可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图8对I2C主机60的各个构成部件进行具体的介绍:
存储器62可用于存储软件程序以及应用模块,处理器63通过运行存储在存储器62的软件程序以及应用模块,从而执行I2C主机60的各种功能应用以及数据处理。存储器62可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如检测I2C总线是否忙碌等)等;存储数据区可存储根据I2C主机60的处理所创建的数据(比如I2C总线是否忙碌的检测结果)等。此外,存储器62可以包括高速RAM(RandomAccess Memory,随机存取存储器),还可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器63运行存储器62中的程序,可用于检测I2C总线是否忙碌。
具体地,时钟计数器64可用于,检测SCL线上在一个预设的标准时钟信号的周期内是否有电平变化。
相应地,处理器63可以实现,当SCL线上在一个预设的标准时钟信号的周期内有电平变化时,判定I2C总线忙碌;当SCL线上在一个预设的标准时钟信号的周期内没有电平变化时,判定I2C总线空闲。
需要说明的是,根据I2C协议,当I2C总线上进行数据传输时,即I2C总线忙碌时,SCL线上会出现高低变化的电平,且电平变化的周期为预设的标准时钟信号的周期(两个高电平之间的时间间隔为预设的标准时钟信号的周期);当I2C总线上没有进行数据传输时,即I2C总线空闲时,SCL线上保持为高电平。通常每个I2C总线上都会预设一个标准时钟信号,每个与该I2C总线连接的设备都可以获取到该I2C总线的标准时钟信号的周期和/或频率。在正常情况下,SCL线上的时钟信号频率与该标准时钟信号频率相同。
进一步地,总线接口61可用于,当I2C总线忙碌时,接收I2C总线上传输的数据包。
相应地,处理器63可以实现,根据I2C总线上传输的数据包检测I2C主机的链路是否正常。
具体地,总线接口61可用于,接收SCL线上的时钟信号、SDA线上起始信号后的第一个响应信号。
相应地,处理器63可以实现,检测时钟信号是否与预设的标准时钟信号相同,以判断SCL链路是否正常;检测起始信号后的第一个响应信号是否与预设的标准响应信号相同,以判断SDA链路是否正常;当SCL链路正常且SDA链路正常时,判定I2C主机的链路正常。
更具体地,时钟计数器64可用于,在采样时间内,以第一信号作为参考信号,对时钟信号进行采样,并记录采样结果为高电平的数量,第一信号的频率为标准时钟信号频率的n倍,n≥2且n为整数。
相应地,处理器63可以实现,检测记录的高电平数量是否与预定数量相同,预定数量是在采样时间内,以第一信号作为参考信号,对标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到记录的高电平数量与预定数量相同时,判定SCL链路正常;当检测到记录的高电平数量与预定数量不同时,判定SCL链路不正常。
更具体地,处理器63可以实现,当起始信号后的第一个响应信号为低电平时,判定SDA链路正常;当起始信号后的第一个响应信号为高电平时,判定SDA链路不正常。
在实际应用中,判定起始信号后的响应信号是否为低电平,可以由ACK计数器65完成。
需要说明的是,I2C协议中规定,SDA线上必须以字节为单位传输数据,每个字节后跟一个响应信号,但传输的字节数量不受限制。预设的标准响应信号为表明接收成功的响应信号。一般用低电平的响应信号表明接收成功。但当I2C主机读取I2C从机的数据时,I2C主机读取I2C从机最后一个字节的数据后,会将SDA线保持为高电平(由于SDA线和SCL线都通过上拉电路连接到电源,因此只要不进行操作即可实现响应信号为高电平),以表明接收成功,然后I2C主机发送停止信号(SCL线为高电平时,SDA线从低电平切换为高电平)。除了上述情况,一般当响应信号为高电平时,表明接收失败。
根据I2C协议,I2C总线上开始数据传输时,首先由I2C主机发送起始信号(SCL线为高电平时,SDA线从高电平切换为低电平),然后I2C主机会发送与该I2C主机通信的I2C从机的七位地址和数据方向位,该七位地址是I2C从机的标识,可根据该地址确定与I2C主机通信的I2C从机。当该I2C从机接收到I2C主机发送的七位地址和数据方向位后,将SDA线上的电平拉低,以实现响应信号为低电平,表明I2C从机已成功接收到I2C主机发送的七位地址和数据方向位。接着根据数据方向位,“0”(低电平)表示I2C主机将数据写入到I2C从机,“1”(高电平)表示I2C主机读取I2C从机的数据,I2C主机和I2C从机之间开始在I2C总线上以八位数据为单位传输数据,每八位数据传输完成后,会有一位响应信号,响应信号是高电平,还是低电平由I2C主机和I2C从机中接收数据的一方决定。数据传输完成后,I2C主机发送停止信号。
无论数据方向位的电平是高电平还是低电平,I2C主机发送七位地址和数据方向位后,I2C从机如果成功接收,一定会将SDA线上的电平拉低,使响应信号为低电平。数据传输的过程中,如果是I2C主机将数据写入I2C从机,I2C从机每成功接收八位数据后,都会将SDA线上的电平拉低,使响应信号为低电平;如果是I2C主机读取I2C从机的数据,I2C主机每成功接收八位数据后,一般也会将SDA线上的电平拉低,使响应信号为低电平,只有当I2C主机接收到最后八位数据后,才会保持SDA线为高电平,即响应信号为高电平。
因此只需要检测起始信号后的第一个响应信号(表明I2C从机是否接收到七位地址和数据方向位的响应信号)是否为低电平,即响应信号是否与标准响应信号相同,即可判断SDA链路是否正常,判断方法简单方便。选择起始信号后的第一个响应信号进行判断的原因,一是响应信号的位置是根据起始信号确定的,选择第一个响应信号进行判断比较方便,二是该响应信号只需根据电平高低判断即可,不需要考虑数据方向位和是否是数据传输的最后一位数据,判断起来比较简单。
进一步地,总线接口61可用于,接收SDA线上的数据方向位和起始信号后的第二个响应信号。
相应地,处理器63可以实现,当数据方向位、起始信号后的第一个响应信号、起始信号后的第二个响应信号均为低电平时,或者当数据方向位和起始信号后的第二个响应信号均为高电平、起始信号后的第一个响应信号为低电平、起始信号后的第二个响应信号后的信号为停止信号时,或者当数据方向位为高电平、起始信号后的第一个响应信号和起始信号后的第一个响应信号均为低电平、起始信号后的第二个响应信号后的信号不是停止信号时,判定SDA链路正常;否则,判定SDA链路不正常。以防止起始信号后的第一位响应信号是由于I2C总线的误操作而成为低电平信号的,将可能不正常的SDA链路误判为好的,提高了检测的可靠性,降低了风险。
优选地,处理器63还可以实现,当SCL链路不正常时,判定I2C主机的链路不正常。
在本实施例的一种实现方式中,I2C主机包括多个存储器62,其中,至少有一个存储器62属于master,至少有一个存储器62属于salve。master还包括至少一个处理器,用于实现从slave读取预设数据,以判定I2C主机的读功能是否正常,向slave写入预设数据,以使slave判定I2C主机的写功能是否正常,salve还包括用于比较数据的器件(图8中未示出),如比较器、处理器等。
处理器63可以实现,当检测到I2C总线忙碌时,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常;当I2C主机的链路正常且I2C主机的读写功能正常时,判定I2C主机能控制I2C总线。
具体地,处理器63可以实现,控制master从salve中读取预设数据,当master读取到的数据与master中的预设数据相同时,判定I2C主机的读功能正常,当master读取到的数据与master中的预设数据不同时,判定I2C主机的读功能不正常;控制master将master中的预设数据写入salve,当master写入salve中的数据与salve中的预设数据相同时,判定I2C主机的写功能正常,当master写入salve中的数据与salve中的预设数据不同时,判定I2C主机的写功能不正常。
优选地,处理器63还可以实现,当I2C主机的链路不正常时,判定I2C主机不能控制I2C总线。
在本实施例的另一种实现方式中,处理器63还可以实现,当I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包。
相应地,处理器63可以实现,当接收到I2C从机发送的响应信号时,判定I2C主机能控制I2C总线。
本发明实施例通过当I2C总线忙碌时,接收I2C总线上传输的数据包,并根据该数据包检测I2C主机的链路,控制master从salve读取数据并向salve写入数据,以检测I2C主机的读写功能是否正常,进而判断该I2C主机能否控制I2C总线,因此不需要等到I2C总线空闲时才能进行I2C主机自检。本发明实施例可以实时进行,避免了在I2C主机等待自检的过程中,出现现有技术中存在的当前控制I2C总线的I2C主机出现故障,备用的I2C主机不能代替当前控制I2C总线的I2C主机控制I2C总线,而造成控制I2C总线的器件反复更换的问题。而且对I2C主机的链路和I2C主机的读写功能两方面同时进行检测,提高了检测结果的准确性。
需要说明的是:上述实施例提供的I2C主机的自检装置在I2C主机自检时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的I2C主机的自检方法和I2C主机的自检装置实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (17)

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主机的链路正常。
5.根据权利要求4所述的方法,其特征在于,所述检测所述时钟信号是否与预设的标准时钟信号相同,以判断所述串行时钟链路是否正常,包括:
在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的n倍,n≥2且n为整数;
检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;
当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;
当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。
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所述的装置,其特征在于,所述串行时钟链路检测单元包括:
采样子单元,用于在采样时间内,以第一信号作为参考信号,对所述时钟信号进行采样,并记录采样结果为高电平的数量,所述第一信号的频率为所述标准时钟信号频率的n倍,n≥2且n为整数;
数量检测子单元,用于检测记录的高电平数量是否与预定数量相同,所述预定数量是在所述采样时间内,以所述第一信号作为参考信号,对所述标准时钟信号进行采样获得的采样结果为高电平的数量;当检测到所述记录的高电平数量与所述预定数量相同时,判定所述串行时钟链路正常;当检测到所述记录的高电平数量与所述预定数量不同时,判定所述串行时钟链路不正常。
14.根据权利要求12所述的装置,其特征在于,所述串行数据链路检测单元用于,
当所述起始信号后的第一个响应信号为低电平时,判定所述串行数据链路正常;
当所述起始信号后的第一个响应信号为高电平时,判定所述串行数据链路不正常。
15.根据权利要求14所述的装置,其特征在于,所述串行数据链路检测单元还用于,
当所述数据方向位、所述起始信号后的第一个响应信号、所述起始信号后的第二个响应信号均为低电平时,或者,
当所述数据方向位和所述起始信号后的第二个响应信号均为高电平、所述起始信号后的第一个响应信号为低电平、所述起始信号后的第二个响应信号后的信号为停止信号时,或者,
当所述数据方向位为高电平、所述起始信号后的第一个响应信号和所述起始信号后的第二个响应信号均为低电平、所述起始信号后的第二个响应信号后的信号不是停止信号时,判定所述串行数据链路正常;
否则,判定所述串行数据链路不正常。
16.根据权利要求9-11任一项所述的装置,其特征在于,所述装置还包括:
主机检测模块,用于所述I2C总线空闲时,控制I2C总线,并向I2C从机发送预设数据包;
判断模块,用于当接收到所述I2C从机发送的响应信号时,判定所述I2C主机能控制所述I2C总线。
17.一种内部集成电路I2C主机,其特征在于,所述主机包括总线接口和处理器,所述处理器用于执行权利要求1-8任一项所述的I2C主机的自检方法。
CN201310462874.4A 2013-09-30 2013-09-30 一种内部集成电路主机的自检方法、装置及主机 Active CN103530215B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310462874.4A CN103530215B (zh) 2013-09-30 2013-09-30 一种内部集成电路主机的自检方法、装置及主机

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310462874.4A CN103530215B (zh) 2013-09-30 2013-09-30 一种内部集成电路主机的自检方法、装置及主机

Publications (2)

Publication Number Publication Date
CN103530215A true CN103530215A (zh) 2014-01-22
CN103530215B CN103530215B (zh) 2015-12-02

Family

ID=49932246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310462874.4A Active CN103530215B (zh) 2013-09-30 2013-09-30 一种内部集成电路主机的自检方法、装置及主机

Country Status (1)

Country Link
CN (1) CN103530215B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804025A (zh) * 2018-03-07 2018-11-13 深圳忆联信息***有限公司 一种降低闪存滞留错误的方法及固态硬盘
CN108829626A (zh) * 2018-04-26 2018-11-16 常州新途软件有限公司 一种用于汽车控制***的通信方法
CN110659238A (zh) * 2018-06-28 2020-01-07 鸿富锦精密电子(天津)有限公司 数据通信***
CN112069103A (zh) * 2020-09-07 2020-12-11 歌尔科技有限公司 一种多模块与主机通信的方法及***
TWI789290B (zh) * 2022-04-21 2023-01-01 新唐科技股份有限公司 偵測匯流排干擾信號的控制電路及其方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106126362B (zh) * 2016-06-17 2019-01-04 青岛海信宽带多媒体技术有限公司 一种光模块i2c总线乱时序诊断方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1980001426A1 (en) * 1978-12-27 1980-07-10 Harris Corp Bus collision a voidance system for distributed network data processing communications systems
CN1667964A (zh) * 2004-03-09 2005-09-14 精工爱普生株式会社 数据传输控制装置及电子设备
CN102025565A (zh) * 2010-12-07 2011-04-20 美的集团有限公司 一种用于多个设备之间的i2c总线通讯检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1980001426A1 (en) * 1978-12-27 1980-07-10 Harris Corp Bus collision a voidance system for distributed network data processing communications systems
CN1667964A (zh) * 2004-03-09 2005-09-14 精工爱普生株式会社 数据传输控制装置及电子设备
CN102025565A (zh) * 2010-12-07 2011-04-20 美的集团有限公司 一种用于多个设备之间的i2c总线通讯检测方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804025A (zh) * 2018-03-07 2018-11-13 深圳忆联信息***有限公司 一种降低闪存滞留错误的方法及固态硬盘
CN108829626A (zh) * 2018-04-26 2018-11-16 常州新途软件有限公司 一种用于汽车控制***的通信方法
CN110659238A (zh) * 2018-06-28 2020-01-07 鸿富锦精密电子(天津)有限公司 数据通信***
CN112069103A (zh) * 2020-09-07 2020-12-11 歌尔科技有限公司 一种多模块与主机通信的方法及***
TWI789290B (zh) * 2022-04-21 2023-01-01 新唐科技股份有限公司 偵測匯流排干擾信號的控制電路及其方法
US11764769B1 (en) 2022-04-21 2023-09-19 Nuvoton Technology Corporation Control circuit and method for detecting bus glitch signal

Also Published As

Publication number Publication date
CN103530215B (zh) 2015-12-02

Similar Documents

Publication Publication Date Title
CN103530215B (zh) 一种内部集成电路主机的自检方法、装置及主机
CN100568211C (zh) 用可编程器件实现访问多个i2c从器件的方法及装置
US8213297B2 (en) Duplicate internet protocol address resolution in a fragmented switch stack environment
CN103559053A (zh) 一种板卡***及通信接口卡fpga在线升级方法
CN102906710B (zh) 一种BootRom备份方法和装置
CN110780909A (zh) 分布式嵌入式***升级方法及装置
US20070255869A1 (en) Device evaluation using automatic connection path reconfiguration
CN114706808A (zh) 一种基于spi菊花链结构的通信***、方法及设备
CN112825011A (zh) PCIe设备的上下电控制方法以及***
CN103345407A (zh) 控制电路、连通控制器、连通控制方法及主板
CN104834620A (zh) 串行外设接口spi总线电路、实现方法以及电子设备
WO2012046634A1 (ja) 電子装置およびシリアルデータ通信方法
CN110515343B (zh) 通信连接装置、可编程逻辑控制器、通讯方法及产品
CN113608684B (zh) 内存信息获取方法、装置、***、电子设备及存储介质
CN110554881A (zh) 一种基于cpld的交换芯片工作模式远程切换***及方法
JP7146650B2 (ja) 通信装置、通信方法、プログラム、および、通信システム
CN113434442A (zh) 一种交换机及数据访问方法
CN104484260A (zh) 一种基于GJB289总线接口SoC的仿真监控电路
CN114880266B (zh) 故障处理的方法、装置、计算机设备和存储介质
CN107731154B (zh) Led显示屏数据备份装置、方法及终端设备
CN105589821A (zh) 一种防止总线死锁的装置及方法
CN204706031U (zh) 串行外设接口spi总线电路以及电子设备
CN111371799B (zh) Mctp控制器收发数据的控制方法、装置及设备
CN112947287A (zh) 一种控制方法、控制器及电子设备
CN111579973A (zh) 芯片同步测试方法、芯片、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200424

Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee after: HUAWEI TECHNOLOGIES Co.,Ltd.

Address before: 301, A building, room 3, building 301, foreshore Road, No. 310052, Binjiang District, Zhejiang, Hangzhou

Patentee before: Hangzhou Huawei Digital Technology Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211221

Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province

Patentee after: xFusion Digital Technologies Co., Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.