CN109977704A - 一种i2c总线访问权限的确定方法、装置及存储介质 - Google Patents
一种i2c总线访问权限的确定方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109977704A CN109977704A CN201910139746.3A CN201910139746A CN109977704A CN 109977704 A CN109977704 A CN 109977704A CN 201910139746 A CN201910139746 A CN 201910139746A CN 109977704 A CN109977704 A CN 109977704A
- Authority
- CN
- China
- Prior art keywords
- host
- bus
- access
- access authority
- parameter
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/82—Protecting input, output or interconnection devices
- G06F21/85—Protecting input, output or interconnection devices interconnection devices, e.g. bus-connected or in-line devices
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Bus Control (AREA)
Abstract
本发明实施例提供一种I2C总线访问权限的确定方法、装置及存储介质。其中,方法包括:第一主机获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;所述第一主机基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
Description
技术领域
本发明涉及嵌入式系统领域,尤其涉及一种I2C总线访问权限的确定方法、装置及存储介质。
背景技术
在嵌入式系统中,由于希望尽可能的实时访问从设备,所以绝大多少情况下,系统设计会选择I2C总线作为主控芯片和外部设备直接的通信总线。标准的I2C总线只支持一个主机(英文可以表达为master)、多个从机(英文可以表达为slave)的访问方式,即一个主控芯片,可以访问多个I2C从设备。但随着目前系统可靠性需求增强,系统需求I2C总线能够支持多个主机的访问方式。
然而,多个主机访问I2C总线时会存在冲突问题,该问题是目前亟待解决的问题。
发明内容
为解决现有存在的技术问题,本发明实施例提出一种I2C总线访问权限的确定方法、装置及存储介质,能够在多个主机与I2C总线连接时,确定总线访问权限的归属主机,从而避免多个主机的访问权限的冲突。
本发明实施例提供一种I2C总线访问权限的确定方法,应用于第一主机,包括:
获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;
基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
上述方案中,所述获取多个主机中除所述第一主机外的其它各主机的第一参数,包括:
通过检测所述第一主机的相应通用输入/输出(GPIO)引脚的电压值,确定多个主机中除所述第一主机外的其它各主机的第一参数。
上述方案中,所述基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限,包括:
基于获取的各第一参数及多个主机的I2C总线访问权限的优先级,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
上述方案中,所述方法还包括:
获取多个主机的I2C总线访问权限的优先级。
上述方案中,所述获取多个主机的I2C总线访问权限的优先级,包括:
通过检测所述第一主机的相应GPIO引脚的电压值,确定多个主机的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总线,从而避免了多个主机同时进行访问出现的权限冲突问题。
附图说明
图1为相关技术中单主机I2C总线的监控示意图;
图2为相关技术中双主机I2C总线的监控示意图;
图3为本发明实施例I2C总线访问权限的确定方法的流程示意图一;
图4为本发明实施例I2C总线访问权限的确定方法的流程示意图二;
图5为本发明应用实施例双主机访问I2C总线访问权限的系统结构示意图;
图6为本发明应用实施例双主机访问I2C总线访问权限的确定方法流程示意图;
图7为本发明应用实施例防止主机死机挂起方法的流程示意图;
图8为本发明实施例I2C总线访问权限的确定装置的结构示意图;
图9为本发明实施例I2C总线访问权限的确定装置的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对发明的具体技术方案做进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如前所述,相关技术中,标准的I2C总线只支持一个主机访问多个从机的访问方式。如图1所示,在嵌入式板卡系统中,主机采用标准的I2C总线访问从机(也可以称为从设备,外部设备(简称外设)),一个主机需要监控板卡中的多个从机,如电源,风扇,光模块等的状态。这里的电源的状态包括:输入电源参数,输出电压参数,输出电流参数,输出功率参数,电源温度参数,是否有告警等;风扇的状态包括:风扇转速参数,以及是否根据板卡温度实时调整转速等;光模块以掺铒光纤放大器(EDFA,Erbium Doped Fiber Amplifier)为例,其状态包括:是否有告警,工作模式是否正常,实时增益参数等。
随着系统可靠性需求增强,板卡系统变成了双电源,双风扇,双主机系统,如图2所示,在嵌入式板卡系统中,仍采用I2C总线的方式访问从设备,但会存在多个主机需要访问板卡中的多个从设备,如电源,风扇,光模块等的状态,但由于标准的I2C总线仅支持一个主机访问多个从机的方式,而不支持多个主机同时访问多个从机的情况,此时,若多个主机同时访问I2C总线,必然出现访问权限冲突的问题。
基于此,在本发明的各种实施例中,在I2C总线上连接多个主机时,当前需要进行总线访问的主机通过获取其它主机前是否具有I2C总线的访问权限来确定自身是否有具有访问权限,如此能够保证任何时候多个主机均只存在一个主机访问I2C总线,从而避免多个主机同时进行访问出现的权限冲突问题。
本发明实施例提供一种I2C总线访问权限的确定方法,应用于第一主机,如图3所示,包括以下步骤:
S301:获取多个主机中除所述第一主机外的其它各主机的第一参数。
S302:基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
其中,实际应用时,当I2C总线上连接有多个主机时,当第一主机需要访问I2C总线上的从机时(如第一主机的程序需要获取电源的输出电压参数时等),第一主机需要确定自身是否具有I2C总线的访问权限,即执行S301~302。
在步骤S301中,所述多个主机均与所述I2C总线连接,所述第一参数表征相应主机当前是否具有I2C总线的访问权限。
这里,I2C总线上连接有多个主机,获取多个主机中除所述第一主机外的其它各主机的第一参数的目的在于:使得第一主机了解其它各主机是否具有I2C总线的访问权限,即其它各主机当前是否正在进行I2C总线的访问。
实际应用时,在步骤S301中,第一主机获取其它各主机的第一参数的方式可以有以下三种:
第一种:通过检测所述第一主机的相应GPIO引脚的电压值,来获取第一参数。具体实施时,将所述第一主机的相应GPIO引脚与其它各主机的相应GPIO引脚(以下的描述中称为第一GPIO引脚)连接,即,其它各主机根据当前的权限即是否正在访问I2C总线来设置各主机的第一GPIO引脚的电压值(具体地,当前正在访问I2C总线时,设置自身第一GPIO引脚的电压值为高电平;当前没有访问I2C总线时,设置自身第一GPIO引脚的电压值为低电平);同时其它各主机将自身第一GPIO引脚的电压值输出给第一主机;相应地,第一主机该通过检测第一主机的相应GPIO引脚的电压值来获取其它各主机的第一参数。由于种方式采用硬件连线,因此其获取的速度快,可以实现实时获取。
第二种:通过接收其它各主机发送的第一信息,来获取第一参数;其中,这里的第一信息指携带有其它各主机当前是否正在访问I2C总线的信息。具体实施时,所述第一主机与其它各主机均已经建立了通信关系,即,其它各主机通过自身运行的程序得到自身当前是否正在访问I2C总线,同时其它各主机将自身当前是否正在访问I2C总线以通讯的方式发送给第一主机;其中,实际应用时,第一主机通过其它各主机可以采用网线、WiFi、蓝牙等方式进行通信,以实现其它主机向第一主机发送第一信息。
第三种:上述两种方式的结合,来获取其它各主机的第一参数。举个例子来说,假设有四个主机,分别是主机1、主机2、主机3、主机4,这四个主机可以依次通过GPIO引脚相连接,比如主机1与主机2连接,主机2与主机3连接,主机3与主机4连接,在这种情况下,通过第一种方式,主机1可以获得主机2的第一参数,主机2可以获得主机1和主机3的第一参数,主机3可以获得主机2和主机4的第一参数,主机4可以获得主机3的第一参数,而相应主机通过第二种方式获得与自身未通过GPIO连接的其它主机的第一参数,比如,主机1可以通过第二种方式获得主机3、主机4的第一参数,主机2可以通过第二种方式获得主机4的第一参数,主机3可以通过第二种方式获得主机1的第一参数,主机4可以通过第二种方式获得主机1、主机2的第一参数。当然,实际应用时,上述两种方式的结合还可以是其它实现方式。
在步骤S302中,第一主机通过所述第一参数已经获知其它各主机是否具有I2C总线的访问权限,此时,当其它各主机不具有I2C总线的访问权限时,第一主机确定自身具备I2C总线的访问权限,可以访问I2C总线上的从机。
实际应用时,为了防止主机死机导致的占据I2C总线访问权限始终不释放的情况发生,可以采用看门狗(watchdog)心跳解锁机制。
基于此,在一实施例中,确定所述第一主机自身具有所述I2C总线的访问权限,且在使用I2C总线访问权限的过程中,通过检测心跳信号的方式确定所述第一主机死机时,释放所述第一主机对所述I2C总线的访问权限。
本发明实施例所提供的I2C总线访问权限的确定方法,第一主机获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;第一主机基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。本发明实施例中,在I2C总线上连接多个主机时,当前需要进行总线访问的主机通过获取其它主机当前是否具有I2C总线的访问权限来确定自身是否有具有访问权限,如此能够保证任何时候多个主机均只存在一个主机访问I2C总线,从而避免了多个主机同时进行访问出现的权限冲突问题。
实际应用时,若其它各主机中的第二主机当前具有所述I2C总线的访问权限时,所述第一主机还需要进一步判断自身是否具有I2C总线的访问权限。
基于此,本发明实施例还提供了另一种I2C总线访问权限的确定方法,应用于第一主机,如图4所示,包括以下步骤:
S401:获取多个主机中除所述第一主机外的其它各主机的第一参数。
S402:获取多个主机的I2C总线访问权限的优先级。
S403:基于获取的各第一参数及多个主机的I2C总线访问权限的优先级,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
在步骤S401中,所述多个主机均与所述I2C总线连接,所述第一参数表征相应主机当前是否具有I2C总线的访问权限。
这里,I2C总线上连接有多个主机,获取多个主机中除所述第一主机外的其它各主机的第一参数的目的在于:使得第一主机了解其它各主机是否具有I2C总线的访问权限,即其它各主机当前是否正在进行I2C总线的访问。
实际应用时,各主机能通过自身运行的程序方便地得到自身当前是否正在I2C总线,在步骤S401中,第一主机获取其它各主机的第一参数的方式可以有以下三种:
第一种:通过检测所述第一主机的相应GPIO引脚的电压值,来获取第一参数。具体实施时,将所述第一主机的相应GPIO引脚与其它各主机的相应GPIO引脚(以下的描述中称为第一GPIO引脚)连接,即,其它各主机根据当前的权限即是否正在访问I2C总线来设置各主机的第一GPIO引脚的电压值(具体地,当前正在访问I2C总线时,设置自身第一GPIO引脚的电压值为高电平;当前没有访问I2C总线时,设置自身第一GPIO引脚的电压值为低电平);同时其它各主机将自身第一GPIO引脚的电压值输出给第一主机;相应地,第一主机该通过检测第一主机的相应GPIO引脚的电压值来获取其它各主机的第一参数。由于种方式采用硬件连线,因此其获取的速度快,可以实现实时获取。
第二种:通过接收其它各主机发送的第一信息,来获取第一参数;其中,这里的第一信息指携带有其它各主机当前是否正在访问I2C总线的信息。具体实施时,所述第一主机与其它各主机均已经建立了通信关系,即,其它各主机通过自身运行的程序得到自身当前是否正在访问I2C总线,同时其它各主机将自身当前是否正在访问I2C总线以通讯的方式发送给第一主机;其中,实际应用时,第一主机通过其它各主机可以采用网线、WiFi、蓝牙等方式进行通信,以实现其它主机向第一主机发送第一信息。
第三种:上述两种方式的结合,来获取其它各主机的第一参数。举个例子来说,假设有四个主机,分别是主机1、主机2、主机3、主机4,这四个主机可以依次通过GPIO引脚相连接,比如主机1与主机2连接,主机2与主机3连接,主机3与主机4连接,在这种情况下,通过第一种方式,主机1可以获得主机2的第一参数,主机2可以获得主机1和主机3的第一参数,主机3可以获得主机2和主机4的第一参数,主机4可以获得主机3的第一参数,而相应主机通过第二种方式获得与自身未通过GPIO连接的其它主机的第一参数,比如,主机1可以通过第二种方式获得主机3、主机4的第一参数,主机2可以通过第二种方式获得主机4的第一参数,主机3可以通过第二种方式获得主机1的第一参数,主机4可以通过第二种方式获得主机1、主机2的第一参数。当然,实际应用时,上述两种方式的结合还可以是其它实现方式。
若其它各主机中的第二主机当前具有所述I2C总线的访问权限时,还需要进一步根据各主机的I2C总线访问权限的优先级来确定第一主机自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
在步骤S402中,实际应用时,可以在各主机中预先设置各主机的I2C总线访问权限的优先级,也就是说,可以预先通过程序的方式写入各主机中;也可以通过各主机分别识别自身在与各主机连接的同一背板中的槽位地址来获得。这里,在各主机已经上述方式获得自身的优先级后,第一主机获取多个主机中除所述第一主机外的其它各主机的I2C总线访问权限的优先级的方式也可以是上述步骤S401中描述的通过检测所述第一主机的相应GPIO引脚的电压值的方式获得,还可以是通过接收其它各主机发送的携带有其它各主机I2C总线访问权限的优先级信息的方式获得,还可以是通过检测电压值的方式和接收优先级信息方式两种方式的结合获得。
其中,对于通过检测所述第一主机的相应GPIO引脚的电压值获得第一参数的实现方式,实际应用时,当有至少三个主机时,可以在相应主机上设置多个GPIO引脚,所述第一主机检测多个GPIO引脚的电压值,得到多个电压值,然后利用得到的多个电压值来确定相应主机的I2C总线访问权限的优先级。举个例子来说,当有三个主机时,分别是主机1、主机2、主机3,每两个主机之间通过GPIO引脚连接,主机1、主机2、主机3的优先级分别为0、1、2(优先级顺序是主机1的优先级最高,主机2的优先级次之,主机3的优先级最低),每个主机上设置两个GPIO引脚,以通知其它主机自身的优先级,比如,对于主机3,优先级为2,一个GPIO引脚的电压值设置为高电平(如逻辑电平为1),另一个GPIO引脚的电压值设置为低电平(如逻辑电平为0),这样,主机1和主机2根据1和0,确定主机3的优先级为2。
在步骤S403中,当所述其它主机中的第二主机当前具有所述I2C总线的访问权限,且所述第二主机的I2C总线访问权限的优先级高于所述第一主机的I2C总线访问权限的优先级时,所述第一主机确定自身不具有所述I2C总线的访问权限。
当然,当所述其它主机中的第二主机当前具有所述I2C总线的访问权限,且所述第二主机的I2C总线访问权限的优先级低于所述第一主机的I2C总线访问权限的优先级时,所述第一主机确定自身具有所述I2C总线的访问权限。
这里,由于所述第一主机的I2C总线访问权限的优先级高于所述第二主机的I2C总线访问权限的优先级,所以在等待预设时长后且所述第二主机仍在访问所述I2C总线时,所述第一主机可以强制关闭所述第二主机的访问权限。
其中,实际应用时,所述预设时长可以根据需要来设置,比如可以根据主机在实际应用中,执行一次访问I2C总线上从设备的时间来设置,举个例子来说,假设执行一次访问I2C总线上从设备的时间为50ms,则预设时长的设置需要大于50ms,如500ms。如此设置可以保证正在访问I2C总线的主机至少执行完本次I2C总线访问操作后再被强制关闭。
这里,实际应用时,所述第一主机可以通过GPIO管脚发送控制命令给第二主机,以关闭所述第二主机的使能开关,从而达到强制关闭所述第二主机的访问权限的目的。
本发明实施例所提供的I2C总线访问权限的确定方法,应用于第一主机,通过获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。本发明实施例中,在I2C总线上连接多个主机时,当前需要进行总线访问的主机通过了解其它主机前是否具有I2C总线的访问权限来确定自身主机是否有具有访问权限,如此能够保证任何时候多个主机均只存在一个主机在进行I2C总线的访问,进而避免多个主机间的同时进行访问出现的权限冲突。
下面结合具体的应用实例对本发明进行详细的说明。
在应用实施例中,为了便于理解,仅举出了存在两个主机需要访问I2C总线的多个从设备的状态,本领域技术人员可以理解的是,当存在至少三个主机需要访问I2C总线的多个从设备时,仅是对各主机上参照第一主机和第二主机GPIO的设置方式,增加第三主机或更多主机上GPIO的设置,其实现原理是完全相同的。
如图5所示,在本应用实施例中,I2C总线上设置有主机1和主机2,主机1和主机2通过相应的GPIO管脚连接,存在两个主机即主机1和主机2需要访问I2C总线的多个从设备的情况。所述主机1和主机2均接入同一背板,并且所述主机1在背板中的槽位地址是0,所述主机2在背板中的槽位地址是1(即主机1的I2C总线访问权限的优先级高于主机2的I2C总线访问权限)。
如图5所示,所述主机1和所述主机2分别设置有三组专用于I2C总线访问权限的确定的GPIO引脚以及可以用程序进行控制的I2C总线访问权限开启或关闭的使能开关,其中,GPIO1、GPIO4为第一组,GPIO2、GPIO5为第二组,GPIO3、GPIO6为第三组。
对于主机1,GPIO1、GPIO2、GPIO3定义为输出端口,GPIO4、GPIO5、GPIO6定义为输入端口。
其中,GPIO1的电压值用于标识主机1当前是否正在访问I2C总线;
具体地,当GPIO1的电压为高电平时(如,逻辑电平为1),表示主机1当前正在访问I2C总线;当GPIO1的电压为低电平时(如,逻辑电平为0),表示主机1当前未访问I2C总线,主机2可以获取I2C总线访问权限(上电初始化状态为低电平)。
相应地,GPIO4的电压值用于标识主机2当前是否正在访问I2C总线;
具体地,当GPIO4的电压为高电平时(如,逻辑电平为1),表示主机2当前正在访问I2C总线;当GPIO1的电压为低电平时(如,逻辑电平为0),表示主机2当前未访问I2C总线,主机1可以获取I2C总线访问权限(上电初始化状态为低电平)。
GPIO2的电压值用于标识主机1的I2C总线访问权限的优先级;
具体地,当GPIO2的电压为高电平时(如,逻辑电平为1),表示主机1的I2C总线访问权限的优先级为1;当GPIO2的电压为低电平时(如,逻辑电平为0),表示主机1的I2C总线访问权限的优先级为0。
相应地,GPIO5的电压值用于标识主机2的I2C总线访问权限的优先级;
具体地,当GPIO5的电压为高电平时(如,逻辑电平为1),表示主机2的I2C总线访问权限的优先级为1;当GPIO5的电压为低电平时(如,逻辑电平为0),表示主机2的I2C总线访问权限的优先级为0。
需要说明的是,在本应用实施例中,假设主机1的I2C总线访问权限的优先级高于主机2的I2C总线访问权限的优先级,即主机1、2的优先级分别为0、1。
GPIO3的电压值用于标识主机1当前是否发送强制关闭主机2的I2C总线的访问权限的命令;
具体地,当GPIO3的电压为高电平时(如逻辑电平为1),表示主机1当前发送强制关闭主机2的I2C总线的访问权限的命令;当GPIO3的电压为低电平时(如逻辑电平为0),表示主机1当前未发送强制关闭主机2的I2C总线的访问权限的命令(上电初始化状态为低电平)。
相应地,GPIO6的电压值用于标识主机1当前是否接收到主机2发送的强制关闭自身;
具体地,当GPIO6的电压为高电平时(如,逻辑电平为1),表示主机1接收到主机2发送的强制关闭主机1的I2C总线的访问权限的命令;当GPIO6的电压为低电平时(如,逻辑电平为0),表示主机1未接收到主机2发送的强制关闭主机1的I2C总线的访问权限的命令(上电初始化状态为低电平)。
至此,完成了主机1上三组GPIO的设置。对于主机2,也需要按照上述规则进行三组GPIO的设置。
具体地,对于主机2,GPIO1、GPIO2、GPIO3定义为输出端口,GPIO4、GPIO5、GPIO6定义为输入端口。
其中,GPIO1的电压值用于标识主机2当前是否正在访问I2C总线;相应地,GPIO4的电压值用于标识主机1当前是否正在访问I2C总线;GPIO2的电压值用于标识主机2的I2C总线访问权限的优先级;相应地,GPIO5的电压值用于标识主机1的I2C总线访问权限的优先级;GPIO3的电压值用于标识主机2当前是否发送强制关闭主机1的I2C总线的访问权限的命令;相应地,GPIO6的电压值用于标识主机2当前是否接收到主机1发送的强制关闭主机2的I2C总线的访问权限的命令。
这里,需要说明的是:虽然主机1和主机2上均设置了三组GPIO,由于主机1的I2C总线访问权限的优先级高于主机2的I2C总线访问权限的优先级,所以当主机工作后,对于主机1来说,GPIO6的电压值一直为低电平,对于主机2来说,GPIO3的电压值一直为低电平。
如图5所示,主机1的GPIO1与主机2的GPIO4相连,主机1的GPIO2与主机2的GPIO5相连,主机1的GPIO3与主机2的GPIO6相连;同时主机1的GPIO4与主机2的GPIO1相连,主机1的GPIO5与主机2的GPIO2相连,主机1的GPIO6与主机2的GPIO3相连。
对于第一参数的获取,在本应用实施例中的具体方案为:主机2根据当前是否正在访问I2C总线来设置主机2的GPIO1引脚的电压值(当前正在访问I2C总线时,设置主机2的GPIO1引脚的电压值为高电平;当前没有访问I2C总线时,设置主机2的GPIO1引脚的电压值为低电平),由于主机1的GPIO4与主机2的GPIO1相连,因此主机1可以通过检测主机1的GPIO4的电压值来获取主机2的第一参数,从而获得主机2当时是否正在访问I2C总线。类似地,主机1根据当前是否正在访问I2C总线来设置主机1的GPIO1引脚的电压值(当前正在访问I2C总线时,设置主机1的GPIO1引脚的电压值为高电平;当前没有访问I2C总线时,设置主机1的GPIO1引脚的电压值为低电平),由于主机2的GPIO4与主机1的GPIO1相连,因此主机2可以通过检测主机2的GPIO4引脚的电压值来获取主机1的第一参数,从而获得主机1当时是否正在访问I2C总线。
对于优先级的获取,在本应用实施例中的具体方案为:主机1和主机2可以通过识别自身在背板中的槽位地址来获得各自身主机的I2C总线访问权限的优先级(主机1优先级为0,主机2优先级为1),主机2根据主机2的I2C总线访问权限的优先级来设置主机2的GPIO2引脚的电压值为高电平,比如1,由于主机1的GPIO5与主机2的GPIO2相连,因此主机1可以通过检测主机1的GPIO5引脚的电压值,获得主机2当前I2C总线访问权限的优先级,确定主机1的优先级高于主机2的优先级。类似地,主机1根据主机1的I2C总线访问权限的优先级来设置主机1的GPIO2引脚的电压值为低电平,比如0,由于主机2的GPIO5与主机1的GPIO2相连,因此主机2可以通过检测主机2的GPIO5引脚的电压值,获得主机1当前I2C总线访问权限的优先级,确定主机2的优先级低于主机1的优先级。
对于GPIO3和GPIO6,当确定主机1的I2C总线访问权限的优先级高于主机2的I2C总线访问权限且主机2当前正在访问I2C总线时,主机1将主机1的GPIO3设置为高电平,由于主机1的GPIO3与主机2的GPIO6相连,当GPIO3设置为高电平时,即主机1发送强制关闭主机2的I2C总线的访问权限的命令时,主机2的GPIO6引脚接收到主机1发送的强制关闭主机2的I2C总线的访问权限的命令,主机2的程序响应该命令,并关闭其使能开关,以强制关闭主机2的I2C总线的访问权限。
需要说明的是,对于GPIO1~GPIO6,当存在多个主机时,每个主机专用于I2C总线访问权限的确定的GPIO引脚需要相应加倍设置,比如,存在三个主机时,每个主机需设置二组GPIO1~GPIO6,以分别与其它两个主机连接。
图6为本应用实施例I2C总线访问权限的确定方法实现的流程图,如图6所示,所述流程包含如下步骤:
S601,上电初始化,主机1和主机2将GPIO1管脚和GPIO2管脚设置为低电平,I2C总线初始处于空闲状态,转入步骤S602;
S602:当主机1需要访问I2C总线上的从机时,主机1需要获取I2C总线访问权限,转入步骤S603;
S603:主机1检测GPIO4管脚的电压值;如果GPIO4管脚的电压值为低电平,则转入步骤S604,如果GPIO4管脚的电平为高,则转入步骤S605;
S604:主机1确定自身具有访问I2C总线权限,并设置主机1的GPIO1的电压值为高电平,转入步骤S608;
S605:主机1等待30ms,并累计等待时长,转入步骤S606;
这里,在累计等待时长时,主机1从确定GPIO4管脚的电平为高时开始累计。
S606:判断等待时长是否超过500ms,如果没有超过,则转入S603,如果超过了,则转入步骤S607;
S607:主机1设置GPIO3管脚为高电平,以强制关闭主机2的I2C总线的访问权限,转入步骤S604;
S608:主机1进行I2C总线的访问完成时,设置主机1的GPIO1为低电平。
这里,主机1完成访问时,就表明释放了第一主机的I2C总线的访问权限。
完成了I2C总线访问权限的确定过程,能够保证任何时候多个主机均只存在一个主机在进行I2C总线的访问,进而避免多个主机间的同时进行访问出现的权限冲突。
当主机2准备访问I2C总线上的从机时,主机2确定I2C总线访问权限的是否归属自身的实现流程与上述主机1的实现流程基本类似,需要说明的是,由于主机2的I2C总线访问权限低于主机1的I2C总线访问权限,所以当主机2确定自身不具有I2C总线的访问权限时,不需要执行步骤S605~S608,也就是说,当确定自身不具有I2C总线的访问权限时不执行任何操作。
在实际应用时,考虑到主机1和主机2可以通过是否接入背板获知自身是否在位,进而可以获知对方是否在位。具体实施时,可通过检测背板上专门设置的引脚的电压值来获知对方主机是否在位,如对方上电时,所述引脚的电压值为高电平,对方未上电时,所述引脚的电压值为浮空。
由此,当获取到主机1或主机2中任一主机未处于工作状态时,确定I2C总线访问权限由处于工作状态的主机获取。
在实际应用时,考虑到系统异常场景,比如多个主机中一个主机死机,其占据I2C总线访问权限始终不释放的情形,在本应用实施例中,如果主机1陷入死机挂起状态,或者进入软件异常死循环,导致其一直占用I2C总线,不能释放,基于主机1的软件内部设置有高级精简指令集机器(ARM,Advanced RISC Machines)和现场可编程逻辑门阵列(FPGA,FieldProgrammable Gate Array),可以采用watchdog心跳解锁机制,即可采用如图7所示的流程来解决该问题,所述流程包括如下步骤:
S701:上电初始化,转入步骤S702;
S702:FPGA设置watchdog timeout时间为3分钟,转入步骤S703;
S703:ARM程序正常初始化,每隔2分钟给FPGA一个心跳信号,转入步骤S704;
S704:FPGA会不停判断是否收到心跳信号,如果超过3分钟没有收到心跳信号,则认为ARM程序已经死机,转入步骤S705,如果超过3分钟收到心跳信号,则认为ARM程序没有死机,转入步骤S706;
S705:FPGA主动关闭主机1的I2C总线使能开关,以释放I2C总线访问权限;
S706:正常使用I2C总线访问权限,不处理I2C总线使能开关。
这里,确定所述主机1自身具有所述I2C总线的访问权限,且在使用I2C总线访问权限的过程中,通过检测心跳信号的方式确定所述主机1死机时,释放所述主机1对所述I2C总线的访问权限。
需要说明的是,watchdog心跳解锁机制同样适用于主机2在陷入死机挂起状态或者进入软件异常死循环的情形,也就是说,在实际应用时,watchdog心跳解锁机制适用于I2C总线上连接的陷入死机挂起状态的或者进入软件异常死循环的每个主机。
本发明实施例提出了一种I2C总线访问权限的确定方法,第一主机获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;第一主机基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。本发明实施例中,在I2C总线上连接多个主机时,通过GPIO管脚连接线的方式能够实时的获得其它主机前是否具有I2C总线的访问权限,从而能快速的确定自身主机是否有具有访问权限,实现多主机间I2C总线访问权限的快速切换。如此,解决了相关技术中标准I2C总线不支持I2C总线多主机问题,解决多主机访问I2C总线冲突问题。
为了实现本发明实施例的方法,本发明实施例还提供一种I2C总线访问权限的确定装置,设置在第一主机上,图8为本发明实施例装置的组成结构示意图,如图8所示,所述装置800包括:
第一获取单元801,用于获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;
确定单元802,用于基于获取的各第一参数,确定所述第一主机具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
在一实施例中,所述第一获取单元801具体用于:
通过检测所述第一主机的相应通用输入/输出GPIO引脚的电压值,确定多个主机中除所述第一主机外的其它各主机的第一参数。
在一实施例中,所述确定单元802具体用于:
基于获取的各第一参数及多个主机的I2C总线访问权限的优先级,确定所述第一主机具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
在一实施例中,所述装置还包括:第二获取单元,用于:
获取多个主机的I2C总线访问权限的优先级。
在一实施例中,所述第二获取单元,具体用于:
通过检测所述第一主机的相应GPIO引脚的电压值,确定多个主机的I2C总线访问权限的优先级。
在一实施例中,所述确定单元,还用于:
所述其它主机中的第二主机当前具有所述I2C总线的访问权限,且所述第二主机的I2C总线访问权限的优先级高于所述第一主机的I2C总线访问权限的优先级时,确定所述第一主机不具有所述I2C总线的访问权限;
或者,
所述其它主机中的第二主机当前具有所述I2C总线的访问权限,且所述第二主机的I2C总线访问权限的优先级低于所述第一主机的I2C总线访问权限的优先级时,确定所述第一主机具有所述I2C总线的访问权限;在等待预设时长后且所述第二主机仍在访问所述I2C总线时,强制关闭所述第二主机的访问权限。
在一实施例中,所述装置还包括释放单元,用于:
确定所述第一主机具有所述I2C总线的访问权限,且在使用I2C总线访问权限的过程中,通过检测心跳信号的方式确定所述第一主机死机时,释放所述第一主机对所述I2C总线的访问权限。
实际应用时,第一获取单元801、确定单元802、第二获取单元以释放单元及可由I2C总线访问权限的确定装置中的处理器实现。
需要说明的是:上述实施例提供的I2C总线访问权限的确定装置在进行I2C总线访问权限的确定时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的I2C总线访问权限的确定装置与I2C总线访问权限的确定方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
基于上述程序模块的硬件实现,且为了实现本发明实施例的方法,本发明实施例提供一种I2C总线访问权限的确定装置,如图9所示,所述装置900包括:处理器901和配置为存储能够在处理器上运行的计算机程序的存储器902,其中:
所述处理器901配置为执行上述一个或多个技术方案提供的方法。
实际应用时,如图9所示,所述装置900中的各个组件通过总线系统903耦合在一起。可理解,总线系统903用于实现这些组件之间的连接通信。总线系统903除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线系统903。
在示例性实施例中,本发明实施例还提供了一种存储介质,具体是计算机可读存储介质,例如包括计算机程序的存储器902,上述计算机程序可由I2C总线访问权限的确定装置900的处理器901执行,以完成前述方法所述步骤。计算机可读存储介质可以是磁性随机存取存储器(FRAM,ferromagnetic random access memory)、只读存储器(ROM,ReadOnly Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-OnlyMemory)等存储器。
需要说明的是:需要说明的是:“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
另外,本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种I2C总线访问权限的确定方法,其特征在于,应用于第一主机,所述方法包括:
获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;
基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
2.根据权利要求1所述的方法,其特征在于,所述获取多个主机中除所述第一主机外的其它各主机的第一参数,包括:
通过检测所述第一主机的相应通用输入/输出GPIO引脚的电压值,确定多个主机中除所述第一主机外的其它各主机的第一参数。
3.根据权利要求1所述的方法,其特征在于,所述基于获取的各第一参数,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限,包括:
基于获取的各第一参数及多个主机的I2C总线访问权限的优先级,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
获取多个主机的I2C总线访问权限的优先级。
5.根据权利要求4所述的方法,其特征在于,所述获取多个主机的I2C总线访问权限的优先级,包括:
通过检测所述第一主机的相应GPIO引脚的电压值,确定多个主机的I2C总线访问权限的优先级。
6.根据权利要求3所述的方法,其特征在于,所述基于获取的各第一参数及多个主机的I2C总线访问权限的优先级,确定自身具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限,包括:
所述其它主机中的第二主机当前具有所述I2C总线的访问权限,且所述第二主机的I2C总线访问权限的优先级高于所述第一主机的I2C总线访问权限的优先级时,确定自身不具有所述I2C总线的访问权限;
或者,
所述其它主机中的第二主机当前具有所述I2C总线的访问权限,且所述第二主机的I2C总线访问权限的优先级低于所述第一主机的I2C总线访问权限的优先级时,确定自身具有所述I2C总线的访问权限;在等待预设时长后且所述第二主机仍在访问所述I2C总线时,强制关闭所述第二主机的访问权限。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:
确定所述第一主机自身具有所述I2C总线的访问权限,且在使用I2C总线访问权限的过程中,通过检测心跳信号的方式确定所述第一主机死机时,释放所述第一主机对所述I2C总线的访问权限。
8.一种I2C总线访问权限的确定装置,其特征在于,应用于第一主机,所述装置包括:
第一获取单元,用于获取多个主机中除所述第一主机外的其它各主机的第一参数;所述第一参数表征相应主机当前是否具有I2C总线的访问权限;所述多个主机均与所述I2C总线连接;
确定单元,用于基于获取的各第一参数,确定所述第一主机具有所述I2C总线的访问权限或者不具有所述I2C总线的访问权限。
9.一种I2C总线访问权限的确定装置,其特征在于,包括:处理器和配置为存储能够在处理器上运行的计算机程序的存储器;
其中,所述处理器配置为运行所述计算机程序时,执行权利要求1至7任一项所述方法的步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910139746.3A CN109977704B (zh) | 2019-02-26 | 2019-02-26 | 一种i2c总线访问权限的确定方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910139746.3A CN109977704B (zh) | 2019-02-26 | 2019-02-26 | 一种i2c总线访问权限的确定方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109977704A true CN109977704A (zh) | 2019-07-05 |
CN109977704B CN109977704B (zh) | 2023-02-14 |
Family
ID=67077343
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910139746.3A Active CN109977704B (zh) | 2019-02-26 | 2019-02-26 | 一种i2c总线访问权限的确定方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109977704B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502461A (zh) * | 2019-08-27 | 2019-11-26 | 深圳市中物互联技术发展有限公司 | 一种基于rs485通讯协议的高效数据采集方法 |
CN112631742A (zh) * | 2020-12-30 | 2021-04-09 | 上海金卓科技有限公司 | 一种资源访问权限管理装置、方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080307154A1 (en) * | 2007-06-07 | 2008-12-11 | Kaveh Naderi | System and Method for Dual-Ported I2C Flash Memory |
US20100153601A1 (en) * | 2008-12-12 | 2010-06-17 | Via Technologies, Inc. | Method for preventing transaction collision on bus and computer system utilizing the same |
CN106598891A (zh) * | 2015-10-15 | 2017-04-26 | 飞思卡尔半导体公司 | 集成电路间(i2c)总线系统中的从设备报警信号 |
WO2017067842A1 (en) * | 2015-10-19 | 2017-04-27 | Philips Lighting Holding B.V. | Control system for communicating with devices connected to a bus, and communication method |
CN108920401A (zh) * | 2018-06-04 | 2018-11-30 | 深圳柴火创客教育服务有限公司 | 多主多从的i2c通信方法、系统及节点设备 |
-
2019
- 2019-02-26 CN CN201910139746.3A patent/CN109977704B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080307154A1 (en) * | 2007-06-07 | 2008-12-11 | Kaveh Naderi | System and Method for Dual-Ported I2C Flash Memory |
US20100153601A1 (en) * | 2008-12-12 | 2010-06-17 | Via Technologies, Inc. | Method for preventing transaction collision on bus and computer system utilizing the same |
CN106598891A (zh) * | 2015-10-15 | 2017-04-26 | 飞思卡尔半导体公司 | 集成电路间(i2c)总线系统中的从设备报警信号 |
WO2017067842A1 (en) * | 2015-10-19 | 2017-04-27 | Philips Lighting Holding B.V. | Control system for communicating with devices connected to a bus, and communication method |
CN108920401A (zh) * | 2018-06-04 | 2018-11-30 | 深圳柴火创客教育服务有限公司 | 多主多从的i2c通信方法、系统及节点设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502461A (zh) * | 2019-08-27 | 2019-11-26 | 深圳市中物互联技术发展有限公司 | 一种基于rs485通讯协议的高效数据采集方法 |
CN110502461B (zh) * | 2019-08-27 | 2023-03-24 | 深圳市中物互联技术发展有限公司 | 一种基于rs485通讯协议的高效数据采集方法 |
CN112631742A (zh) * | 2020-12-30 | 2021-04-09 | 上海金卓科技有限公司 | 一种资源访问权限管理装置、方法及系统 |
CN112631742B (zh) * | 2020-12-30 | 2023-10-31 | 上海金卓科技有限公司 | 一种资源访问权限管理装置、方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109977704B (zh) | 2023-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20150106660A1 (en) | Controller access to host memory | |
TW202041061A (zh) | 用於組態漂移偵測及補救之系統及方法 | |
US10515040B2 (en) | Data bus host and controller switch | |
EP2892212B1 (en) | Micro server and method of allocating a mac address | |
JPS63231560A (ja) | データ処理システム | |
KR20180071941A (ko) | 관리 컨트롤러 및 관리 컨트롤러를 포함하는 섀시의 동작 방법 | |
US20180203779A1 (en) | Bus hang detection and find out | |
US10365840B2 (en) | System and method for providing a secure airborne network-attached storage node | |
US9806959B2 (en) | Baseboard management controller (BMC) to host communication through device independent universal serial bus (USB) interface | |
US20080155133A1 (en) | Storage apparatus, storage apparatus control method, and recording medium of storage apparatus control program | |
CN103384863A (zh) | 虚拟计算机控制装置及虚拟计算机控制方法 | |
JP2013073289A (ja) | 多重化システム、データ通信カード、状態異常検出方法、及びプログラム | |
CN102983989B (zh) | 一种服务器虚拟地址的迁移方法、装置和设备 | |
US7685348B2 (en) | Dedicated server management card with hot swap functionality | |
CN109977704A (zh) | 一种i2c总线访问权限的确定方法、装置及存储介质 | |
CN107239372B (zh) | 电子装置及其检测方法 | |
EP3035227B1 (en) | Method and device for monitoring data integrity in shared memory environment | |
CN114185603B (zh) | 一种智能加速卡的控制方法、服务器及智能加速卡 | |
CN112015689A (zh) | 串口输出路径切换方法、系统及装置和交换机 | |
CN109271096B (zh) | Nvme存储扩展系统 | |
CN115480628A (zh) | 一种芯片端口控制的方法和计算机系统 | |
CN107294759A (zh) | 服务器系统及数据存取方法 | |
US10795846B1 (en) | Scalable NVMe storage management over system management bus | |
US20030115382A1 (en) | Peripheral device testing system and a peripheral device testing method which can generally test whether or not a peripheral device is normally operated | |
JP2002027027A (ja) | 計算機システム、計算機管理システム及びシステム管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |