CN115589398A - I2c地址分配方法及计算设备 - Google Patents
I2c地址分配方法及计算设备 Download PDFInfo
- Publication number
- CN115589398A CN115589398A CN202211150775.8A CN202211150775A CN115589398A CN 115589398 A CN115589398 A CN 115589398A CN 202211150775 A CN202211150775 A CN 202211150775A CN 115589398 A CN115589398 A CN 115589398A
- Authority
- CN
- China
- Prior art keywords
- node
- slave
- address
- slave node
- identification information
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 263
- 230000008569 process Effects 0.000 claims description 188
- 230000006854 communication Effects 0.000 claims description 48
- 238000004891 communication Methods 0.000 claims description 47
- 230000005540 biological transmission Effects 0.000 claims description 32
- 238000012790 confirmation Methods 0.000 description 28
- 238000010586 diagram Methods 0.000 description 26
- 238000012545 processing Methods 0.000 description 20
- 230000007246 mechanism Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 239000012634 fragment Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 241001643392 Cyclea Species 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000037361 pathway Effects 0.000 description 1
- 239000002904 solvent Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Abstract
本申请实施例公开了一种I2C地址分配方法及计算设备。该方法包括:在进行第i轮I2C地址分配时,第一从节点基于所述第一从节点的标识信息,通过I2C总线向主节点发送比特信号;若所述第一从节点发送的比特信号与其他从节点发送的比特信号经过仲裁后,所述第一从节点最先将标识信息发送给所述主节点,则所述第一从节点确定为目标从节点;所述第一从节点从所述主节点获取第一I2C地址。本申请实施例在不增加布线复杂度的情况下,提高I2C地址分配的通用性。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种I2C地址分配方法及计算设备。
背景技术
I2C总线是两线制同步串行总线,主从通信机制,硬件结构简单,功能实现容易,支持多节点共总线的互连拓扑,被广泛应用于通信产品、电子设备等领域中。I2C支持多节点共总线互连,但要求I2C地址(7位地址)唯一,不能冲突。有些I2C节点,例如EEPROM、温度传感器等,会固定几个地址位(4位或5位)的值,而预留其余几个地址位(2位或3位)通过硬件管脚的电平值来确定取值,则同一条I2C总线上连接的节点可以区分不同的地址。但有的I2C节点,例如SFP+、QSFP+光模块,I2C地址是固定的,没有预留硬件设置的接口,就会造成有些I2C节点分配到的I2C地址可能是相同,在进行I2C通信时,I2C地址冲突,也造成多个I2C节点无法共总线互连。
为了解决这种I2C地址冲突的问题,在进行I2C地址分配时,主节点先使能第一个从节点,然后主节点先给它分配I2C地址,接着由第一个从节点使能第二从节点,主节点给它分配I2C地址,依此类推,完成所有从节点的地址分配。
通过级联方式逐个使能从节点,保证地址分配的唯一性,但是这种分配方式需要从节点额外提供使能接收和使能发送的硬件接口,主从节点之间的布线比较复杂。然而,并不是所有的从节点都能提供这样的接口,从而导致地址分配方式不具有通用性。因此,如何实现动态地址分配,且不增加主从节点之间布线的复杂度,是目前亟待解决的技术问题。
发明内容
本申请提供了一种I2C地址分配方法及计算设备,通过对I2C时序协议进行扩展,无需增加主节点和从节点之间增加复杂的布线,即可实现I2C地址的动态分配。
第一方面,本申请实施例提供一种I2C地址分配方法,该方法应用于任一从节点,该方法包括:在进行第i轮I2C地址分配时,第一从节点基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号;若第一从节点发送的比特信号与其他从节点发送的比特信号经过仲裁后,第一从节点最先将标识信息发送给主节点,则第一从节点确定为目标从节点;第一从节点从主节点获取第一I2C地址。
首先说明,上述第一从节点为ki个从节点中的任一节点,该ki个从节点为N个从节点中未分配到I2C地址的从节点。此外,主节点在为N个从节点分配I2C地址时,会经过N轮I2C地址分配,并且每轮分配为一个从节点分配一个I2C地址。在进行第i轮I2C地址分配(即任意一轮I2C地址分配)时,第一从节点会基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号,并且第一从节点在发送比特信号后,会与ki个从节点中除第一从节点之外的其他从节点发送的比特信号进行仲裁;如果第一从节点是该ki个从节点中最先将标识信息发送给主节点的从节点,则第一从节点会确定该自己为目标从节点,即在第i轮I2C地址分配,确定自己是获得优先权的从节点。然后,主节点会为获得优先权的从节点分配I2C地址,相应的,第一从节点就会从主节点获取到主节点为其分配的第一I2C地址,并退出I2C地址分配过程。这样就实现了在第i轮I2C地址分配过程,为一个从节点分配I2C地址,因此在经过N轮I2C地址分配后,就可以为每个从节点动态分配到一个I2C地址,从而实现无需增加主节点和从节点之间增加复杂的布线,只需要从节点基于发送的比特信号进行仲裁,即可实现I2C地址的动态分配,实现了I2C地址动态分配的通用性。
在本申请的一个实施方式中,N个从节点为I2C总线上所连接的所有从节点中类型相同的从节点,或者,该N个从节点为总线上的所有从节点。
可以看出,在本申请实施方式中,可以不对从节点进行区分,统一为总线上的所有从节点分配I2C地址,进一步增加动态I2C地址分配的通用性。或者,可以基于从节点的类型为总线上的所有从节点进行分组,然后,依次为每组中的从节点分配I2C地址,这样就在同一个地址段为某一组的从节点分配I2C地址,也就是说可以将一个地址段的I2C地址分配给类型相同的从节点,从而便于后续的I2C地址的管理。
在本申请的一个实施方式中,该方法还包括:步骤S1:在第j次仲裁时,第一从节点通过I2C总线向主节点发送标识信息中的第j个比特信号;第一从节点为第j-1次仲裁时获得高优先级的从节点中的一个从节点;步骤S2:第一从节点基于第j个比特信号,以及第j次仲裁时I2C总线上的数据,确定第一从节点在第j次仲裁时的优先级,第一从节点在第j次仲裁时的优先级为高优先级或者低优先级;I2C总线上的数据由在第j-1次仲裁时获得高优先级的从节点在第j次仲裁时所发送的比特信号共同决定的;赋值j=j+1,并重复上述步骤S1~步骤S2,在经过多次仲裁后,若第一从节点在每次仲裁时的优先级均为高优先级,第一从节点最先将标识信息发送给主节点。
可以看出,在本申请实施例中,在上一次仲裁时获得优先级的从节点,在参与本次仲裁的过程中,会基于该从节点发送的比特信号和总线上的数据,确定在本次仲裁时是否为优先级的从节点,如果是则会继续参与下一次仲裁过程,否则退出仲裁。由于从节点的标识信息是不完全相同的,所以,通过本申请的仲裁机制,可以保证在每轮进行I2C地址分配时,只有一个从节点可以最先将标识信息发送给主节点,从而实现主节点动态的为每个从节点分配I2C地址。
在本申请的一个实施方式中,该方法还包括:若第一从节点在多次仲裁中的任意一次仲裁时的优先级为低优先级,则第一从节点退出下一次仲裁。
可以看出,在本实施方式中,若从节点在某次仲裁时的优先级为低优先级,就会主动退出仲裁,这样随着多次仲裁会有很多获得低优先级的从节点陆续退出仲裁过程,这样就保证一直获得高优先级的从节点一直参与仲裁,也就保证在每次I2C地址过程中进行多次仲裁后,只有一个从节点可以将标识信息完整的发送给主节点,进而实现基于仲裁机制可以在每轮进行I2C地址分配时,主节点动态的为一个从节点分配I2C地址,实现基于仲裁机制即可完成I2C地址分配,无需设计复杂的布线结构。
在本申请的一个实施方式中,第一从节点基于第j个比特信号,以及第j次仲裁时I2C总线上的数据,确定第一从节点在第j次仲裁时的优先级,包括:若第j个比特信号与第j次仲裁时I2C总线上的数据相同,第一从节点确定第一从节点在第j次仲裁时的优先级为高优先级;若第j个比特信号与第j次仲裁时I2C总线上的数据不同,第一从节点确定第一从节点在第j次仲裁时的优先级为低优先级。
其中,若在第j仲裁周期内,有一个从节点发送的比特信号为0,则该总线上的数据为0,其中,0代表了高优先级;只有当所有的从节点发送的比特信号都是1时,总线上的数据才是1。可以看出,在本实施方式中,在第j个仲裁周期内,从节点可以基于自己所发送的比特信号和总线上的比特信号进行比较,当自己所发送的比特信号与I2C总线上的数据相同,即自己发送的比特信号的优先级不低于其他从节点的优先级,则将自己作为高优先级的从节点,继续参与仲裁;当自己所发送的比特信号与I2C总线上的数据不相同,即自己发送的比特信号的优先级低于其他从节点的优先级,则会自动退出仲裁过程。
在本申请的一个实施方式中,从节点进行仲裁的次数可以预先设定,例如,可以设置从节点仲裁M次,其中,该M是基于从节点的标识信息的长度确定的。例如,可以将N个从节点中最长的标识信息的长度作为该M。可以理解的是,不同的从节点的标识信息的长度应该是不同的,这样在进行第j次仲裁周期之前,有些从节点可能已经将标识信息全部发送出去了,也就是说有些从节点可能已经没有标识可发送了。针对这种情况,在第j次仲裁时,第一从节点通过I2C总线向主节点发送标识信息中的第j个比特信号,包括:若第一从节点的标识信息的长度小于j,第一从节点向主节点发送预设比特信号,作为第一从节点的标识信息的第j个比特信号;若第一从节点的标识信息的长度大于或者等于j,第一从节点向主节点发送标识信息中的第j个比特信号。
可以看出,在本申请实施例中,针对标识信息的长度不同的情况,若在某次仲裁时,高优先级的从节点没有标识信息可以发送时,会通过发比特1的方式,继续参与仲裁。这样就可以不用关注从节点的标识信息的长度;换句话,本申请针对所有类型的从节点,都可以完成I2C地址的动态分配,进一步提高了I2C地址动态分配的通用性。
在本申请的一个实施方式中,N个从节点的标识信息的长度位于同一区间。应说明,由于仲裁次数由最长的标识信息的长度所确定。故在进行I2C地址分配之前,可以将标识信息的长度处于同一区间的从节点挂载在同一条总线上,或者,将标识信息的长度处于同一区间的从节点分在同一个组里面,这样可以避免由于标识信息的长度差距过大,有些长度相对较短的从节点需要补发数量较多的比特1,额外增加了这些从节点发送比特的功耗和压力。
在本申请的一个实施方式中,第一从节点基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号之前,该方法还包括:第一从节点从主节点获取第一命令,第一命令包括第一地址和读指示,第一地址用于寻址第一从节点;读指示用于指示第一从节点发送标识信息,以使第一从节点基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号。
其中,若N个从节点为类型相同的从节点,第一地址为N个从节点的类别地址,类别地址用于标识N个从节点的类型;若N个从节点为所有从节点,第一地址为广播地址。具体地,第一命令为I2C通信协议下的命令时序下的命令。也就是说,本申请中利用现有的I2C命令时序,去发送第一命令,以及通过该第一命令指示从节点发送标识信息,以完成I2C地址的动态分配,从而无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,第一从节点从主节点获取第一I2C地址,包括:第一从节点从主节点获取第二命令,其中,第二命令包括第一I2C地址和写指示;第一从节点响应于写指示,将第一I2C地址作为主节点为第一从节点分配的I2C地址。
其中,第二命令为也是I2C通信协议下的命令时序下的命令。也就是说,本申请中还可以利用现有的I2C命令时序,去发送第二命令,以及通过该第二命令将第一I2C地址分配给第一从节点,从而无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,在进行第一轮I2C地址分配之前,该方法还包括:第一从节点从主节点获取地址分配命令,其中,地址分配命令用于指示主节点将要进行I2C地址分配,以使第一从节点获取到第一命令中的读指示时,基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号。
其中,地址分配命令包括第二地址和第三地址,第二地址和第三地址为相同的地址;或者,为不同的地址。具体地,当N个从节点为类型相同的从节点时,第二地址和第三地址均为N个从节点的类别地址,类别地址用于指示N个从节点的类型;当N个从节点为I2C总线上的所有从节点时,第二地址和第三地址均为广播地址。
可以看出,在本申请实施方式中,在进行第一轮I2C地址分配之前,先将主节点即将进行I2C地址分配的行为,通过地址分配命令指示给从节点。这样以便于从节点后续的I2C时命令时序中接收到读指示时,可以主动发送标识信息的比特信号,以及在接收到写指示时,知道写指示后的I2C地址是主节点为其分配的I2C地址。为主节点基于现有的I2C命令时序动态分配I2C地址提供了基础。
在本申请的一个实施方式中,第一命令是主节点在第i次读过程中发送的;第二命令是主节点在第i次写过程中发送的;第i次读过程为同一次数据传输过程或者不同次数据传输过程;地址分配命令是主节点在第一读过程中发送的;其中,第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的,I2C命令时序与I2C通信协议下的命令时序匹配。
可以看出,在本实施方式中,主节点和从节点之间可以通过复用现有的I2C命令时序完成整个I2C地址的动态分配,无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
第二方面,本申请实施例提供一种I2C地址分配方法,该方法应用于主节点,该方法包括:在进行第i轮I2C地址分配时,获取ki个从节点的标识信息,其中,ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点;获取ki个从节点基于标识信息,通过I2C总线所发送的比特信号;向第一从节点发送第一I2C地址;其中,第一从节点为ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给主节点的从节点。
在本申请实施中,主节点在为N个从节点分配I2C地址时,会经过N轮I2C地址分配,并且每轮分配为一个从节点分配一个I2C地址。具体地,在进行第i轮I2C地址分配(即任意一轮I2C地址分配)时,主节点先指示ki个从节点该主节点将要进行地址分配,以便获取ki个从节点的标识信息;相应地,ki个从节点中的每个从节点会基于主节点的指示发送标识信息的比特信号,并且ki个从节点在发送标识信息的比特信号时,会基于发送的比特信号进行仲裁,最终只会有一个从节点(即第一从节点)最先将标识信息(完整的标识信息)发送给主节点。相应地,主节点会为第一从节点分配第一I2C地址。第一从节点获得了一I2C地址后,就会退出I2C地址分配过程,实现了在第i轮I2C地址分配过程,为一个从节点分配I2C地址。因此在经过N轮I2C地址分配后,就可以为每个从节点动态分配到一个I2C地址,从而实现无需增加主节点和从节点之间增加复杂的布线,只需要从节点基于发送的比特信号进行仲裁,主节点即可实现I2C地址的动态分配,实现了I2C地址动态分配的通用性。
在本申请的一个实施方式中,N个从节点为I2C总线上所连接的所有从节点中类型相同的从节点,或者,该N个从节点为总线上的所有从节点。
可以看出,在本申请实施方式中,可以不对从节点进行区分,统一为总线上的所有从节点分配I2C地址,进一步增加动态I2C地址分配的通用性。或者,可以基于从节点的类型为总线上的所有从节点进行分组,然后,依次为每组中的从节点分配I2C地址,这样就在同一个地址段为某一组的从节点分配I2C地址,也就是说可以将一个地址段的I2C地址分配给类型相同的从节点,从而便于后续的I2C地址的管理。
在本申请的一个实施方式中,获取ki个从节点的标识信息,包括:发送第一命令,其中,第一命令包括第一地址和读指示,第一地址用于寻址ki个从节点,读指示用于指示ki个从节点发送标识信息,以使ki个从节点基于标识信息,通过I2C总线发送比特信号。
其中,若N个从节点为类型相同的从节点,第一地址为N个从节点的类别地址,类别地址用于标识N个从节点的类型;若N个从节点为所有从节点,第一地址为广播地址。
进一步地,第一命令为I2C通信协议下的命令时序下的命令。可以看出,本申请中主节点可以复用现有的I2C命令时序,去发送第一命令,以及通过该第一命令指示从节点发送标识信息,以完成I2C地址的动态分配,从而无需构造新的命令以及对通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,向第一从节点发送第一I2C地址,包括:发送第二命令,其中,第二命令包括第一I2C地址和写指示,写指示用于将第一I2C地址分配给第一从节点。
其中,第二命令为也是I2C通信协议下的命令时序下的命令。可以看出,本申请中主节点还可以复用现有的I2C命令时序,去发送第二命令,以及通过该第二命令将第一I2C地址分配给第一从节点,从而无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,该方法还包括:发送地址分配命令,地址分配命令用于指示主节点将要进行I2C地址分配,以指示ki个从节点获取到第一命令中的读指示时,基于标识信息,通过I2C总线发送比特信号。
其中,地址分配命令包括第二地址和第三地址,第二地址和第三地址为相同的地址;或者,为不同的地址。具体地,当N个从节点为类型相同的从节点时,第二地址和第三地址均为N个从节点的类别地址,类别地址用于指示N个从节点的类型;当N个从节点为I2C总线上的所有从节点时,第二地址和第三地址均为广播地址。
可以看出,在本申请实施方式中,在进行第一轮I2C地址分配之前,主节点先把自己将要进行I2C地址分配的行为,通过地址分配命令指示给从节点。这样以便于从节点后续的I2C时命令时序中接收到读指示时,可以主动发送标识信息的比特信号,以及在接收到写指示时,知道写指示后的I2C地址是主节点为其分配的I2C地址。主节点通过预先发送地址分配指令为主节点复用现有的I2C命令时序去动态分配I2C地址提供了基础。
在本申请的一个实施方式中,第一命令是主节点在第i次读过程中发送的;第二命令是主节点在第i次写过程中发送的;地址分配命令是主节点在第一读过程中发送的;第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的;I2C命令时序与I2C通信协议下的命令时序匹配。
可以看出,在本实施方式中,主节点和从节点之间可以通过复用现有的I2C命令时序完成整个I2C地址的动态分配,无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,该方法还包括:当主节点进行N轮I2C地址分配后,主节点发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配。
可以看出,在本实施方式中,首先在主节点预先配置等待分配I2C地址的从节点的数量,即N,这样主节点在感知到进行了N轮I2C地址分配后,可以自主发送结束信号,结束整个I2C地址分配过程,以释放总线。
在本申请的一个实施方式中,该方法还包括:若主节点未获取到ki-1个从节点的标识信息,且获取到否定确认时,主节点发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配,其中,ki-1个从节点为ki个从节点中除第一从节点之外的从节点。
实际应用中,主节点不一定清楚从节点的数量,比如,未预先配置从节点的数量,或者,即使配置有从节点的数量,但是,此次地址分配时,由于一些特殊情况可能无法知道当前参与地址分配的从节点的数量,比如,某些从节点存在故障,或者从节点没上电,它们就没有参与仲裁和地址分配的过程,则实际需要分配地址的从节点数量会少于预先配置的数量,这时候主节点就无法按照配置的从节点的数量来分配地址。因此,在本实施方式中,在完成i轮地址分配后,即完成当前轮次的I2C地址分配后,不去关注有没有为每个从节点分配到地址,而是继续下一轮地址分配,若在下一轮地址分配中在指示从节点发送标识信息时,未获取到设备标识,则说明当前轮次已经为所有的从节点分配到了地址,故此时主节点感知到所有的从节点已经分配到了I2C地址,可以自主结束地址分配过程,从而实现主节点无需提前知道从节点的数量,也可以完成地址分配过程。
第三方面,本申请实施例提供一种I2C地址分配方法,该方法应用于计算设备,计算设备包括主节点和N个从节点,主节点和N个从节点之间通过I2C总线连接;方法包括:在进行第i轮I2C地址分配时,主节点获取ki个从节点的标识信息;其中,ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点;ki个从节点中的每个从节点基于标识信息,通过I2C总线向主节点发送标识信息的比特信号;ki个从节点中的每个从节点基于发送的比特信号,与其他从节点进行仲裁;主节点为第一从节点分配第一I2C地址,第一从节点为ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给主节点的从节点。
首先说明,主节点在为N个从节点分配I2C地址时,会经过N轮I2C地址分配,并且每轮分配为一个从节点分配一个I2C地址。在进行第i轮I2C地址分配(即任意一轮I2C地址分配)时,主节点首先指示ki个从节点中的每个从节点发送标识信息,然后,ki个从节点中的每个从节点基于标识信息,通过I2C总线向主节点发送标识信息的比特信号,并基于发送的比特信号,与其他从节点进行仲裁。这样通过标识信息进行仲裁,最终只会有一个从节点(即第一从节点)最先将标识信息(完整的标识信息)发送给主节点。相应地,主节点会为第一从节点分配第一I2C地址。第一从节点获得了一I2C地址后,就会退出I2C地址分配过程,实现了在第i轮I2C地址分配过程,为一个从节点分配I2C地址。因此在经过N轮I2C地址分配后,就可以为每个从节点动态分配到一个I2C地址,从而实现无需增加主节点和从节点之间增加复杂的布线,只需要从节点基于发送的比特信号进行仲裁,主节点即可实现I2C地址的动态分配,实现了I2C地址动态分配的通用性。
在本申请的一个实施方式中,N个从节点为I2C总线上所连接的所有从节点中类型相同的从节点,或者,该N个从节点为总线上的所有从节点。
可以看出,在本申请实施方式中,可以不对从节点进行区分,统一为总线上的所有从节点分配I2C地址,进一步增加动态I2C地址分配的通用性。或者,可以基于从节点的类型为总线上的所有从节点进行分组,然后,依次为每组中的从节点分配I2C地址,这样就在同一个地址段为某一组的从节点分配I2C地址,也就是说可以将一个地址段的I2C地址分配给类型相同的从节点,从而便于后续的I2C地址的管理。
在本申请的一个实施方式中,ki个从节点中的每个从节点基于标识信息,通过I2C总线向主节点发送比特信号,包括:在第j次仲裁时,第一从节点向主节点发送标识信息的第j个比特信号,其中,第一从节点为ki个从节点中在第j-1次仲裁时获得高优先级的从节点中的任意一个;ki个从节点中的每个从节点基于发送的比特信号,与其他从节点进行仲裁,包括:第一从节点基于第j个比特信号,以及在第j次仲裁时I2C总线上的数据,确定第一从节点在第j次仲裁时的优先级,其中,第一从节点在第j次仲裁时的优先级为高优先或者低优先级;在进行M次仲裁后,若第一从节点在每次仲裁时的优先级均为高优先级,第一从节点最先将标识信息发送给主节点;若第一从节点在多次仲裁中的任意一次仲裁时的优先级为低优先级,则第一从节点退出下一次仲裁。
可以看出,在本申请实施例中,在上一次仲裁时获得优先级的从节点,在参与本次仲裁的过程中,会基于该从节点发送的比特信号和总线上的数据,确定在本次仲裁时是否为优先级的从节点,如果是则会继续参与下一次仲裁过程,否则退出仲裁。由于从节点的标识信息是不完全相同的,所以,通过本申请的仲裁机制,可以保证在每轮进行I2C地址分配时,只有一个从节点可以最先将标识信息发送给主节点,这样在第i轮地址分配过程中,第一从节点会最先将标识信息发送给主节点,也就是说在第i轮地址分配时,只会为第一从节点分配I2C地址,实现基于仲裁机制可以在每轮进行I2C地址分配时,主节点动态的为一个从节点分配I2C地址,实现基于仲裁机制即可完成I2C地址分配,无需设计复杂的布线结构。
在本申请的一个实施方式中,第一从节点基于第j个比特信号,以及第j次仲裁时I2C总线上的数据,确定第一从节点在第j次仲裁时的优先级,包括:若第j个比特信号与第j次仲裁时I2C总线上的数据相同,第一从节点确定第一从节点在第j次仲裁时的优先级为高优先级;若第j个比特信号与第j次仲裁时I2C总线上的数据不同,第一从节点确定第一从节点在第j次仲裁时的优先级为低优先级。
其中,若在第j仲裁周期内,有一个从节点发送的比特信号为0,则该总线上的数据为0,其中,0代表了高优先级;只有当所有的从节点发送的比特信号都是1时,总线上的数据才是1。可以看出,在本实施方式中,在第j个仲裁周期内,从节点可以基于自己所发送的比特信号和总线上的比特信号进行比较,当自己所发送的比特信号与I2C总线上的数据相同,即自己发送的比特信号的优先级不低于其他从节点的优先级,则将自己作为高优先级的从节点,继续参与仲裁;当自己所发送的比特信号与I2C总线上的数据不相同,即自己发送的比特信号的优先级低于其他从节点的优先级,则会自动退出仲裁过程。
在本申请的一个实施方式中,从节点进行仲裁的次数可以预先设定,例如,可以设置从节点仲裁M次,其中,该M是基于从节点的标识信息的长度确定的。例如,可以将N个从节点中最长的标识信息的长度作为M。可以理解的是,不同的从节点的标识信息的长度应该是不同的,这样在进行第j次仲裁周期之前,有些从节点可能已经将标识信息全部发送出去了,也就是说有些从节点可能已经没有标识可发送了。针对这种情况,第一从节点向主节点发送标识信息的第j个比特信号,包括:若第一从节点的标识信息的长度小于j,第一从节点向主节点发送预设比特信号,作为第一从节点的标识信息的第j个比特信号;若第一从节点的标识信息的长度大于或者等于j,第一从节点向主节点发送标识信息中的第j个比特信号。
可以看出,在本申请实施例中,针对标识信息的长度不同的情况,若在某次仲裁时,高优先级的从节点没有标识信息可以发送时,会通过发比特1的方式,继续参与仲裁。这样就可以不用关注从节点的标识信息的长度;换句话,本申请针对所有类型的从节点,都可以完成I2C地址的动态分配,进一步提高了I2C地址动态分配的通用性。
在本申请的一个实施方式中,N个从节点的标识信息位于同一区间。应说明,由于仲裁次数由最长的标识信息的长度所确定。故在进行I2C地址分配之前,可以将标识信息的长度处于同一区间的从节点挂载在同一条总线上,或者,将标识信息的长度处于同一区间的从节点分在同一个组里面,这样可以避免由于标识信息的长度差距过大,有些长度相对较短的从节点需要补发数量较多的比特1,额外增加了这些从节点发送比特的功耗和压力。
在本申请的一个实施方式中,主节点获取ki个从节点的标识信息,包括:
发送第一命令,其中,第一命令包括第一地址和读指示,第一地址用于寻址ki个从节点,读指示用于指示ki个从节点发送标识信息,以使ki个从节点基于标识信息,通过I2C总线发送比特信号。
其中,若N个从节点为类型相同的从节点,第一地址为N个从节点的类别地址,类别地址用于标识N个从节点的类型;若N个从节点为所有从节点,第一地址为广播地址。具体地,第一命令为I2C通信协议下的命令时序下的命令。也就是说,本申请中利用现有的I2C命令时序,去发送第一命令,以及通过该第一命令指示从节点发送标识信息,以完成I2C地址的动态分配,从而无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,主节点为第一从节点分配第一I2C地址,包括:发送第二命令,其中,第二命令包括第一I2C地址和写指示,写指示用于将第一I2C地址分配给第一从节点。
其中,第二命令为也是I2C通信协议下的命令时序下的命令。也就是说,本申请中还可以利用现有的I2C命令时序,去发送第二命令,以及通过该第二命令将第一I2C地址分配给第一从节点,从而无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,在进行第一轮I2C地址分配之前,该方法还包括:发送地址分配命令,地址分配命令用于指示主节点将要进行I2C地址分配,以指示ki个从节点获取到第一命令中的读指示时,基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号。
其中,地址分配命令包括第二地址和第三地址,第二地址和第三地址为相同的地址;或者,为不同的地址。具体地,当N个从节点为类型相同的从节点时,第二地址和第三地址均为N个从节点的类别地址,类别地址用于指示N个从节点的类型;当N个从节点为I2C总线上的所有从节点时,第二地址和第三地址均为广播地址。
可以看出,在本申请实施方式中,在进行第一轮I2C地址分配之前,先将主节点即将进行I2C地址分配的行为,通过地址分配命令指示给从节点。这样以便于从节点后续的I2C时命令时序中接收到读指示时,可以主动发送标识信息的比特信号,以及在接收到写指示时,知道写指示后的I2C地址是主节点为其分配的I2C地址。为主节点基于现有的I2C命令时序动态分配I2C地址提供了基础。
在本申请的一个实施方式中,第一命令是主节点在第i次读过程中发送的;第二命令是主节点在第i次写过程中发送的;第i次读过程为同一次数据传输过程或者不同次数据传输过程;地址分配命令是主节点在第一读过程中发送的;其中,第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的,I2C命令时序与I2C通信协议下的命令时序匹配。
可以看出,在本实施方式中,主节点和从节点之间可以通过复用现有的I2C命令时序完成整个I2C地址的动态分配,无需构造新的命令以及对I2C通信协议进行改动,也无需增加新的接口,因此整个I2C地址分配过程可实现性较高,兼容性较好,且更加简单。
在本申请的一个实施方式中,该方法还包括:当主节点进行N轮I2C地址分配后,主节点发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配。
可以看出,在本实施方式中,首先在主节点预先配置等待分配I2C地址的从节点的数量,即N,这样主节点在感知到进行了N轮I2C地址分配后,可以自主发送结束信号,结束整个I2C地址分配过程,以释放总线
在本申请的一个实施方式中,该方法还包括:若主节点未获取到ki-1个从节点的标识信息,且获取到否定确认时,主节点发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配,其中,ki-1个从节点为ki个从节点中除第一从节点之外的从节点。
实际应用中,主节点不一定清楚从节点的数量,比如,未预先配置从节点的数量,或者,即使配置有从节点的数量,但是,此次地址分配时,由于一些特殊情况可能无法知道当前参与地址分配的从节点的数量,比如,某些从节点存在故障,或者从节点没上电,它们就没有参与仲裁和地址分配的过程,则实际需要分配地址的从节点数量会少于预先配置的数量,这时候主节点就无法按照配置的从节点的数量来分配地址。因此,在本实施方式中,在完成i轮地址分配后,即完成当前轮次的I2C地址分配后,不去关注有没有为每个从节点分配到地址,而是继续下一轮地址分配,若在下一轮地址分配中在指示从节点发送标识信息时,未获取到设备标识,则说明当前轮次已经为所有的从节点分配到了地址,故此时主节点感知到所有的从节点已经分配到了I2C地址,可以自主结束地址分配过程,从而实现主节点无需提前知道从节点的数量,也可以完成地址分配过程。
第四方面,本申请实施例提供一种从节点,该从节点为N个主节点中的任一个;该从节点包括:收发单元和处理单元;
收发单元,用于在进行第i轮I2C地址分配时,基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号;
处理单元,用于若该从节点发送的比特信号与其他从节点发送的比特信号经过仲裁后,该从节点最先将标识信息发送给主节点,则该从节点确定为目标从节点;
收发单元,还用于从主节点获取第一I2C地址。
在本申请的一个实施方式中,N个从节点为I2C总线上所连接的所有从节点中类型相同的从节点,或者,该N个从节点为总线上的所有从节点。
在本申请的一个实施方式中,处理单元,还用于执行以下步骤:步骤S1:在第j次仲裁时,控制收发单元通过I2C总线向主节点发送标识信息中的第j个比特信号;该从节点为第j-1次仲裁时获得高优先级的从节点中的一个从节点;步骤S2:基于第j个比特信号,以及第j次仲裁时I2C总线上的数据,确定该从节点在第j次仲裁时的优先级,该从节点在第j次仲裁时的优先级为高优先级或者低优先级;I2C总线上的数据由在第j-1次仲裁时获得高优先级的从节点在第j次仲裁时所发送的比特信号共同决定的;赋值j=j+1,并重复上述步骤S1~步骤S2,在经过多次仲裁后,若该从节点在每次仲裁时的优先级均为高优先级,确定该从节点最先将标识信息发送给主节点。
在本申请的一个实施方式中,处理单元,还用于:若该从节点在多次仲裁中的任意一次仲裁时的优先级为低优先级,则该从节点退出下一次仲裁。
在本申请的一个实施方式中,在基于第j个比特信号,以及第j次仲裁时I2C总线上的数据,确定该从节点在第j次仲裁时的优先级方面,处理单元,具体用于:
若第j个比特信号与第j次仲裁时I2C总线上的数据相同,确定该从节点在第j次仲裁时的优先级为高优先级;若第j个比特信号与第j次仲裁时I2C总线上的数据不同,确定该从节点在第j次仲裁时的优先级为低优先级。
在本申请的一个实施方式中,从节点进行仲裁的次数可以预先设定,例如,可以设置从节点仲裁M次,其中,该M是基于从节点的标识信息的长度确定的。例如,可以将N个从节点中最长的标识信息的长度作为该M。可以理解的是,不同的从节点的标识信息的长度应该是不同的,这样在进行第j次仲裁周期之前,有些从节点可能已经将标识信息全部发送出去了,也就是说有些从节点可能已经没有标识可发送了。针对这种情况,在通过I2C总线向主节点发送标识信息中的第j个比特信号方面,处理单元,具体用于:
若该从节点的标识信息的长度小于j,控制收发单元向主节点发送预设比特信号,作为该从节点的标识信息的第j个比特信号;若该从节点的标识信息的长度大于或者等于j,控制收发单元向主节点发送标识信息中的第j个比特信号。
在本申请的一个实施方式中,N个从节点的标识信息的长度位于同一区间。
在本申请的一个实施方式中,收发单元,还用于从主节点获取第一命令,第一命令包括第一地址和读指示,第一地址用于寻址第一从节点;读指示用于指示该从节点发送标识信息,以使该从节点基于该从节点的标识信息,通过I2C总线向主节点发送比特信号。
在本申请的一个实施方式中,在从主节点获取第一I2C地址方面,收发单元,具体用于:从主节点获取第二命令,其中,第二命令包括第一I2C地址和写指示;处理单元,还用于响应于写指示,将第一I2C地址作为主节点为第一从节点分配的I2C地址。
在本申请的一个实施方式中,在进行第一轮I2C地址分配之前,收发单元,还用于从主节点获取地址分配命令,其中,地址分配命令用于指示主节点将要进行I2C地址分配,以使该从节点获取到第一命令中的读指示时,基于该从节点的标识信息,通过I2C总线向主节点发送比特信号。
在本申请的一个实施方式中,第一命令是主节点在第i次读过程中发送的;第二命令是主节点在第i次写过程中发送的;第i次读过程为同一次数据传输过程或者不同次数据传输过程;地址分配命令是主节点在第一读过程中发送的;其中,第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的,I2C命令时序与I2C通信协议下的命令时序匹配。
第五方面,本申请实施例提供一种主节点,该主节点包括:收发单元和处理单元;
处理单元,用于在进行第i轮I2C地址分配时,获取ki个从节点的标识信息,其中,ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点;
收发单元,用于获取ki个从节点基于标识信息,通过I2C总线所发送的比特信号;向第一从节点发送第一I2C地址;其中,第一从节点为ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给主节点的从节点。
在本申请的一个实施方式中,N个从节点为I2C总线上所连接的所有从节点中类型相同的从节点,或者,该N个从节点为总线上的所有从节点。
在本申请的一个实施方式中,在获取ki个从节点的标识信息方面,处理单元,具体用于:控制收发单元发送第一命令,其中,第一命令包括第一地址和读指示,第一地址用于寻址ki个从节点,读指示用于指示ki个从节点发送标识信息,以使ki个从节点基于标识信息,通过I2C总线发送比特信号。
在本申请的一个实施方式中,在向第一从节点发送第一I2C地址方面,收发单元,具体用于:发送第二命令,其中,第二命令包括第一I2C地址和写指示,写指示用于将第一I2C地址分配给第一从节点。
在本申请的一个实施方式中,收发单元,还用于:发送地址分配命令,地址分配命令用于指示主节点将要进行I2C地址分配,以指示ki个从节点获取到第一命令中的读指示时,基于标识信息,通过I2C总线发送比特信号。
在本申请的一个实施方式中,第一命令是主节点在第i次读过程中发送的;第二命令是主节点在第i次写过程中发送的;地址分配命令是主节点在第一读过程中发送的;第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的;I2C命令时序与I2C通信协议下的命令时序匹配。
在本申请的一个实施方式中,收发单元,还用于:当主节点进行N轮I2C地址分配后,发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配。
在本申请的一个实施方式中,收发单元,还用于:若未获取到ki-1个从节点的标识信息,且获取到否定确认时,发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配,其中,ki-1个从节点为ki个从节点中除第一从节点之外的从节点。
第六方面,本申请实施例提供一种计算设备;计算设备包括主节点和N个从节点,主节点和N个从节点之间通过I2C总线连接;
主节点,用于在进行第i轮I2C地址分配时,获取ki个从节点的标识信息;其中,ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点;
ki个从节点中的每个从节点,用于基于标识信息,通过I2C总线向主节点发送标识信息的比特信号;基于发送的比特信号,与其他从节点进行仲裁;
主节点,还用于为第一从节点分配第一I2C地址,第一从节点为ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给主节点的从节点。
在本申请的一个实施方式中,N个从节点为I2C总线上所连接的所有从节点中类型相同的从节点,或者,该N个从节点为总线上的所有从节点。
在本申请的一个实施方式中,在基于标识信息,通过I2C总线向主节点发送比特信号方面,ki个从节点中的每个从节点具体用于:在第j次仲裁时,第一从节点向主节点发送标识信息的第j个比特信号,其中,第一从节点为ki个从节点中在第j-1次仲裁时获得高优先级的从节点中的任意一个;在基于发送的比特信号,与其他从节点进行仲裁方面,ki个从节点中的每个从节点,具体用于:第一从节点基于第j个比特信号,以及在第j次仲裁时I2C总线上的数据,确定第一从节点在第j次仲裁时的优先级,其中,第一从节点在第j次仲裁时的优先级为高优先或者低优先级;在进行M次仲裁后,若第一从节点在每次仲裁时的优先级均为高优先级,第一从节点最先将标识信息发送给主节点;若第一从节点在多次仲裁中的任意一次仲裁时的优先级为低优先级,则第一从节点退出下一次仲裁。
在本申请的一个实施方式中,在第一从节点基于第j个比特信号,以及第j次仲裁时I2C总线上的数据,确定第一从节点在第j次仲裁时的优先级方面,第一从节点,具体用于:若第j个比特信号与第j次仲裁时I2C总线上的数据相同,第一从节点确定第一从节点在第j次仲裁时的优先级为高优先级;若第j个比特信号与第j次仲裁时I2C总线上的数据不同,第一从节点确定第一从节点在第j次仲裁时的优先级为低优先级。
在本申请的一个实施方式中,在第一从节点向主节点发送标识信息的第j个比特信号方面,第一从节点,具体用于:若第一从节点的标识信息的长度小于j,第一从节点向主节点发送预设比特信号,作为第一从节点的标识信息的第j个比特信号;若第一从节点的标识信息的长度大于或者等于j,第一从节点向主节点发送标识信息中的第j个比特信号。
在本申请的一个实施方式中,N个从节点的标识信息位于同一区间。
在本申请的一个实施方式中,在主节点获取ki个从节点的标识信息方面,主节点,具体用于:发送第一命令,其中,第一命令包括第一地址和读指示,第一地址用于寻址ki个从节点,读指示用于指示ki个从节点发送标识信息,以使ki个从节点基于标识信息,通过I2C总线发送比特信号。
在本申请的一个实施方式中,在主节点为第一从节点分配第一I2C地址方面,主节点,具体用于:发送第二命令,其中,第二命令包括第一I2C地址和写指示,写指示用于将第一I2C地址分配给第一从节点。
在本申请的一个实施方式中,在进行第一轮I2C地址分配之前,主节点还用于:发送地址分配命令,地址分配命令用于指示主节点将要进行I2C地址分配,以指示ki个从节点获取到第一命令中的读指示时,基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号。
在本申请的一个实施方式中,第一命令是主节点在第i次读过程中发送的;第二命令是主节点在第i次写过程中发送的;第i次读过程为同一次数据传输过程或者不同次数据传输过程;地址分配命令是主节点在第一读过程中发送的;其中,第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的,I2C命令时序与I2C通信协议下的命令时序匹配。
在本申请的一个实施方式中,主节点还用于:当主节点进行N轮I2C地址分配后,发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配。
在本申请的一个实施方式中,主节点还用于:若主节点未获取到ki-1个从节点的标识信息,且获取到否定确认时,发送结束信号,结束信号用于指示主节点为N个从节点完成I2C地址分配,其中,ki-1个从节点为ki个从节点中除第一从节点之外的从节点。
第七方面,本申请实施例提供了一种电子设备,包括:存储器,用于存储程序;处理器,用于执行存储器存储的程序;当存储器存储的程序被执行时,处理器用于实现上述第一方面或第二方面中的方法。
第八方面,本申请实施例提供了提供一种计算机可读介质,该计算机可读介质存储用于设备执行的程序代码,该程序代码用于实现上述第一方面或第二方面的方法。
第九方面,本申请实施例提供了提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机实现上述第一方面或第二方面中的方法。
第十方面,本申请实施例提供一种计算设备,该计算设备包括如第一方面中的第一从节点;或者该计算设备包括如第二方面的主节点;或者该计算设备包括如第三方面的计算设备。
附图说明
图1为一种主节点与从节点进行数据读写的命令时序的示意图;
图2为本申请实施例提供的一种服务器的示意图;
图3为本申请实施例提供的一种I2C地址分配方法的流程示意图;
图4为本申请实施例提供的一种对I2C总线上的所有从节点进行I2C地址分配的示意图;
图5为本申请实施例提供的一种对类型相同的从节点进行I2C地址分配的示意图;
图6为本申请实施例提供的一种第i次读过程中的I2C命令时序的示意图;
图7为本申请实施例提供的一种通过广播地址寻址所有从节点的示意图;
图8为本申请实施例提供的一种通过类别地址寻址与类别地址对应的N个从节点的示意图;
图9为本申请实施例提供的一种第一读过程中的I2C命令时序的示意图;
图10为本申请实施例提供的一种通过两次广播地址指示主节点进行地址分配的示意图;
图11为本申请实施例提供的一种通过两次类别地址指示主节点进行地址分配的示意图;
图12为本申请实施例提供的一种从节点通过I2C发送标识信息的示意图;
图13为本申请实施例提供的一种基于仲裁机制发送标识信息的示意图;
图14为本申请实施例提供的一种分配第一I2C地址的示意图;
图15为本申请实施例提供的另一种分配第一I2C地址的示意图;
图16为本申请实施例提供的一种主节点和N个从节点之间通过完整的命令时序完成I2C地址分配过程;
图17为本申请实施例提供的另一种主节点和N个从节点之间通过完整的命令时序完成I2C地址分配过程;
图18为本申请实施例提供的又一种主节点和N个从节点之间通过完整的命令时序完成I2C地址分配过程;
图19为本申请实施例提供的又一种主节点和N个从节点之间通过完整的命令时序完成I2C地址分配过程;
图20为本申请实施例提供的一种从节点的示意图;
图21为本申请实施例提供的一种主节点的示意图;
图22为本申请实施例提供的一种电子设备的示意图。
具体实施方式
为了理解本申请,首先介绍本申请所涉及的到各个专业术语。
S:起始位,表示命令时序启动,全称为Start,简称S;
Slave Address:从节点地址,常用于主节点的数据读写过程;
R/W:读写指示位,表示主节点进行数据读取或者数据写入,通过I2C命令时序中的一个比特位指示;当该比特位的取值为1时,指示数据读取,全称为Read,简称R;当该比特位的取值为0时,指示数据写入,全称为Write,简称W;
A/NACK:确认或否定确认指示位,通过I2C命令时序中的一个比特指示。当该比特位的取值为0时,指示确认,全称为Acknowledge,简称A;当该比特位的取值为1时,指示否定确认,全称为Negative-Acknowledgment,简称NACK;
Sr:重复起始位,表示命令时序重新启动,全称为Repeat Start,简称Sr;
P:表示停止位,表示命令时序结束。
首先说明,主节点与从节点之间的数据传输是以字节传输的,即每次传输8个比特位。下面结合附图说明主节点基于命令时序进行数据读写的方式。
如图1所示,当主节点与从节点进行数据传输时,主节点先向I2C总线发送起始位S,以激活I2C总线上的各个从节点。主节点向数据总线发送从节点的7比特的I2C地址(即Slave Adress)和1比特的读写指示,其中,Slave Adress用于指示主节点所寻址的从节点,1比特的读写指示指示主节点进行数据读取或者写入。若主节点进行数据读取,被寻址的从节点在收到该字节后回复一个ACK,并接管I2C总线向主节点传输数据;主节点每收到一字节的数据则向从节点回复一个ACK,并在获取预期的字节数之后,会向从节点发送一个NACK;若主节点进行数据写入,被寻址的从节点在收到该字节后回复ACK。之后主节点向从节点写入数据。从节点每获取到一字节会回复一个ACK。当数据传输完成后,主节点会发送停止信号P,结束数据传输,释放总线。
应说明,本申请的主节点和N个从节点可以为任意计算设备中的硬件模块。其中,该计算设备可以为用户设备、车载设备、计算设备,等等。本申请主要以该计算设备为服务器为例进行说明。相应地,主节点为服务器中的设备管理模块,例如,服务器中的基板管理控制器(Baseboard Management Controller,BWC);或者,HPE服务器中的iLO,戴尔服务器中的iDRAC。从节点可以为服务器中的硬件模块,比如,传感器、存储器、控制器,等等。比如,传感器可以为温度传感器、光感传感器。
为了描述方便,本申请的I2C地址分配,也可以简称地址分配,比如,主节点为从节点分配I2C地址,可简称主节点为从节点分配地址;或者,主节点进行分配I2C地址,可以简称为主节点进行地址分配;I2C命令时序,也可以简称为命令时序;I2C总线也可简称为总线。
参阅图2,图2为本申请实施例提供的一种服务器的示意图。服务器包括主节点10、N个从节点20和I2C总线30。其中,主节点10和N个从节点20之间通过I2C总线30连接。
在进行第i轮I2C地址分配时,主节点获取ki个从节点的标识信息,以在第i轮地址分配中从ki个从节点获取到一个从节点的完整的标识信息;其中,ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点,N个从节点为总线上等待分配I2C地址的从节点。相应地,ki个从节点中的每个从节点基于标识信息,通过I2C总线30向主节点发送比特信号,即本申请从节点在发送比特信号时,可以一个比特,一个比特的发送标识信息中的比特位;ki个从节点中的每个从节点基于发送的比特信号,与其他从节点进行仲裁;当ki个从节点中的第一从节点基于发送的比特信号最先将标识信息(完整的标识信息)发送给主节点时,主节点为第一从节点分配第一I2C地址,从而完成第i轮I2C地址分配。
进一步地,主节点在第i轮I2C地址分配为第一从节点分配I2C地址后,第一从节点会退出I2C地址分配过程,并且主节点会会进行第i+1轮I2C地址分配,这样经过N轮I2C地址分配后,主节点即可为N个从节点全部分配到I2C地址,从而实现在不改变主从节点之间的连接方式的情况下,实现动态为每个从节点分配I2C地址,也就可以在任何I2C通信场景下,为每个从节点动态分配地址,实现了I2C地址动态分配的通用性。
参阅图3,图3为本申请实施例提供的一种I2C地址分配方法的流程示意图。该方法应用于上述的服务器。该方法包括但不限于以下步骤内容:
301、在进行第i轮I2C地址分配时,主节点获取ki个从节点的标识信息。
其中,上述ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点,N为大于1的整数。N个从节点为I2C总线上等待分配I2C地址的从节点。
本申请在进行I2C地址分配时,如图4所示,主节点可以对I2C总线上的所有从节点一起进行I2C地址分配;如图5所示,主节点也可以根据从节点的类型,先分配某一类型相同的从节点,再分配另一类型相同的从节点。因此上述N个从节点可以为I2C总线上的所有从节点,也可以是I2C总线上的所有从节点中某种类型下的N个从节点。
应说明,当主节点按从节点的类型进行I2C地址分配时,先为哪种类型的从节点进行地址分配,后为哪种类型的从节点进行地址分配,本申请对此并不限定,也就是不限定按从节点的类型进行地址分配时的分配顺序。可选地,可以在主节点中预先配置分配顺序,则后续主节点按从节点的类型进行I2C地址分配时,可按照预先配置的分配顺序进行地址分配。
应说明,本申请的I2C地址分配是通过多轮地址分配实现的,且每轮地址分配为一个从节点分配I2C地址,故针对N个从节点,需要进行N轮地址分配,才能为每个从节点都分配到I2C地址。并且当前轮次分配到I2C地址的从节点,不再参与后续轮次分配I2C地址的过程。
其中,本申请中N个从节点中每个从节点的标识信息为每个从节点的唯一标识,不同从节点的标识信息不相同。示例性的,每个从节点的标识信息可以为每个从节点的设备标识等等。后续所提到的标识信息和设备标识本质上一致的,可以不用区分。进一步地,设备标识可以为每个从节点的序列号(Serial Number,SN)等等。本申请主要以每个从节点的标识信息为每个从节点的SN为例进行说明,并不对每个从节点的标识信息进行限定。因此,后续所提到的设备标识和标识信息,均可以理解为序列号,不再区分。
进一步说明,本申请中的设备标识以二进制的比特串表征。例如,当从节点的设备标识为SN时,则从节点的设备标识可以是一个128位的比特串。
可选地,主节点通过命令指示的方式获取ki个从节点的标识信息。具体地,主节点发送第一命令,其中,第一命令包括第一地址和读指示,第一地址用于寻址N个从节点,读指示用于指示从节点发送标识信息。本申请中主要以第一命令的长度为一个字节为例进行说明,因此,后续所提到的第一字节和第一命令在本质上是一致的,可以不用区分。
具体地,主节点将第一命令发送到I2C总线上,则I2C总线上的每个从节点都可以获取到第一命令,由于在前i-1轮I2C地址分配时,已经有部分从节点(即N-ki个从节点)分配到相应的I2C地址,故在第i轮地址分配时,虽然第一地址用于寻址N个从节点,只会有上述ki个从节点会响应该第一命令,因此也可以将第一地址理解为用于寻址上述ki个从节点。相应地只有上述ki个从节点响应第一命令中的读指示,会发送标识信息,即实现主节点通过命令指示的方式获取ki个从节点发送标识信息。
可选地,主节点可以在第i次读过程发送第一命令。可选地,该第i次读过程是在I2C命令时序进行的,该I2C命令时序与I2C通信协议下的命令时序匹配,即该I2C命令时序是通过复用现有的I2C通信协议下的命令时序所形成的。
示例性的,如图6所示,第i次读过程中的I2C命令时序中包含重复起始位、第一命令(第一地址和读指示)、第一确认字符A、标识信息和第二确认字符A。结合图6示出的第i次读过程,主节点首先发送重复起始位,通过重复起始位指示第i轮I2C地址分配过程的开始。主节点在发送了重复起始位Sr之后,会发送上述第一命令。这样上述ki个从节点获取到第一命令中的第一地址和读指示后,确定出主节点需要获取标识信息,ki个从节点先会回复第一确认字符A;然后发送标识信息,后续叙述ki个从节点发送设备标识的过程,在此不做过多描述。当主节点获取到标识信息后,发送第二确认字符A,以指示获取到从节点的标识信息。
可选地,若N个从节点为总线上的所有从节点,则第一地址为广播地址,例如,广播地址为7’h7F(即7个1)。如图7所示,当第一地址为广播地址时,主节点在第i次读过程中,发送广播地址,寻址所有从节点。但是,只有上述ki个从节点响应本次寻址,故只有ki个从节点响应第i次读过程中的读指示,发送标识信息。
可选地,若N个从节点为类型相同的从节点,第一地址为N个从节点的类别地址,类别地址用于标识N个从节点的类型。应理解的是,每个从节点中预先配置有每个从节点的类别地址,且主节点中预先配置有I2C总线上的从节点的类别地址。因此,主节点确定所要分配I2C地址的N个从节点的类型,并获取相应的类别地址,将该类别地址作为上述第一地址。然后,主节点发送第一命令,总线上的从节点均会获取到第一命令中包含的第一地址(即类别地址),并将第一地址与各自预先配置的类别地址进行比对,只有类别地址与主节点所发送的类别地址相同,且前i-1轮中未分配到I2C地址的从节点(即上述ki个从节点),会对第一命令中的读指示作出响应,因此也可以将第一地址理解为用于寻址上述ki个从节点。如图8所示,当第一地址为类别地址时,主节点在第i次读过程中,发送类别地址,寻址与该类别地址对应的N个从节点。但是,只有上述ki个从节点响应本次寻址,故只有ki个从节点响应第i次读过程中的读指示,发送标识信息。
由于现有协议中并未规定关于地址分配的命令时序,并且现有的命令时序中的读指示或者写指示是通过一个0或1的比特位进行指示的,故如果主节点仅仅发送上述第一命令,则从节点在接收到第一命令后,是无法知晓该第一命令中的读指示的功能。也就是说,按照现有的命令时序,从节点在获取到第一命令中的读指示之后,并不清楚该读指示的功能是让从节点发送标识信息。故在本申请实施例中,在从节点获取到第一命令中的读指示之前,主节点会先指示主节点发送的上述读指示的目的是指示从节点发送标识信息。总结来说,主节点在发送第一命令之前,会先向N个从节点先指示主节点将要进行地址分配。
可选地,在进行每轮I2C地址分配之前,主节点先发送地址分配命令,以便从节点收到每轮I2C地址分配中主节点发送的读指示时,确定该读指示用于指示从节点发送标识信息。
示例性的,主节点通过第一读过程发送地址分配命令。其中,地址分配命令包括第二地址和第三地址,第二地址和第三地址相互配合,以指示主节点将要进行地址分配。
可选地,上述第i次读过程和第一读过程在同一个I2C命令时序下进行的,且该I2C命令时序与I2C通信协议下的命令时序匹配。进一步地,本申请的多轮地址分配过程可以在同一个I2C命令时序下实现的,故可以在第一轮进行I2C地址分配之前,主节点发送在该I2C命令时序下发送地址分配命令,之后只要主节点在该I2C命令时序中所发送的读指示,都是用来指示从节点发送标识信息,故之后在每轮地址分配过程中,主节点都无需再次发送地址分配命令。当然,主节点也可以进行每轮I2C地址分配之前,均可以发送一次地址分配命令,本申请中主要以主节点在第一轮进行I2C地址分配之前发送地址分配命令为例进行说明。
应说明的是,在第一读过程中,主节点除了发送上述第二地址和第三地址之外,还会接收和发送其他的命令。示例性的,如图9所示,第一读过程中的I2C命令时序包含起始位、第二地址、写指示、第三确认字符、第三地址和第四确认字符。
结合图9示出的命令,具体说明第一读过程,以便理解主节点指示从节点将要进行地址分配的行为是如何实现的。
具体地,主节点首先发送起始位S,激活总线上的所有从节点;然后,主节点发送第二地址以及写指示,其中,第二地址用于寻址上述N个从节点;相应地,上述N个从节点中的每个从节点获取到写指示后,发送第三确认字符;然后,主节点发送第三地址。这样每个从节点就可以获取到第二地址和第三地址,并且在从节点中预先配置,当主节点在同一个子I2C命令时序中获取到第二地址和第三地址,确定主节点将要进行地址分配。相应地,从节点在获取到主节点将要进行地址分配的行为后,会进行响应,发送第四确认字符。
可以看出,通过图9示出的第一读过程,主节点可以将自己将要进行地址分配的行为指示给上述N个从节点中的每个从节点。这样以便于在后续每轮的地址分配过程中,从节点获取到读指示后,向主节点发送标识信息。
可选地,上述第二地址和第三地址可以为相同的地址,也可以为不同的地址,只要在主节点和从节点中预先配置两个相互配合用于指示主节点进行地址分配的地址即可,本申请主要以第二地址和第三地址为相同的地址为例进行说明。
示例性的,如图10所示,当上述N个从节点为总线上的所有从节点时,则第二地址和第三地址可以为广播地址。可选地,主节点将要进行地址分配时,则可以在第一读过程中发送两个广播地址指示主节点将要进行地址分配。为了复用现有的命令时序,则可以将现有的命令时序中的从节点地址设置为广播地址,即将现有的I2C命令时序中数据所在的位置设置为广播地址,从而实现主节点在第一读过程中发送两个广播地址。相应地,从节点在第一读过程中获取到两个广播地址后,可确定出主节点将要进行地址分配。
示例性的,如图11所示,当上述N个从节点为总线上的所有从节点中的类型相同的从节点时,则第二地址和第三地址可以为类别地址。可选地,主节点将要进行地址分配时,则可以在第一读过程命令中发送两个类别地址指示主节点将要进行地址分配。为了复用现有的命令时序,则可以将现有的命令时序中的从节点地址设置为类别地址,即将现有的I2C命令时序中数据所在的位置设置为类别地址,实现主节点在第一读过程中发送两个类别地址。相应地,从节点在第一读过程中获取到两个类别地址后,可确定出主节点将要进行地址分配。
302、ki个从节点中的每个从节点基于标识信息,通过I2C总线向主节点发送比特信号。
示例性的,上述ki个从节点中的每个从节点获取到主节点的命令指示后,会通过I2C总线向主节点发送标识信息中的比特信号。具体地,ki个从节点中的每个从节点获取到第一命令中的读指示后,通过I2C总线向主节点发送标识信息的比特信号。本申请中从节点在发送标识信息的比特信号时,每次发送标识信息的一个比特。当然,在实际应用中,可以不限定所发送的比特信号的数量,比如,可以发送标识信息的两个比特。本申请中主要以从节点发送标识信息的一个比特为例进行说,后续所提到的比特信号均可以理解为一个比特。
303、ki个从节点中的每个从节点基于发送的比特信号,与其他从节点进行仲裁。
可选地,上述ki个从节点基于仲裁机制发送各自的标识信息的比特信号。
具体地,在第j个仲裁周期到来时,hj个从节点中的每个从节点发送标识信息中的第j个比特信号,其中,hj个从节点为上述ki个从节点中在前j-1个仲裁周期后获得高优先级的从节点,当j=1时,h1个从节点为上述ki个从节点,其中,每个从节点发送标识信息中的第j个比特信号为0或1;每个从节点基于该从节点在第j个仲裁周期中发送的第j个比特信号,以及总线在j个仲裁周期中的数据,确定该从节点在第j个仲裁周期内的优先级,其中,该从节点的优先级包括高优先级或低优先级。
其中,总线上的信号是由hj个从节点在第j个仲裁周期中所发送的第j个比特信号共同决定的。具体地,总线是一个线与结构,故hj个从节点中的每个从节点在第j个仲裁周期中发送的第j个比特信号中有0时,则总线的数据为0;当且仅当hj个从节点中的每个从节点发送的第j个比特信号均为1时,总线的数据才为1。
具体地,若某个从节点在第j个仲裁周期中发送的第j个比特信号为0,则该从节点的优先级为高优先级;若某个从节点在第j个仲裁周期中发送的第j个比特信号为1,且总线在第j个仲裁周期的数据为1,则该从节点的优先级为高优先级;若某个从节点在第j个仲裁周期中发送的第j个比特信号为1,且总线在第j个仲裁周期的数据为0,则该从节点的优先级为低优先级。也就是说,当某个从节点发送的第j个比特信号与总线上的数据相同时,则该从节点的优先级为高优先级;当某个从节点发送的第j个比特信号与总线上的数据平不同时,则该从节点的优先级为低优先级。
进一步地,hj个从节点中在第j个仲裁周期内获得高优先级的从节点,可以在第j+1个仲裁周期内发送标识信息的第j+1个比特信号;hj个从节点在第j个仲裁周期内获得低优先级的从节点,从第j+1个仲裁周期开始(包括第j+1个仲裁周期)不再发送标识信息的第j+1个比特信号以及后续比特,即在第j个仲裁周期内获得高优先级的从节点继续参与后续仲裁周期中的仲裁过程,在第j个仲裁周期内获得低优先级的从节点不再参与后续仲裁周期中的仲裁过程。
进步一地,按照上述的仲裁机制,若第一从节点在每个仲裁周期内都是高优先级的从节点,则在经过M个仲裁周期后,第一从节点最先将标识信息全部发送出去,即第一从节点为ki个从节点中在第i轮地址分配过程中最先将标识信息发送给主节点的从节点,这样主节点在M个仲裁周期后最先获取到第一从节点的完整标识信息,其中,M为预设值,M可以为从节点的标识信息的长度,即从节点的标识信息的比特串的长度。应说明的是,若N个从节点的标识信息的长度不同,则M可以为从节点的标识信息的长度的最大值。
应说明,若N个从节点的标识信息的长度不同,在某个仲裁周期内,若获得高优先级的从节点没有标识信息可以发送时,则在后面的仲裁周期内,若从节点获得高优先级,会通过补全的方式,继续发送比特,例如从节点可以在后面的仲裁周期内发送比特1。
举例来说,若M的取值设置为6,若某个从节点的设备标识为000,则从节点在第三个仲裁周期内为高优先级从节点,则该从节点会参与第四个仲裁周期,但是该从节点在第四个仲裁周期内没有比特可以发送,该从节点会在第四个仲裁周期内通过发送比特1的方式补全。
在实际应用中,为了避免标识信息长度差距过大,导致在仲裁过程中标识信息长度较小的设备标识需要主动补全较多的比特。因此,在进行地址分配之前,可以将长度处于同一预设区间的从节点连接在同一个I2C总线上,也就是说,上述N个从节点的标识信息的长度处于同一个预设区间内。针对每个I2C总线,其分配I2C地址的方式,均与本申请动态分配I2C地址相同,不去一一描述。
进一步地,由于I2C通信机制下,主节点与从节点之间的数据传输是一个字节为单位进行传输的。因此,如图12所示,从节点基于仲裁机制发送标识信息时,主节点每获得一个字节的比特信号,就会回复一个确认字符A,并不是获取到第一从节点的完整标识信息后,才回复一个确认字符。如图12所示,若第一从节点的标识信息为一个16字节的比特串,则第一从节点发送了一个字节后,主节点就会回复一个确认字符A,这样在发送了第十六字节的比特信号,即在第一从节点发送标识信息的整个过程中,主节点回复了16个确认字符。
下面以第i轮地址分配过程中,有三个从节点为例详细叙述从节点的仲裁机制。
如图13所示,从节点1的设备标识为0101xxx;从节点2的设备标识为1011xxx;从节点3的设标识为1101xxx。因此,在第i轮地址分配时,在第一次仲裁时,从节点1发送低电平(即发送0),从节点2和从节点3发送高电平(即发送1)。因此总线的电平为低电平,则从节点1发送的电平与总线电平相同,则从节点1为高优先级的从节点,会继续参与一下个仲裁周期的数据发送,从节点2和从节点3发送的电平与总线的电平不同,则会退出仲裁,不参与后续仲裁周期。在第二个仲裁周期内,从节点1继续发送比特,这个时候只有从节点1发送比特,则总线的电平与从节点1的电平相同,从节点1继续为高优先级的从节点,依次下去,在M个仲裁周期后,从节点1就会将设备标识全部发送到数据总线上,相应地主节点就会获取到完整的设备标识0101xxx,从而在第i轮地址分配时,主节点可以为从节点1分配地址。分配完地址之后,从节点1就会退出地址分配。等到第i+1轮地址分配时,在第一次仲裁时,从节点2和从节点3都发送1,从而总线的电平为高电平,则从节点2和从节点3发送的电平均与总线的电平相同,则从节点2和从节点3都是高优先级的从节点,则会继续参与下一次仲裁。在第二次仲裁时,从节点2会发送0,从节点3会发送1,则从节点2为高优先级的从节点,则从节点2会继续参与下一次仲裁,从节点3将会退出仲裁,因此,在第i+1轮地址分配过程中,从节点2会将设备标识全部发送给主节点。主节点将会为从节点2分配地址。则会在第i+2轮中为从节点3分配地址。
304:主节点为第一从节点分配第一I2C地址,第一从节点为ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给主节点的从节点。
示例性的,在M个仲裁周期后,主节点会最先获得第一从节点的标识信息,然后为第一从节点分配该第一I2C地址。
可选地,主节点在为上述N个从节点分配地址可以基于预设分配策略进行分配。其中,预设分配策略包括但不限于:递增、递减、跳跃、分段或者统一编址。
示例性的,当主节点采用递增的方式进行地址分配时,则在第一轮地址分配时,为在第一轮地址分配过程中获得的标识信息对应的从节点分配一个I2C地址,该I2C地址可以为从节点的所有能够分配的地址中的一个起始地址,或者,所有地址中的任意一个地址,等等;然后,在第二轮地址分配时,为在第二轮地址分配过程中获得的标识信息对应的从节点分配一个I2C地址,该地址可以是在第一轮分配的I2C地址的基础上进行递增得到,比如,通过+1的方式等到;依次类推,在第i轮地址分配时,可以为第一从节点分配第一I2C地址。这样通过递增的方式,在多轮地址分配后,可以为每个从节点分配到一个I2C地址,且不同的从节点获得的I2C地址不同。应说明的是,当主节点采用其他预设分配策略(非递增分配策略)进行I2C地址分配时,配置I2C地址的过程与递增分配方式类似,不再详细描述。
示例性的,主节点发送第二命令,其中,第二命令包括第一I2C地址和写指示,写指示用于指示第一I2C地址是主节点在第i轮地址分配过程中,为从节点分配的I2C地址。同样的,本申请中第二命令的长度为一个字节,因此后续所提到的第二命令可以理解为第二字节,两者在本质上是一致的,不再区分。
可以理解的是,主节点是将第二命令发送到总线上,这个时候只有第一从节点响应总线,则主节点将第一I2C地址发送到总线上即可将第一I2C地址分配给第一从节点。具体地,主节点将第一I2C地址作为主节点与第一从节点之间的传输数据发送到总线上,由于第一从节点在发送标识信息之前,主节点已指示了地址分配,故第一从节点在获取到第一I2C地址,可知道这部分数据是主节点为其分配的I2C地址。进一步地,现有I2C通信下的数据传输都是以一个字节(八比特)传输的,而I2C地址一般是七比特,为了能够尽可能的遵循现有的I2C通信过程,可以为第一I2C地址添加一个比特,组成一个字节。此外,由于为第一从节点分配第一I2C地址本质上是给第一从节点写入第一I2C地址,可以看做一个数据写入过程。故可以第一I2C地址添加一个第一写指示,得到第二命令。这样主节点就可以通过发送第二命令,将第一I2C地址分配给第一从节点。
可选地,主节点可以在第i次写过程中发送第一I2C地址。示例性的,由于从节点发送标识信息和为从节点分配I2C地址可以看做一个整体的数据传输过程。因此,主节点可以在第i次读过程的基础上继续发送第一I2C地址,也可以重新启动一个写过程发送第一I2C地址。相应地,第i次读过程和第i次写过程可以是同一次数据传输过程,也可以是不同次数据传输过程。同样的,该第i次读过程、第i次写过程以及第一读过程是在同一个I2C命令时序下进行的,I2C命令时序与I2C通信协议下的命令时序匹配。
可选地,当第i次读过程和第i次写过程是同一次数据传输过程时,上述主节点获取到第一从节点的完整标识信息,回复了第二确认字符后,并不会重启一个写过程去发送第一I2C地址,也就是说,主节点不会通过重复起始位Sr,重启一个写过程,而是继续在第i次读过程下发送第一I2C地址,即将第i次读过程和第i次写过程作为一次数据传输过程。这种情况下,可以将第i次读过程和第i次写过程统称为第i次数据传输过程,即主节点在第i次数据传输过程中获取到了第一从节点的标识信息,以及在第i次数据传输过程中为第一从节点分配了第一I2C地址。
具体地,相比图6示出的子I2C命令时序,如图14所示,第i次数据传输过程除了包含第i次读过程中的命令之外,还包含第i次写过程的命令,即第一I2C地址、写指示和第三确认字符。结合图14来看,主节点在第i次数据传输过程中获取到第一从节点的标识信息,回复了确认字符后,可以继续发送数据,即在第i次数据传输过程中将第一I2C地址作为数据进行发送,只需要在主节点和从节点两端预先配置,主节点在获取到标识信息,回复了确认字符后,所发送的数据是为从节点分配的I2C地址,这样主节点就可以在第i次数据传输过程中获取到第一从节点的标识信息,以及为第一从节点分配地址。当第一从节点在第i次数据传输过程程中接收到主节点发送的第一I2C地址后,会发送第三确认字符,通过第三确认字符通知主节点数据接收完成,也即指示主节点获取到上述第一I2C地址,并且第一从节点在获取到该第一I2C地址之后,不再参与后续轮次的地址分配过程。相应地,主节点在获取到该第三确认字符之后,可确定第i轮次的地址分配完成,则启动第i+1轮次的地址分配过程。
可选地,当第i次读过程和第i次写过程是不同次的数据传输过程,由于为第一从节点分配I2C地址本质上可以看做一个数据写入过程。在实际应用中,主节点获取到标识信息之后,可以遵循现有的I2C命令时序重新启动一个写过程,即第i次写过程,在第i次写过程中发送第一I2C地址。
如图15所示,第i次写过程的命令包含重复起始位Sr、广播地址、第四确认字符、第一I2C地址以及第五确认字符。结合图15,在分配第一I2C地址时,主节点先发送重复起始位Sr,以开始第i次写过程;然后,主节点发送广播地址,第一从节点在获取到广播地址后,可响应第i次写过程中的寻址,回复第四确认字符;然后,主节点获取到第四确认字符后,发送第一I2C地址,即主节点为第一从节点分配第一I2C地址。相应地,第一从节点获取到第一I2C地址之后,会发送第五确认字符,通过第五确认字符通知主节点获取到第一I2C地址,以便主节点结束第i轮地址分配,开启第i+1轮地址分配。
应说明的是,上述地址分配命令、每轮地址分配中的第一命令和第二命令是在同一个I2C命令时序下发送的,也就是说上述第一读过程、每轮地址分配过程都是在同一个I2C命令时序下实现的。具体地,主节点首先以一个起始位S启动第一读过程,然后以一个重复启动位Sr启动每轮地址分配过程,从而完成每轮地址分配。
在本申请的一个实施方式中,若主节点中预先配置有上述N个从节点的数量,则主节点感知到进行了N轮地址分配后,就可确定对N个从节点中每个从节点完成了地址分配。则在为第N个从节点分配了I2C地址后,主节点可以发送结束信号P,以指示N个从节点完成I2C地址分配。示例性的,当在第N轮地址分配过程中,从节点向主节点发送了针对I2C地址写入的确认字符后,主节点可以发送结束信号P,指示N个从节点完成I2C地址分配。
在本申请的另一个实施方式中,实际应用中,主节点不一定清楚从节点的数量,比如,未预先配置从节点的数量,或者,即使配置有从节点的数量,但是,此次地址分配时,由于一些特殊情况可能无法知道当前参与地址分配的从节点的数量,比如,某些从节点存在故障,或者从节点没上电,它们就没有参与仲裁和地址分配的过程,则实际需要分配地址的从节点数量会少于预先配置的数量,这时候主节点就无法按照配置的从节点的数量来分配地址,而是在分配完实际数量的地址后,自主感知是否分配完成,从而决定是否结束命令时序。
具体地,在完成第i轮地址分配后,主节点不会去关注是否完成地址分配过程,而是继续执行第i+1轮地址分配。示例性的,在完成第i轮地址分配后,主节点发送第三命令,其中,第三命令包括上述第一地址和读指示,以通过第三命令指示未分配到I2C地址的从节点发送标识信息;主节点发送第三命令之后,若未获取到从节点的标识信息,而是获取到否定确认。例如,若主节点在发送了第三命令后,获取到总线的电平一直为高电平,即总线上的数据一直为0,则可确定获取到否定确认,因此主节点可确定第i+1轮地址分配中没有从节点需要分配地址,也就是说,在完成i轮地址分配后,所有的从节点都分配到了地址,这个时候主节点可发送结束信号P。若主节点发送第三命令之后,获取到从节点的标识信息,则可以为该标识信息的从节点分配地址。然后,继续下一轮地址分配,直到在某轮地址分配过程中未获取到从节点的标识信息,发送结束信号P,结束I2C命令时序。
总的来说,主节点在完成当前轮次的地址分配后,不去关注有没有为每个从节点分配到地址,而是继续下一轮地址分配,若在下一轮地址分配中未获取到从节点的标识信息,则说明当前轮次已经为所有的从节点分配到了地址,则可以结束地址分配过程。
进一步地,主节点在每轮地址分配过程中,只是为所获取到的标识信息的从节点分配了I2C地址,但是,这个从节点具体是N个从节点中的哪个从节点,主节点并不知道,也就是说,主节点并不知道这个标识信息所对应的从节点挂载在总线上哪个位置。因此,主节点在为每个从节点分配好I2C地址之后,可以将标识信息与I2C地址进行关联存储。这样后续主节点需要与某个从节点进行通信时,可基于从节点的设备标识,获取该从节点的I2C地址,并基于该I2C地址与该从节点进行通信。
表1示出了上述N个从节点为总线上所有从节点时,标识信息与从节点的I2C地址的对应关系。
表1:
标识信息1 | I<sup>2</sup>C地址1 |
标识信息2 | I<sup>2</sup>C地址2 |
…… | …… |
标识信息N | I<sup>2</sup>C地址N |
表2示出了上述N个从节点为总线上所有从节点中类型相同的从节点的标识信息,与从节点的I2C地址的对应关系。
表2:
标识信息1_1 | I<sup>2</sup>C地址1_1 |
标识信息1_2 | I<sup>2</sup>C地址1_2 |
…… | …… |
标识信息1_a1 | I<sup>2</sup>C地址1_a1 |
标识信息2_1 | I<sup>2</sup>C地址2_1 |
标识信息2_2 | I<sup>2</sup>C地址2_2 |
…… | …… |
标识信息2_a2 | I<sup>2</sup>C地址2_a2 |
…… | …… |
标识信息N_1 | I<sup>2</sup>C地址N_1 |
标识信息N_2 | I<sup>2</sup>C地址N_2 |
…… | …… |
标识信息N_aN | I<sup>2</sup>C地址N_aN |
总的来看,当上述N个从节点为总线上所有的从节点时,可以通过如图16或图17所示的主节点和N个从节点之间完整的命令时序完成I2C地址分配过程。
下面结合图16或图17说明地址分配的全过程。
如图16或图17所示,首先主节点发送起始位S,启动第一读过程,然后在第一读过程中发送广播地址和写指示;然后再发送一个广播地址,通过在第一读过程中发送两次广播地址指示主节点将要进行地址分配;从节点在获取到两次广播地址之后,回复确认字符A,这样主节点就完成了指示地址分配的过程。然后,主节点发送重复起始位Sr,启动第一轮地址分配过程,然后在第一轮地址分配过程中发送一个字节,该字节包含有广播地址以及读指示,由于在第一读过程中已指示主节点将要进行地址分配,这个时候每个从节点获取到读指示后,就会按顺序在每个仲裁周期内发送标识信息的一个比特;当该从节点为高优先级的从节点时,下一个仲裁周期内会继续发送标识信息的下一个比特,直至M个仲裁周期后,有一个从节点会将完整的标识信息发送到数据总线上。相应地,主节点可以通过总线获取到这个从节点的标识信息,如图16或图17所示,主节点在第一轮地址分配中获取到了从节点1的标识信息,并回复确认字符A,指示主节点已经获取到一个完整的标识信息。然后主节点为从节点1分配一个I2C地址,即发送一个字节,该字节中包含有从节点1的I2C地址和写指示,通过该字节将I2C地址分配给从节点1。当从节点1获取到该字节后,会发送一个确认字符A,通过该确认字符A指示主节点已获取到I2C地址,便于主节点确定第一轮地址分配完成,以启动下一轮的地址分配。相应地,主节点获取到该确认字符A后,会开启下一轮的地址分配。在下一轮地址分配过程中,仍然寻址上述N个从节点地址,但是已经分配了I2C地址的从节点,不再参与下一轮地址分配,也就不会发送标识信息,仅有剩余未分配到I2C地址的从节点参与下一轮地址分配。这样经过N轮地址分配之后,可以为每个从节点分配一个I2C地址。
可选地,若主节点中预先配置有从节点的数量,则在完成N个从节点的地址分配后,如图16所示,主节点可以直接发送停止信号P,释放总线,完成地址分配的全过程。
可选地,若主节点中未配置从节点的数量,也就是主节点不主动感知是否完成地址分配,如图17所示,主节点每轮分配了地址之后,会继续执行地址分配过程。当在第N轮完成地址分配后,主节点指示从节点发送标识信息后,获取到了否定确认NACK,则主节点这个时候才确定已为N个从节点全部分配了地址,没有从节点需要参与地址分配过程了,然后主节点才会发送停止信号P,释放总线,完成地址分配的全过程。
总的来看,当上述N个从节点为类型相同的从节点时,可以通过如图18或图19所示的主节点和N个从节点之间完整的命令时序完成I2C地址分配过程。
下面结合图18或图19说明地址分配的全过程。
如图17或图18所示,首先主节点发送起始位S,启动第一读过程,然后在第一读过程中发送类别地址和写指示;然后再发送一个类别地址,通过在第一读过程中发送两次类别地址指示主节点将要进行地址分配;从节点在获取到两次类别地址之后,回复确认字符A,这样主节点就完成了指示地址分配的过程。然后,主节点发送重复起始位Sr,启动第一轮地址分配过程,然后在第一轮地址分配过程中发送一个字节,该字节包含有类别地址以及读指示,由于在第一读过程中已指示主节点将要进行地址分配,这个时候每个从节点获取到读指示后,就会按顺序在每个仲裁周期内发送标识信息的一个比特;当该从节点为高优先级的从节点时,下一个仲裁周期内会继续发送标识信息的下一个比特,直至M个仲裁周期后,有一个从节点会完整的将标识信息发送到数据总线上。相应地,主节点可以通过总线获取到这个从节点的标识信息,如图17或图18所示,主节点在第一轮地址分配中获取到了从节点1的标识信息,并回复一个确认字符A,指示主节点已经获取到一个完整的标识信息。然后主节点为从节点1分配一个I2C地址,即发送一个字节,该字节中包含有从节点1的I2C地址和写指示,通过这个字节将I2C地址分配给从节点1。当从节点1获取到该字节后,会发送一个确认字符A,通过该确认字符A指示主节点已获取到I2C地址,便于主节点确定第一轮地址分配完成,以启动下一轮的地址分配。相应地,主节点获取到该确认字符A后,会可以开启下一轮的地址分配。在下一轮地址分配过程中,仍然寻址上述N个从节点地址,但是已经分配了I2C地址的从节点,不再参下一轮地址分配,也就不会发送标识信息,仅有剩余未分配到I2C地址的从节点参与下一轮地址分配。这样经过N轮地址之后,可以为每个从节点分配一个I2C地址。
可选地,若主节点中预先配置有从节点的数量,则在完成N个从节点的地址分配后,如图18所示,主节点可以直接发送停止信号P,释放总线,完成地址分配的全过程。
可选地,若主节点中未配置从节点的数量,也就是主节点不主动感知是否完成地址分配,如图19所示,主节点每轮分配了地址之后,会继续执行地址分配过程。当在第N轮完成地址分配后,主节点指示从节点发送标识信息后,获取到了否定确认,则主节点这个时候才确定已为N个从节点全部分配了地址,没有从节点需要参与地址分配过程了,然后主节点才会发送停止信号P,释放总线,完成地址分配的全过程。
参阅图20,图20为本申请实施例提供的一种从节点的示意图。从节点2000包括收发单元2001和处理单元2002。
收发单元2001,用于在进行第i轮I2C地址分配时,基于第一从节点的标识信息,通过I2C总线向主节点发送比特信号;
处理单元2002,用于若该从节点发送的比特信号与其他从节点发送的比特信号经过仲裁后,该从节点最先将标识信息发送给主节点,则该从节点确定为目标从节点;
收发单元2001,还用于从主节点获取第一I2C地址。
关于上述收发单元2001和处理单元2002更详细的描述,可参考上述方法实施例中对从节点的相关描述,在此不再说明。
参阅图21,图21为本申请实施例提供的一种主节点的示意图。主节点2100包括收发单元2101和处理单元2102。
处理单元2102,用于在进行第i轮I2C地址分配时,获取ki个从节点的标识信息,其中,ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点;
收发单元2101,用于获取ki个从节点基于标识信息,通过I2C总线所发送的比特信号;向第一从节点发送第一I2C地址;其中,第一从节点为ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给主节点的从节点。
关于上述收发单元2101和处理单元2102更详细的描述,可参考上述方法实施例中对主节点的相关描述,在此不再说明。
参阅图22,图22为本申请实施例提供的一种电子设备的示意图。电子设备2200可以为上述从节点2000,或者从节点2000中的芯片或芯片系统;或者,电子设备2200可以为主节点2100或者主节点2100中的芯片或芯片系统。
电子设备2200包括存储器2201、处理器2202、通信接口2203以及总线2204。其中,存储器2201、处理器2202、通信接口2203通过总线2204实现彼此之间的通信连接。
存储器2201可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器2201可以存储程序;当存储器2201中存储的程序被处理器2202执行时,处理器2202和通信接口2203用于执行本申请实施例I2C分配方法中的各个步骤。
处理器2202可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(graphics processing unit,GPU)或者一个或多个集成电路,用于执行相关程序,以实现本申请方法实施例的多数据远端读取方法或者数据远端写入方法。
处理器2202还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的数据远端读取方法或者数据远端写入方法中的各个步骤可以通过处理器2202中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2202还可以是通用处理器、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器2201,处理器2202读取存储器2201中的信息,以执行多数据远端读取方法或者数据远端写入方法的各个步骤。
通信接口2203可以为收发器一类的收发装置,来实现电子设备2200与其他设备或通信网络之间的通信;通信接口2203也可以为输入-输出接口,来实现电子设备2200与输入-输出设备之间的数据传输,其中,输入-输出设备包括但不限于键盘、鼠标、显示屏、U盘以及硬盘。总线2204可包括在装置电子设备2200各个部件(例如,存储器2201、处理器2202、通信接口2203)之间传送信息的通路。
应注意,尽管图22所示电子设备2200仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,电子设备2200还包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,电子设备2200还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,电子设备2200也可仅仅包括实现本申请实施例所必须的器件,而不必包括图22中所示的全部器件。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。在本申请的文字描述中,字符“/”,一般表示前后关联对象是一种“或”的关系;在本申请的公式中,字符“/”,表示前后关联对象是一种“相除”的关系。
可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (18)
1.一种I2C地址分配方法,应用于从节点,其特征在于,所述方法包括:
在进行第i轮I2C地址分配时,第一从节点基于所述第一从节点的标识信息,通过I2C总线向主节点发送比特信号;
若所述第一从节点发送的比特信号与其他从节点发送的比特信号经过仲裁后,所述第一从节点最先将标识信息发送给所述主节点,则所述第一从节点确定为目标从节点;
所述第一从节点从所述主节点获取第一I2C地址。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
步骤S1:在第j次仲裁时,所述第一从节点通过I2C总线向所述主节点发送标识信息中的第j个比特信号;所述第一从节点为第j-1次仲裁时获得高优先级的从节点中的一个从节点;
步骤S2:所述第一从节点基于所述第j个比特信号,以及第j次仲裁时所述I2C总线上的数据,确定所述第一从节点在第j次仲裁时的优先级,所述第一从节点在第j次仲裁时的优先级为高优先级或者低优先级;所述I2C总线上的数据由在第j-1次仲裁时获得高优先级的从节点在第j次仲裁时所发送的比特信号共同决定的;
赋值j=j+1,并重复上述步骤S1~步骤S2,在经过多次仲裁后,若所述第一从节点在每次仲裁时的优先级均为高优先级,所述第一从节点最先将标识信息发送给所述主节点。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述第一从节点在所述多次仲裁中的任意一次仲裁时的优先级为低优先级,则所述第一从节点退出下一次仲裁。
4.根据权利要求2或3所述的方法,其特征在于,所述第一从节点基于所述第j个比特信号,以及第j次仲裁时所述I2C总线上的数据,确定所述第一从节点在第j次仲裁时的优先级,包括:
若所述第j个比特信号与第j次仲裁时所述I2C总线上的数据相同,所述第一从节点确定所述第一从节点在第j次仲裁时的优先级为高优先级;
若所述第j个比特信号与第j次仲裁时所述I2C总线上的数据不同,所述第一从节点确定所述第一从节点在第j次仲裁时的优先级为低优先级。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述第一从节点基于所述第一从节点的标识信息,通过I2C总线向主节点发送比特信号之前,所述方法还包括:
所述第一从节点从所述主节点获取第一命令,所述第一命令包括第一地址和读指示,所述第一地址用于寻址所述第一从节点;所述读指示用于指示所述第一从节点发送标识信息,以使所述第一从节点基于所述第一从节点的标识信息,通过所述I2C总线向所述主节点发送比特信号。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一从节点从所述主节点获取第一I2C地址,包括:
所述第一从节点从所述主节点获取第二命令,其中,所述第二命令包括所述第一I2C地址和写指示;
所述第一从节点响应于所述写指示,将所述第一I2C地址作为所述主节点为所述第一从节点分配的I2C地址。
7.根据权利要求1-6中任一项所述的方法,其特征在于,在进行第一轮I2C地址分配之前,所述方法还包括:
所述第一从节点从所述主节点获取地址分配命令,其中,所述地址分配命令用于指示所述主节点将要进行I2C地址分配,以使所述第一从节点获取到第一命令中的读指示时,基于所述第一从节点的标识信息,通过I2C总线向所述主节点发送比特信号。
8.根据权利要求5-7中任一项所述的方法,其特征在于,
所述第一命令是所述主节点在第i次读过程中发送的;所述第二命令是所述主节点在第i次写过程中发送的;所述第i次读过程为同一次数据传输过程或者不同次数据传输过程;
所述地址分配命令是所述主节点在第一读过程中发送的;
其中,所述第i次读过程、所述第i次写过程以及所述第一读过程是在同一个I2C命令时序下进行的,所述I2C命令时序与I2C通信协议下的命令时序匹配。
9.一种I2C地址分配方法,其特征在于,所述方法应用于主节点,所述方法包括:
在进行第i轮I2C地址分配时,获取ki个从节点的标识信息,其中,所述ki个从节点为进行前i-1轮I2C地址分配之后,N个从节点中未分配到I2C地址的从节点;
获取所述ki个从节点基于标识信息,通过I2C总线所发送的比特信号;
向第一从节点发送第一I2C地址;其中,所述第一从节点为所述ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给所述主节点的从节点。
10.根据权利要求9所述的方法,其特征在于,所述获取ki个从节点的标识信息,包括:
发送第一命令,其中,所述第一命令包括第一地址和读指示,所述第一地址用于寻址所述ki个从节点,所述读指示用于指示所述ki个从节点发送标识信息,以使所述ki个从节点基于标识信息,通过I2C总线发送比特信号。
11.根据权利要求9或10所述的方法,其特征在于,所述向所述第一从节点发送第一I2C地址,包括:
发送第二命令,其中,所述第二命令包括所述第一I2C地址和写指示,所述写指示用于将所述第一I2C地址分配给所述第一从节点。
12.根据权利要求9-11中任一项所述的方法,其特征在于,所述方法还包括:
发送地址分配命令,所述地址分配命令用于指示所述主节点将要进行I2C地址分配,以指示所述ki个从节点获取到第一命令中的读指示时,基于标识信息,通过I2C总线发送比特信号。
13.根据权利要求10-12中任一项所述的方法,其特征在于,
所述第一命令是所述主节点在第i次读过程中发送的;
所述第二命令是所述主节点在第i次写过程中发送的;
所述地址分配命令是所述主节点在第一读过程中发送的;
所述第i次读过程、所述第i次写过程以及所述第一读过程是在同一个I2C命令时序下进行的;所述I2C命令时序与I2C通信协议下的命令时序匹配。
14.根据权利要求9-13中任一项所述的方法,其特征在于,所述方法还包括:
若所述主节点未获取到ki-1个从节点的标识信息,且获取到否定确认时,发送结束信号,所述结束信号用于指示所述主节点为所述N个从节点完成I2C地址分配,其中,所述ki-1个从节点为所述ki个从节点中除所述第一从节点之外的从节点。
15.一种I2C地址分配方法,其特征在于,所述方法应用于计算设备,所述计算设备包括主节点和N个从节点,所述主节点和所述N个从节点之间通过I2C总线连接;所述方法包括:
在进行第i轮I2C地址分配时,所述主节点获取ki个从节点的标识信息;其中,所述ki个从节点为进行前i-1轮I2C地址分配之后,所述N个从节点中未分配到I2C地址的从节点;
所述ki个从节点中的每个从节点基于标识信息,通过所述I2C总线向所述主节点发送标识信息的比特信号;
所述ki个从节点中的每个从节点基于发送的比特信号,与其他从节点进行仲裁;
所述主节点为第一从节点分配第一I2C地址,所述第一从节点为所述ki个从节点基于发送的比特信号进行仲裁时最先将标识信息发送给所述主节点的从节点。
16.根据权利要求15所述的方法,其特征在于,所述ki个从节点中的每个从节点基于标识信息,通过所述I2C总线向所述主节点发送比特信号,包括:
在第j次仲裁时,第一从节点向所述主节点发送标识信息的第j个比特信号,其中,所述第一从节点为所述ki个从节点中在第j-1次仲裁时获得高优先级的从节点中的任意一个;
所述ki个从节点中的每个从节点基于发送的比特信号,与其他从节点进行仲裁,包括:
所述第一从节点基于所述第j个比特信号,以及在第j次仲裁时所述I2C总线上的数据,确定所述第一从节点在第j次仲裁时的优先级,其中,所述第一从节点在第j次仲裁时的优先级为高优先或者低优先级;
在进行多次仲裁后,若所述第一从节点在每次仲裁时的优先级均为高优先级,所述第一从节点最先将标识信息发送给所述主节点;若所述第一从节点在所述多次仲裁中的任意一次仲裁时的优先级为低优先级,则所述第一从节点退出下一次仲裁。
17.根据权利要求16所述的方法,其特征在于,所述第一从节点基于所述第j个比特信号,以及在第j次仲裁时所述I2C总线上的数据,确定所述第一从节点在第j次仲裁时的优先级,包括:
若所述第j个比特信号与第j次仲裁时所述I2C总线上的数据相同,所述第一从节点确定所述第一从节点在第j次仲裁时的优先级为高优先级;
若所述第j个比特信号与第j次仲裁时所述I2C总线上的数据不同,所述第一从节点确定所述第一从节点在第j次仲裁时的优先级为低优先级。
18.一种计算设备,其特征在于,所述计算设备包括如权利要求1~8中任一项所述的第一从节点;或者所述计算设备包括如权利要求9~14中任一项所述的主节点;或者所述计算设备包括如权利要求15~17中任一项所述的计算设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211150775.8A CN115589398A (zh) | 2022-09-21 | 2022-09-21 | I2c地址分配方法及计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211150775.8A CN115589398A (zh) | 2022-09-21 | 2022-09-21 | I2c地址分配方法及计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115589398A true CN115589398A (zh) | 2023-01-10 |
Family
ID=84778033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211150775.8A Pending CN115589398A (zh) | 2022-09-21 | 2022-09-21 | I2c地址分配方法及计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115589398A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117544598A (zh) * | 2024-01-03 | 2024-02-09 | 成都电科星拓科技有限公司 | 一种i2c总线地址自动分配方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU1369683A (en) * | 1982-05-07 | 1983-11-10 | Digital Equipment Corporation | Arbitration technique for serial buses |
KR20040019178A (ko) * | 2002-08-26 | 2004-03-05 | 엘지전자 주식회사 | 데이터 버스 중재 방법 |
US20130148753A1 (en) * | 2010-10-08 | 2013-06-13 | Honeywell International Inc. | Method for digital communication between a plurality of nodes connected by a serial field bus and corresponding system, in particular a field control system or field surveyance system |
CN103210382A (zh) * | 2010-10-20 | 2013-07-17 | 高通股份有限公司 | 基于总线装置健康信息和相关功率管理而仲裁通信总线上的总线事务 |
CN110290231A (zh) * | 2019-06-24 | 2019-09-27 | 广东美的暖通设备有限公司 | 分配方法、分配装置、中央空调系统和存储介质 |
CN112765072A (zh) * | 2021-01-28 | 2021-05-07 | 北京方天长久科技股份有限公司 | 一种串行互联总线数据帧格式及传输方法 |
CN114741341A (zh) * | 2022-03-01 | 2022-07-12 | 西安电子科技大学 | 一种实现Crossbar结构仲裁的方法、系统及存储介质 |
-
2022
- 2022-09-21 CN CN202211150775.8A patent/CN115589398A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU1369683A (en) * | 1982-05-07 | 1983-11-10 | Digital Equipment Corporation | Arbitration technique for serial buses |
KR20040019178A (ko) * | 2002-08-26 | 2004-03-05 | 엘지전자 주식회사 | 데이터 버스 중재 방법 |
US20130148753A1 (en) * | 2010-10-08 | 2013-06-13 | Honeywell International Inc. | Method for digital communication between a plurality of nodes connected by a serial field bus and corresponding system, in particular a field control system or field surveyance system |
CN103210382A (zh) * | 2010-10-20 | 2013-07-17 | 高通股份有限公司 | 基于总线装置健康信息和相关功率管理而仲裁通信总线上的总线事务 |
CN110290231A (zh) * | 2019-06-24 | 2019-09-27 | 广东美的暖通设备有限公司 | 分配方法、分配装置、中央空调系统和存储介质 |
CN112765072A (zh) * | 2021-01-28 | 2021-05-07 | 北京方天长久科技股份有限公司 | 一种串行互联总线数据帧格式及传输方法 |
CN114741341A (zh) * | 2022-03-01 | 2022-07-12 | 西安电子科技大学 | 一种实现Crossbar结构仲裁的方法、系统及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117544598A (zh) * | 2024-01-03 | 2024-02-09 | 成都电科星拓科技有限公司 | 一种i2c总线地址自动分配方法 |
CN117544598B (zh) * | 2024-01-03 | 2024-03-29 | 成都电科星拓科技有限公司 | 一种i2c总线地址自动分配方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102645211B1 (ko) | 통신 장치, 통신 방법, 프로그램, 및, 통신 시스템 | |
US10204072B2 (en) | Method for automatically allocating addresses to similar bus users | |
KR910001790B1 (ko) | 디지탈 컴퓨터 시스템에서의 통신로 제어 할당용 중재 장치 및 이의 중재 방법 | |
US8842747B2 (en) | Method for digital communication between a plurality of nodes connected by a serial field bus and corresponding system, in particular a field control system or field surveyance system | |
JP5607784B2 (ja) | Canオープンネットワークの構成方法、スレーブ装置の動作方法、plc装置制御方法、及びplc装置制御システム | |
JPH0762837B2 (ja) | アドレス自動割り当て方法 | |
US4313196A (en) | Priority system with low speed request bus | |
JP2009508247A (ja) | バス調停に関する方法及びシステム | |
CN115589398A (zh) | I2c地址分配方法及计算设备 | |
JPH06324987A (ja) | データ処理方式 | |
CN114500472B (zh) | 一种rs485通信地址自动分配的方法 | |
JPH033257B2 (zh) | ||
CN107566543B (zh) | 一种节点标识设置方法和装置 | |
KR102303424B1 (ko) | 랜덤 액세스 메모리를 포함하는 하나 이상의 처리 유닛을 위한 직접 메모리 액세스 제어 장치 | |
JP2018206268A (ja) | 通信装置、通信方法、プログラム、および、通信システム | |
CN113923073B (zh) | Can总线分配id的方法及can总线系统 | |
CN115334041A (zh) | 一种主从站通讯设备自动分配地址的方法、主站、从站和系统 | |
US11119955B2 (en) | Communication device, communication method, program, and communication system | |
US7506086B2 (en) | Electronic network with identification code generation and assignment | |
TWI635729B (zh) | 串聯通訊系統中的地址自動分配方法 | |
TWI763612B (zh) | 高速周邊元件互連的事務層電路及其操作方法 | |
WO2024009633A1 (ja) | コントローラ、制御方法及びプログラム | |
US20240126710A1 (en) | Semiconductor device, bus control circuit and bus control method | |
CN113938467A (zh) | 机器节点地址分配及状态确认方法及相关设备 | |
CN116737469A (zh) | 一种隔离数据传输故障的方法、装置、介质以及服务器 |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20231109 Address after: 10/F, Chuangzhi Tiandi Building, Dongshigeng Street, Zhongdao East Road, Longzihu Wisdom Island, Zhengdong New District, Zhengzhou City, Henan Province, 450000 Applicant after: Henan Kunlun Technology Co.,Ltd. Address before: 450000 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu smart Island, Zhengdong New District, Zhengzhou City, Henan Province Applicant before: Super fusion Digital Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right |