一种I2C总线的仲裁方法及系统转让专利

申请号 : CN201710948971.2

文献号 : CN107766267B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林宁亚

申请人 : 郑州云海信息技术有限公司

摘要 :

本发明提供了一种I2C总线的仲裁方法及系统,二者均在I2C总线当前空闲时将I2C总线的控制权分配给当前主控器件,而在I2C总线当前非空闲时基于接收到的状态寄存器当前反馈的相应标志位的值,实现对上述当前主控器件的总线控制权的统筹分配;且二者均实时采集各当前确权主控器件的I2C总线通信状态,并在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位;所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件。本发明能够实现多主控器件状态下I2C总线控制权的自由切换,提高了I2C总线的通信速率、通信稳定性和通信质量。

权利要求 :

1.一种I2C总线的仲裁方法,应用在网络设备中,所述网络设备包括至少两个主控器件,所述的I2C总线配设有总线仲裁单元,其特征在于,所述的总线仲裁单元配置有一状态寄存器,所述的状态寄存器定义有BUSY标志位、WAIT标志位和ERROR标志位,其中BUSY标志位用于指示I2C总线占用状态、WAIT标志位用于指示I2C总线等待释放状态、ERROR标志位用于指示I2C总线故障状态;该I2C总线的仲裁方法包括步骤:总线仲裁单元接收当前主控器件发送的I2C总线控制请求;

总线仲裁单元在接收到当前主控器件发送的I2C总线控制请求后,判定I2C总线当前是否空闲;

总线仲裁单元在判定I2C总线当前空闲后,将I2C总线的控制权分配给上述当前主控器件,并拉高上述状态寄存器的BUSY标志位;否则总线仲裁单元访问所述的状态寄存器,并在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配;

总线仲裁单元实时采集各当前确权主控器件的I2C总线通信状态,并在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位;所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件;

在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:总线仲裁单元在接收到上述状态寄存器回应的BUSY标志位的值为该标志位被拉高后对应的值、回应的WAIT标志位和ERROR标志位的值均为初始值后,拉高所述状态寄存器的WAIT标志位,并向上述当前主控器件发送等待被分配I2C总线控制权的回应;

总线仲裁单元在接收到上述状态寄存器回应的BUSY标志位和WAIT标志位的值对应为相应标志位被拉高后各自对应的相应值、ERROR标志位回应的值为初始值后,向上述当前主控器件发送拒绝分配I2C总线控制权的回应;

总线仲裁单元在接收到上述状态寄存器回应的ERROR标志位的值为该标志位被拉高后对应的值后,向上述当前主控器件发送拒绝分配I2C总线控制权的回应。

2.根据权利要求1所述的I2C总线的仲裁方法,其特征在于,进一步地,总线仲裁单元在向上述当前主控器件发送等待被分配I2C总线控制权的回应后,并在判定当前确权主控器件的I2C总线通信结束后,释放上述状态寄存器的BUSY标志位,并将I2C总线的控制权分配给该当前主控器件;且在上述将I2C总线的控制权分配给该当前主控器件后,释放上述状态寄存器的WAIT标志位并拉高上述状态寄存器的BUSY标志位。

3.一种I2C总线的仲裁系统,应用在网络设备中,所述网络设备包括至少两个主控器件,所述的I2C总线配设有总线仲裁单元,其特征在于,所述的总线仲裁单元配置有一状态寄存器,所述的状态寄存器定义有BUSY标志位、WAIT标志位和ERROR标志位,其中BUSY标志位用于指示I2C总线占用状态、WAIT标志位用于指示I2C总线等待释放状态、ERROR标志位用于指示I2C总线故障状态;所述的总线仲裁单元包括:第一收发模块,用于接收当前主控器件发送的I2C总线控制请求;

第一判定模块,用于在第一收发模块接收到当前主控器件发送的I2C总线控制请求后,判定I2C总线当前是否空闲;

