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

文档序号:13876291阅读:492来源:国知局
一种I2C总线的仲裁方法及系统与流程

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



背景技术:

i2c(inter-integratedcircuit)总线,是由philips公司开发的两线式(串行数据(sda)线和串行时钟(scl)线)串行总线,通过串行数据(sda)线和串行时钟(scl)线在连接到总线的器件间传递信息,是同步通信的一种特殊形式,具有接口线少、控制方式简单、器件封装形式小、通信速率较高等优点,已成为微电子通信控制领域广泛采用的一种总线标准。

申请公布号为“cn106155971a”的中国专利申请公开了一种i2c总线的仲裁方法,该方法包括:接收到第一主控器件发送的内部集成电路i2c总线控制请求后,向第二主控器件发送i2c总线释放请求,所述第二主控器件拥有所述i2c总线的控制权;若接收到所述第二主控器件发送的i2c总线释放响应,则向所述第一主控器件发送i2c总线控制响应;接收到所述第一主控器件发送的i2c总线控制应答后,将所述i2c总线的控制权分配给所述第一主控器件。该方案对于各个主控器件的i2c总线控制请求可以相对准确高效地进行仲裁,减少冲突产生的概率,从而减少主控器件获取仲裁结果的延时,有利于处理实时业务。

可见,基于上述公开的方案,在多主控器件的i2c总线链路中,让一个主控器件长期占用总线的控制权,即使在没有数据发送任务时,该主控器件也会一直独占总线的控制权,直至另一个主控器件需要发送数据包时,才会通过仲裁模块申请释放总线的控制权,从而进行控制权的切换。这使得总线资源一直处于“非a即b”的被占用状态,造成了总线资源的极大浪费。

另外,当一个主控器件长期占有总线的控制权,总线一旦出现异常,比如出现与地短接现象,上述公开的方案无法做出即时的判断,会认为是总线控制下的正常电平拉低,致使影响总线的稳定性。

此为现有技术的不足之处。



技术实现要素:

本发明所要解决的技术问题是,针对现有技术的不足,提供一种i2c总线的仲裁方法及系统,用于实现多主控器件状态下总线控制权的自由切换,提高总线的通信稳定性和通信质量。

为解决上述技术问题,本发明提供了一种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总线控制权的回应。

进一步地,总线仲裁单元在向上述当前主控器件发送等待被分配i2c总线控制权的回应后,并在判定当前确权主控器件的i2c总线通信结束后,释放上述状态寄存器的busy标志位,并将i2c总线的控制权分配给该当前主控器件;且在上述将i2c总线的控制权分配给该当前主控器件后,释放上述状态寄存器的wait标志位并拉高上述状态寄存器的busy标志位。

另外,本发明还提供了一种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总线控制权的回应。

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

与现有技术相比,本发明的优点在于:

(1)本发明适于在多主控器件的i2c总线链路中使用,且在每次判定相应主控器件的i2c总线通信结束后,通过收回该相应主控器件的i2c总线控制权的方式,能够避免i2c总线的控制权被一个主控器件长期占用的现象的发生,使得其他主控器件在需要通过i2c总线发送数据时,节省了通过仲裁模块申请释放总线的控制权的过程的使用,这在一定程度上节约了总线资源,也在一定程度上提高了通信的速度;

(2)本发明引入了与i2c总线配合使用的状态寄存器,在判定i2c总线当前非空闲后,通过访问所述的状态寄存器,并在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,从而在一定程度上提高了通信的稳定性与质量;

(3)本发明在当前主控器件已占用i2c总线的同时,可以给另一主控器件预先分配该i2c总线的控制权,从而能够实现多主状态下i2c总线的控制权的有序切换,这在一定程度上进一步提高了通信的稳定性与质量;

(4)本发明引入了状态寄存器的error标志位,且在接收到上述状态寄存器回应的error标志位的值为该标志位被拉高后对应的值后,判定总线故障,并向当前主控器件发送拒绝分配i2c总线控制权响应,这使得本发明在i2c总线故障时,能够即时作出判断,这在一定程度上确保了通信的稳定性与质量。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。

附图说明

图1为本发明所述i2c总线的仲裁方法在具有三个主控器件并行发送对i2c总线的控制请求情况下的具体实施方式;

图2为本发明所述i2c总线的仲裁系统的结构框图示意图。

具体实施方式

为使本发明的技术方案和优点更加清楚,下面将结合附图,对本发明的技术方案进行清楚、完整地描述。

本发明的一种i2c总线的仲裁方法,应用在网络设备中,所述网络设备包括至少两个主控器件。所述的i2c总线配设有总线仲裁单元,所述的总线仲裁单元配置有状态寄存器,所述的状态寄存器定义有busy标志位、wait标志位和error标志位,其中busy标志位用于指示i2c总线占用状态、wait标志位用于指示i2c总线等待释放状态、error标志位用于指示i2c总线故障状态;该i2c总线的仲裁方法包括如下步骤s1-s4:

步骤s1、总线仲裁单元接收当前主控器件发送的i2c总线控制请求。

步骤s2、总线仲裁单元在上述步骤s1中接收到当前主控器件发送的i2c总线控制请求后,判定i2c总线当前是否空闲,且在判定i2c总线当前空闲后执行步骤s3,否则执行步骤s4。

步骤s3、总线仲裁单元将i2c总线的控制权分配给上述当前主控器件,并拉高状态寄存器的busy标志位;

步骤s4、总线仲裁单元访问所述的状态寄存器,并基于接收到上述状态寄存器当前反馈的相应标志位的值,实现对上述当前主控器件的总线控制权的统筹分配。

其中,在上述步骤s4中,在接收到上述状态寄存器当前反馈的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:

在接收到上述状态寄存器回应的busy标志位的值为该标志位被拉高后对应的值后,拉高所述状态寄存器的wait标志位,并向上述当前主控器件发送等待被分配i2c总线控制权的回应;

在接收到上述状态寄存器回应的busy标志位和wait标志位的值对应为相应标志位被拉高后各自对应的相应值后,向上述当前主控器件发送拒绝分配i2c总线控制权的回应;

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

进一步地,在向上述当前主控器件发送等待被分配i2c总线控制权的回应后,实时判定当前分配有i2c总线的控制权的相应主控器件的当前i2c总线通信是否结束;

在判定上述当前i2c总线通信结束后,释放上述状态寄存器的busy标志位,并将i2c总线的控制权分配给该当前主控器件;

在上述将i2c总线的控制权分配给该当前主控器件后,释放上述状态寄存器的wait标志位并拉高上述状态寄存器的busy标志位。

另外,在判定i2c总线当前空闲后,将i2c总线的控制权分配给上述当前主控器件,并拉高状态寄存器的busy标志位,直至在判定上述当前主控器件对应的i2c总线通信结束后,控制所述的状态寄存器释放busy标志位。

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

具体地,以三个主控器件a、b、c为例,主控器件a、b、c并行发送对i2c总线的控制请求,如图1所示,具体如下:

步骤q1、初始状态(i2c总线当前空闲)下,总线仲裁单元接收到主器件a发送的i2c总线控制请求;其中在初始状态下,状态寄存器定义的busy标志位、wait标志位和error标志位的值依序为0、0和0;

步骤q2、总线仲裁单元在接收到主器件a发送的i2c总线控制请求后,判定i2c总线当前是否空闲,且此时判定i2c总线当前空闲,执行步骤q3;

步骤q3、总线仲裁单元将i2c总线的控制权分配给主控器件a,并拉高其配置的状态寄存器的busy标志位;之后执行步骤q4和q12;

步骤q4、在主控器件a占有i2c总线的控制权的过程中,总线仲裁单元接收到主器件b发送的i2c总线控制请求;

步骤q5、总线仲裁单元在接收到主器件b发送的i2c总线控制请求后,判定i2c总线当前是否空闲,此时判定i2c总线当前非空闲,之后执行步骤q6;

步骤q6、总线仲裁单元访问上述状态寄存器,并在上述状态寄存器回应的busy标志位、wait标志位和error标志位的值依序为1(即为该busy标志位被拉高后对应的值)、0和0时,执行步骤q7;且在上述状态寄存器回应error标志位的值为1(即为该error标志位被拉高后对应的值)时执行步骤q15;

步骤q7、拉高所述状态寄存器的wait标志位,并向主控器件b发送等待被分配i2c总线控制权的回应,主控器件b进入等待状态;

步骤q8、在主控器件a占有i2c总线的控制权、以及在上述步骤q7向主控器件b发送等待被分配i2c总线控制权的回应后,总线仲裁单元接收到主器件c发送的i2c总线控制请求;

步骤q9、总线仲裁单元在接收到主器件c发送的i2c总线控制请求后,判定i2c总线当前是否空闲,此时判定i2c总线当前非空闲,之后执行步骤q10;

步骤q10、总线仲裁单元访问所述的状态寄存器,并在该状态寄存器回应busy标志位的值为1、回应wait标志位的值为1以及回应error标志位的值为0时,执行步骤q11;且在该状态寄存器回应error标志位的值为1时,执行步骤q11;

步骤q11、总线仲裁单元向上述主控器件c发送拒绝分配i2c总线控制权的回应;

步骤q12、总线仲裁单元实时采集主控器件a的i2c总线通信状态,并在判定主控器件a的i2c总线通信结束后,执行步骤q13;

步骤q13、收回主控器件a对i2c总线的控制权,并释放上述状态寄存器的busy标志位(该busy标志位恢复至初始状态),之后执行步骤q14;

步骤q14、总线仲裁单元将i2c总线的控制权分配给主控器件b,之后控制上述状态寄存器释放wait标志位并拉高busy标志位;此时,wait标志位置0,busy标志位置1;