第一分配模块,用于在第一判定模块判定I2C总线当前空闲时,将所述I2C总线的控制权分配给上述当前主控器件;还在将所述I2C总线的控制权分配给上述当前主控器件后,用于拉高状态寄存器的BUSY标志位;

第二分配模块,用于在第一判定模块判定所述I2C总线当前为非空闲时,访问所述的状态寄存器;还用于在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配;

第二判断模块,与所述的第一分配模块和第二分配模块相连,用于实时采集各当前确权主控器件的I2C总线通信状态;并用于在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位;所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件;

所述的第二分配模块,在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:在接收到上述状态寄存器回应的BUSY标志位的值为该标志位被拉高后对应的值、回应的WAIT标志位和ERROR标志位的值均为初始值后,用于拉高所述状态寄存器的WAIT标志位,并用于向上述当前主控器件发送等待被分配I2C总线控制权的回应;

在接收到上述状态寄存器回应的BUSY标志位和WAIT标志位的值对应为相应标志位被拉高后各自对应的相应值、回应的ERROR标志位的值为初始值后,用于向上述当前主控器件发送拒绝分配I2C总线控制权的回应;

在接收到上述状态寄存器回应的ERROR标志位的值为该标志位被拉高后对应的值后,用于向上述当前主控器件发送拒绝分配I2C总线控制权的回应。

4.根据权利要求3所述的I2C总线的仲裁系统,其特征在于,

所述的第二分配模块,在其向上述当前主控器件发送等待被分配I2C总线控制权的回应,并在第二判断模块判定当前确权主控器件的I2C总线通信结束后,用于释放上述状态寄存器的BUSY标志位,并用于将I2C总线的控制权分配给该当前主控器件;还在上述将I2C总线的控制权分配给该当前主控器件后,用于释放上述状态寄存器的WAIT标志位,并用于拉高上述状态寄存器的BUSY标志位。

说明书 :

一种I2C总线的仲裁方法及系统

技术领域

[0001] 本发明涉及总线通信领域,具体是一种I2C总线的仲裁方法及系统。

背景技术

[0002] I2C(Inter-Integrated Circuit)总线,是由PHILIPS公司开发的两线式(串行数据(SDA)线和串行时钟(SCL)线)串行总线,通过串行数据(SDA)线和串行时钟(SCL)线在连接到总线的器件间传递信息,是同步通信的一种特殊形式,具有接口线少、控制方式简单、器件封装形式小、通信速率较高等优点,已成为微电子通信控制领域广泛采用的一种总线标准。
[0003] 申请公布号为“CN106155971A”的中国专利申请公开了一种I2C总线的仲裁方法,该方法包括:接收到第一主控器件发送的内部集成电路I2C总线控制请求后,向第二主控器件发送I2C总线释放请求,所述第二主控器件拥有所述I2C总线的控制权;若接收到所述第二主控器件发送的I2C总线释放响应,则向所述第一主控器件发送I2C总线控制响应;接收到所述第一主控器件发送的I2C总线控制应答后,将所述I2C总线的控制权分配给所述第一主控器件。该方案对于各个主控器件的I2C总线控制请求可以相对准确高效地进行仲裁,减少冲突产生的概率,从而减少主控器件获取仲裁结果的延时,有利于处理实时业务。
[0004] 可见,基于上述公开的方案,在多主控器件的I2C总线链路中,让一个主控器件长期占用总线的控制权,即使在没有数据发送任务时,该主控器件也会一直独占总线的控制权,直至另一个主控器件需要发送数据包时,才会通过仲裁模块申请释放总线的控制权,从而进行控制权的切换。这使得总线资源一直处于“非A即B”的被占用状态,造成了总线资源的极大浪费。
[0005] 另外,当一个主控器件长期占有总线的控制权,总线一旦出现异常,比如出现与地短接现象,上述公开的方案无法做出即时的判断,会认为是总线控制下的正常电平拉低,致使影响总线的稳定性。
[0006] 此为现有技术的不足之处。

发明内容

[0007] 本发明所要解决的技术问题是,针对现有技术的不足,提供一种I2C总线的仲裁方法及系统,用于实现多主控器件状态下总线控制权的自由切换,提高总线的通信稳定性和通信质量。
[0008] 为解决上述技术问题,本发明提供了一种I2C总线的仲裁方法,应用在网络设备中,所述网络设备包括至少两个主控器件,所述的I2C总线配设有总线仲裁单元,所述的总线仲裁单元配置有一状态寄存器,所述的状态寄存器定义有BUSY标志位、WAIT标志位和ERROR标志位,其中BUSY标志位用于指示I2C总线占用状态、WAIT标志位用于指示I2C总线等待释放状态、ERROR标志位用于指示I2C总线故障状态;该I2C总线的仲裁方法包括步骤:
[0009] 总线仲裁单元接收当前主控器件发送的I2C总线控制请求;
[0010] 总线仲裁单元在接收到当前主控器件发送的I2C总线控制请求后,判定I2C总线当前是否空闲;
[0011] 总线仲裁单元在判定I2C总线当前空闲后,将I2C总线的控制权分配给上述当前主控器件,并拉高上述状态寄存器的BUSY标志位;否则总线仲裁单元访问所述的状态寄存器,并在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配;
[0012] 总线仲裁单元实时采集各当前确权主控器件的I2C总线通信状态,并在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位;所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件。
[0013] 其中,在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:
[0014] 总线仲裁单元在接收到上述状态寄存器回应的BUSY标志位的值为该标志位被拉高后对应的值、回应的WAIT标志位和ERROR标志位的值均为初始值后,拉高所述状态寄存器的WAIT标志位,并向上述当前主控器件发送等待被分配I2C总线控制权的回应;
[0015] 总线仲裁单元在接收到上述状态寄存器回应的BUSY标志位和WAIT标志位的值对应为相应标志位被拉高后各自对应的相应值、回应的ERROR标志位的值为初始值后,向上述当前主控器件发送拒绝分配I2C总线控制权的回应;
[0016] 总线仲裁单元在接收到上述状态寄存器回应的ERROR标志位的值为该标志位被拉高后对应的值后,向上述当前主控器件发送拒绝分配I2C总线控制权的回应。
[0017] 进一步地,总线仲裁单元在向上述当前主控器件发送等待被分配I2C总线控制权的回应后,并在判定当前确权主控器件的I2C总线通信结束后,释放上述状态寄存器的BUSY标志位,并将I2C总线的控制权分配给该当前主控器件;且在上述将I2C总线的控制权分配给该当前主控器件后,释放上述状态寄存器的WAIT标志位并拉高上述状态寄存器的BUSY标志位。
[0018] 另外,本发明还提供了一种I2C总线的仲裁系统,应用在网络设备中,所述网络设备包括至少两个主控器件,所述的I2C总线配设有总线仲裁单元,所述的总线仲裁单元配置有一状态寄存器,所述的状态寄存器定义有BUSY标志位、WAIT标志位和ERROR标志位,其中BUSY标志位用于指示I2C总线占用状态、WAIT标志位用于指示I2C总线等待释放状态、ERROR标志位用于指示I2C总线故障状态;所述的总线仲裁单元包括:
[0019] 第一收发模块,用于接收当前主控器件发送的I2C总线控制请求;
[0020] 第一判定模块,用于在第一收发模块接收到当前主控器件发送的I2C总线控制请求后,判定I2C总线当前是否空闲;
[0021] 第一分配模块,用于在第一判定模块判定I2C总线当前空闲时,将所述I2C总线的控制权分配给上述当前主控器件;还在将所述I2C总线的控制权分配给上述当前主控器件后,用于拉高状态寄存器的BUSY标志位;
[0022] 第二分配模块,用于在第一判定模块判定所述I2C总线当前为非空闲时,访问所述的状态寄存器;还用于在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配;
[0023] 第二判断模块,与所述的第一分配模块和第二分配模块相连,用于实时采集各当前确权主控器件的I2C总线通信状态;并用于在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位;所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件。
[0024] 其中所述的第二分配模块,在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:
[0025] 在接收到上述状态寄存器回应的BUSY标志位的值为该标志位被拉高后对应的值、回应的WAIT标志位和ERROR标志位的值均为初始值后,用于拉高所述状态寄存器的WAIT标志位,并用于向上述当前主控器件发送等待被分配I2C总线控制权的回应;
[0026] 在接收到上述状态寄存器回应的BUSY标志位和WAIT标志位的值对应为相应标志位被拉高后各自对应的相应值、回应的ERROR标志位的值为初始值后,用于向上述当前主控器件发送拒绝分配I2C总线控制权的回应;
[0027] 在接收到上述状态寄存器回应的ERROR标志位的值为该标志位被拉高后对应的值后,用于向上述当前主控器件发送拒绝分配I2C总线控制权的回应。
[0028] 其中所述的第二分配模块,在其向上述当前主控器件发送等待被分配I2C总线控制权的回应,并在第二判断模块判定当前确权主控器件的I2C总线通信结束后,用于释放上述状态寄存器的BUSY标志位,并用于将I2C总线的控制权分配给该当前主控器件;还在上述将I2C总线的控制权分配给该当前主控器件后,用于释放上述状态寄存器的WAIT标志位,并用于拉高上述状态寄存器的BUSY标志位。
[0029] 与现有技术相比,本发明的优点在于:
[0030] (1)本发明适于在多主控器件的I2C总线链路中使用,且在每次判定相应主控器件的I2C总线通信结束后,通过收回该相应主控器件的I2C总线控制权的方式,能够避免I2C总线的控制权被一个主控器件长期占用的现象的发生,使得其他主控器件在需要通过I2C总线发送数据时,节省了通过仲裁模块申请释放总线的控制权的过程的使用,这在一定程度上节约了总线资源,也在一定程度上提高了通信的速度;
[0031] (2)本发明引入了与I2C总线配合使用的状态寄存器,在判定I2C总线当前非空闲后,通过访问所述的状态寄存器,并在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,从而在一定程度上提高了通信的稳定性与质量;
[0032] (3)本发明在当前主控器件已占用I2C总线的同时,可以给另一主控器件预先分配该I2C总线的控制权,从而能够实现多主状态下I2C总线的控制权的有序切换,这在一定程度上进一步提高了通信的稳定性与质量;
[0033] (4)本发明引入了状态寄存器的ERROR标志位,且在接收到上述状态寄存器回应的ERROR标志位的值为该标志位被拉高后对应的值后,判定总线故障,并向当前主控器件发送拒绝分配I2C总线控制权响应,这使得本发明在I2C总线故障时,能够即时作出判断,这在一定程度上确保了通信的稳定性与质量。
[0034] 由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。