步骤q15、向上述主控器件b发送拒绝分配i2c总线控制权的回应。

其中,在上述主控器件b占有i2c总线的控制权的过程中,若总线仲裁单元再接收到其他主控器件发送的i2c总线控制请求,则重复执行上述主控器件b与c的控制过程。

在本实施方式中,所涉及的判定主控器件的i2c总线通信结束的方法为:在主控器件当前被分配有i2c总线的控制权后,实时采集当前i2c总线对应串行数据(sda)和串行时钟(scl)线中的各相应信号,在scl线中信号处于高位时,若判定sda线中信号由低位转为高位,则判定该当前主控器件的i2c总线通信结束。

综上,可见本发明提供了一种高效的调度方法,提前将并行的主控器件进行排队处理,保证了总线资源的高效利用。同时检测总线是否异常,保证多主器件的正常运转。

本发明还提供了一种i2c总线的仲裁系统,如图2所示,应用在网络设备中,所述网络设备包括至少两个主控器件(本实施方式以三个主控器件为例),所述的i2c总线配设有总线仲裁单元,所述的总线仲裁单元配置有一状态寄存器,所述的状态寄存器定义有busy标志位、wait标志位和error标志位,其中busy标志位用于指示i2c总线占用状态、wait标志位用于指示i2c总线等待释放状态、error标志位用于指示i2c总线故障状态;所述的总线仲裁单元包括:

第一收发模块,用于接收当前主控器件发送的i2c总线控制请求;

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

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

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

第二判断模块,与所述的第一分配模块和第二分配模块相连,用于实时采集各当前确权主控器件的i2c总线通信状态;并用于在每次判定相应当前确权主控器件的i2c总线通信结束后,收回该相应当前确权主控器件的i2c总线控制权,并控制上述状态寄存器释放其busy标志位;所述的当前确权主控器件为当前分配有i2c总线的控制权的主控器件。使用时,总线仲裁单元通过第一收发模块接收当前主控器件发送的i2c总线控制请求;之后通过第一判定模块判定i2c总线当前是否空闲;并在第一判定模块判定i2c总线当前空闲时,调用第一分配模块将i2c总线的控制权分配给上述当前主控器件,之后调用第一分配模块拉高状态寄存器的busy标志位(即将busy标志位置1);且在第一判定模块判定所述i2c总线当前为非空闲时,调用第二分配模块访问所述的状态寄存器,并在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配。另外,该系统在使用时,调用第二判断模块实时采集各当前确权主控器件的i2c总线通信状态,并在每次判定相应当前确权主控器件的i2c总线通信状态为i2c总线通信结束后,收回该相应当前确权主控器件的i2c总线控制权,并控制上述状态寄存器释放其busy标志位(即将该busy标志位置0)。所述的当前确权主控器件为当前分配有i2c总线的控制权的主控器件。

在本实施方式中,所述的第二分配模块,在接收到上述状态寄存器当前回应的相应标志位的值后,实现对上述当前主控器件的总线控制权的统筹分配,具体包括:在接收到上述状态寄存器当前回应的busy标志位的值为1(即为该busy标志位被拉高后对应的值)、回应的wait标志位和error标志位的值均为0后,用于拉高所述状态寄存器的wait标志位,并用于向上述当前主控器件发送等待被分配i2c总线控制权的回应;在接收到上述状态寄存器回应的busy标志位和wait标志位的值均为1(即为busy标志位和wait标志位各自被拉高后各自对应的值)、回应的error标志位的值为0后,用于向上述当前主控器件发送拒绝分配i2c总线控制权的回应;在接收到上述状态寄存器回应的error标志位的值为1(即为该error标志位被拉高后对应的值)后,用于向上述当前主控器件发送拒绝分配i2c总线控制权的回应。

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

其中,上述第二判断模块判定每个所涉及的主控器件的i2c总线通信结束的方法为:在主控器件当前被分配有i2c总线的控制权后,实时采集当前i2c总线对应串行数据(sda)和串行时钟(scl)线中的各相应信号,在scl线中信号处于高位时,若判定sda线中信号由低位转为高位,则判定该当前主控器件的i2c总线通信结束。

综上可见,本发明所述的i2c总线的仲裁系统,实现了多个主控器件并行通信过程中的合理调度,避免了多个主控器件因各自判定逻辑不兼容而导致的冲突的发生,不仅提高了通信效率,还提高了整个通信系统的灵活性和稳定性,在很大程度上实现了i2c链路资源的利用。另外,本发明增加了i2c总线异常检测机制,从而保证了多主环境下i2c总线的正常运转。

需要说明的是,本发明所涉及的拉高各相应标志位,即为将各相应标志位对应的值分别置为1;本发明所涉及的拉低各相应标志位,即为将各相应标志位对应的值分别置为0;另外,各相应标志位的初始值均为0。

以上实施方式仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施方式对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施方式技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1