附图说明

[0035] 图1为本发明所述I2C总线的仲裁方法在具有三个主控器件并行发送对I2C总线的控制请求情况下的具体实施方式;
[0036] 图2为本发明所述I2C总线的仲裁系统的结构框图示意图。

具体实施方式

[0037] 为使本发明的技术方案和优点更加清楚,下面将结合附图,对本发明的技术方案进行清楚、完整地描述。
[0038] 本发明的一种I2C总线的仲裁方法,应用在网络设备中,所述网络设备包括至少两个主控器件。所述的I2C总线配设有总线仲裁单元,所述的总线仲裁单元配置有状态寄存器,所述的状态寄存器定义有BUSY标志位、WAIT标志位和ERROR标志位,其中BUSY标志位用于指示I2C总线占用状态、WAIT标志位用于指示I2C总线等待释放状态、ERROR标志位用于指示I2C总线故障状态;该I2C总线的仲裁方法包括如下步骤S1-S4:
[0039] 步骤S1、总线仲裁单元接收当前主控器件发送的I2C总线控制请求。
[0040] 步骤S2、总线仲裁单元在上述步骤S1中接收到当前主控器件发送的I2C总线控制请求后,判定I2C总线当前是否空闲,且在判定I2C总线当前空闲后执行步骤S3,否则执行步骤S4。
[0041] 步骤S3、总线仲裁单元将I2C总线的控制权分配给上述当前主控器件,并拉高状态寄存器的BUSY标志位;
[0042] 步骤S4、总线仲裁单元访问所述的状态寄存器,并基于接收到上述状态寄存器当前反馈的相应标志位的值,实现对上述当前主控器件的总线控制权的统筹分配。
[0043] 其中,在上述步骤S4中,在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:
[0044] 在接收到上述状态寄存器回应的BUSY标志位的值为该标志位被拉高后对应的值后,拉高所述状态寄存器的WAIT标志位,并向上述当前主控器件发送等待被分配I2C总线控制权的回应;
[0045] 在接收到上述状态寄存器回应的BUSY标志位和WAIT标志位的值对应为相应标志位被拉高后各自对应的相应值后,向上述当前主控器件发送拒绝分配I2C总线控制权的回应;
[0046] 在接收到上述状态寄存器回应的ERROR标志位的值为该标志位被拉高后对应的值后,向上述当前主控器件发送拒绝分配I2C总线控制权的回应。
[0047] 进一步地,在向上述当前主控器件发送等待被分配I2C总线控制权的回应后,实时判定当前分配有I2C总线的控制权的相应主控器件的当前I2C总线通信是否结束;
[0048] 在判定上述当前I2C总线通信结束后,释放上述状态寄存器的BUSY标志位,并将I2C总线的控制权分配给该当前主控器件;
[0049] 在上述将I2C总线的控制权分配给该当前主控器件后,释放上述状态寄存器的WAIT标志位并拉高上述状态寄存器的BUSY标志位。
[0050] 另外,在判定I2C总线当前空闲后,将I2C总线的控制权分配给上述当前主控器件,并拉高状态寄存器的BUSY标志位,直至在判定上述当前主控器件对应的I2C总线通信结束后,控制所述的状态寄存器释放BUSY标志位。
[0051] 其中,所述的I2C总线的仲裁方法还包括:总线仲裁单元实时采集各当前确权主控器件的I2C总线通信状态,并在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位。所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件。
[0052] 具体地,以三个主控器件A、B、C为例,主控器件A、B、C并行发送对I2C总线的控制请求,如图1所示,具体如下:
[0053] 步骤q1、初始状态(I2C总线当前空闲)下,总线仲裁单元接收到主器件A发送的I2C总线控制请求;其中在初始状态下,状态寄存器定义的BUSY标志位、WAIT标志位和ERROR标志位的值依序为0、0和0;
[0054] 步骤q2、总线仲裁单元在接收到主器件A发送的I2C总线控制请求后,判定I2C总线当前是否空闲,且此时判定I2C总线当前空闲,执行步骤q3;
[0055] 步骤q3、总线仲裁单元将I2C总线的控制权分配给主控器件A,并拉高其配置的状态寄存器的BUSY标志位;之后执行步骤q4和q12;
[0056] 步骤q4、在主控器件A占有I2C总线的控制权的过程中,总线仲裁单元接收到主器件B发送的I2C总线控制请求;
[0057] 步骤q5、总线仲裁单元在接收到主器件B发送的I2C总线控制请求后,判定I2C总线当前是否空闲,此时判定I2C总线当前非空闲,之后执行步骤q6;
[0058] 步骤q6、总线仲裁单元访问上述状态寄存器,并在上述状态寄存器回应的BUSY标志位、WAIT标志位和ERROR标志位的值依序为1(即为该BUSY标志位被拉高后对应的值)、0和0时,执行步骤q7;且在上述状态寄存器回应ERROR标志位的值为1(即为该ERROR标志位被拉高后对应的值)时执行步骤q15;
[0059] 步骤q7、拉高所述状态寄存器的WAIT标志位,并向主控器件B发送等待被分配I2C总线控制权的回应,主控器件B进入等待状态;
[0060] 步骤q8、在主控器件A占有I2C总线的控制权、以及在上述步骤q7向主控器件B发送等待被分配I2C总线控制权的回应后,总线仲裁单元接收到主器件C发送的I2C总线控制请求;
[0061] 步骤q9、总线仲裁单元在接收到主器件C发送的I2C总线控制请求后,判定I2C总线当前是否空闲,此时判定I2C总线当前非空闲,之后执行步骤q10;
[0062] 步骤q10、总线仲裁单元访问所述的状态寄存器,并在该状态寄存器回应BUSY标志位的值为1、回应WAIT标志位的值为1以及回应ERROR标志位的值为0时,执行步骤q11;且在该状态寄存器回应ERROR标志位的值为1时,执行步骤q11;
[0063] 步骤q11、总线仲裁单元向上述主控器件C发送拒绝分配I2C总线控制权的回应;
[0064] 步骤q12、总线仲裁单元实时采集主控器件A的I2C总线通信状态,并在判定主控器件A的I2C总线通信结束后,执行步骤q13;
[0065] 步骤q13、收回主控器件A对I2C总线的控制权,并释放上述状态寄存器的BUSY标志位(该BUSY标志位恢复至初始状态),之后执行步骤q14;
[0066] 步骤q14、总线仲裁单元将I2C总线的控制权分配给主控器件B,之后控制上述状态寄存器释放WAIT标志位并拉高BUSY标志位;此时,WAIT标志位置0,BUSY标志位置1;
[0067] 步骤q15、向上述主控器件B发送拒绝分配I2C总线控制权的回应。
[0068] 其中,在上述主控器件B占有I2C总线的控制权的过程中,若总线仲裁单元再接收到其他主控器件发送的I2C总线控制请求,则重复执行上述主控器件B与C的控制过程。
[0069] 在本实施方式中,所涉及的判定主控器件的I2C总线通信结束的方法为:在主控器件当前被分配有I2C总线的控制权后,实时采集当前I2C总线对应串行数据(SDA)和串行时钟 (SCL)线中的各相应信号,在SCL线中信号处于高位时,若判定SDA线中信号由低位转为高位,则判定该当前主控器件的I2C总线通信结束。
[0070] 综上,可见本发明提供了一种高效的调度方法,提前将并行的主控器件进行排队处理,保证了总线资源的高效利用。同时检测总线是否异常,保证多主器件的正常运转。
[0071] 本发明还提供了一种I2C总线的仲裁系统,如图2所示,应用在网络设备中,所述网络设备包括至少两个主控器件(本实施方式以三个主控器件为例),所述的I2C总线配设有总线仲裁单元,所述的总线仲裁单元配置有一状态寄存器,所述的状态寄存器定义有BUSY标志位、WAIT标志位和ERROR标志位,其中BUSY标志位用于指示I2C总线占用状态、WAIT标志位用于指示I2C总线等待释放状态、ERROR标志位用于指示I2C总线故障状态;所述的总线仲裁单元包括:
[0072] 第一收发模块,用于接收当前主控器件发送的I2C总线控制请求;
[0073] 第一判定模块,用于在第一收发模块接收到当前主控器件发送的I2C总线控制请求后,判定I2C总线当前是否空闲;
[0074] 第一分配模块,用于在第一判定模块判定I2C总线当前空闲时,将所述I2C总线的控制权分配给上述当前主控器件;还在将所述I2C总线的控制权分配给上述当前主控器件后,用于拉高状态寄存器的BUSY标志位;
[0075] 第二分配模块,用于在第一判定模块判定所述I2C总线当前为非空闲时,访问所述的状态寄存器;还用于在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配;
[0076] 第二判断模块,与所述的第一分配模块和第二分配模块相连,用于实时采集各当前确权主控器件的I2C总线通信状态;并用于在每次判定相应当前确权主控器件的I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位;所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件。使用时,总线仲裁单元通过第一收发模块接收当前主控器件发送的I2C总线控制请求;之后通过第一判定模块判定I2C总线当前是否空闲;并在第一判定模块判定I2C总线当前空闲时,调用第一分配模块将I2C总线的控制权分配给上述当前主控器件,之后调用第一分配模块拉高状态寄存器的BUSY标志位(即将BUSY标志位置1);且在第一判定模块判定所述I2C总线当前为非空闲时,调用第二分配模块访问所述的状态寄存器,并在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配。另外,该系统在使用时,调用第二判断模块实时采集各当前确权主控器件的I2C总线通信状态,并在每次判定相应当前确权主控器件的I2C总线通信状态为I2C总线通信结束后,收回该相应当前确权主控器件的I2C总线控制权,并控制上述状态寄存器释放其BUSY标志位(即将该BUSY标志位置0)。所述的当前确权主控器件为当前分配有I2C总线的控制权的主控器件。
[0077] 在本实施方式中,所述的第二分配模块,在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:在接收到上述状态寄存器当前回应的BUSY标志位的值为1(即为该BUSY标志位被拉高后对应的值)、回应的WAIT标志位和ERROR标志位的值均为0后,用于拉高所述状态寄存器的WAIT标志位,并用于向上述当前主控器件发送等待被分配I2C总线控制权的回应;在接收到上述状态寄存器回应的BUSY标志位和WAIT标志位的值均为1(即为BUSY标志位和WAIT标志位各自被拉高后各自对应的值)、回应的ERROR标志位的值为0后,用于向上述当前主控器件发送拒绝分配I2C总线控制权的回应;在接收到上述状态寄存器回应的ERROR标志位的值为1(即为该ERROR标志位被拉高后对应的值)后,用于向上述当前主控器件发送拒绝分配I2C总线控制权的回应。
[0078] 其中所述的第二分配模块,在其向上述当前主控器件发送等待被分配I2C总线控制权的回应,并在第二判断模块判定当前确权主控器件的I2C总线通信结束后,用于释放上述状态寄存器的BUSY标志位,并用于将I2C总线的控制权分配给该当前主控器件;还在上述将I2C总线的控制权分配给该当前主控器件后,用于释放上述状态寄存器的WAIT标志位,并用于拉高上述状态寄存器的BUSY标志位。
[0079] 其中,上述第二判断模块判定每个所涉及的主控器件的I2C总线通信结束的方法为:在主控器件当前被分配有I2C总线的控制权后,实时采集当前I2C总线对应串行数据(SDA)和串行时钟 (SCL)线中的各相应信号,在SCL线中信号处于高位时,若判定SDA线中信号由低位转为高位,则判定该当前主控器件的I2C总线通信结束。
[0080] 综上可见,本发明所述的I2C总线的仲裁系统,实现了多个主控器件并行通信过程中的合理调度,避免了多个主控器件因各自判定逻辑不兼容而导致的冲突的发生,不仅提高了通信效率,还提高了整个通信系统的灵活性和稳定性,在很大程度上实现了I2C链路资源的利用。另外,本发明增加了I2C总线异常检测机制,从而保证了多主环境下I2C总线的正常运转。
[0081] 需要说明的是,本发明所涉及的拉高各相应标志位,即为将各相应标志位对应的值分别置为1;本发明所涉及的拉低各相应标志位,即为将各相应标志位对应的值分别置为0;另外,各相应标志位的初始值均为0。
[0082] 以上实施方式仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施方式对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施方式技术方案的范围。