具有多路I2C总线的装置、处理器、系统主板及工控计算机转让专利

申请号 : CN200910190461.9

文献号 : CN102023954B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王从毫王玉章

申请人 : 研祥智能科技股份有限公司

摘要 :

本发明涉及一种具有多路I2C总线的装置、处理器、系统主板及工控计算机,该具有多路I2C总线的装置包括可编程逻辑器件,可编程逻辑器件包括:多个I2C总线控制器和处理器接口模块其中,每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组。利用可编程逻辑器件,来完成对处理器主体I2C总线的扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂多个不同的设备,可以是主设备,也可使从设备。来满足一些特殊应用场合,尤其在监控系统中。在可编程逻辑器件内,每个I2C总线控制器仅仅使用四个寄存器,从而大大降低了控制的复杂度,系统运行稳定,执行效率高。

权利要求 :

1.一种具有多路I2C总线的装置,其特征在于,包括可编程逻辑器件,所述可编程逻辑器件包括:多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;

处理器接口模块,用于与外部处理器连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:数据寄存器,用于存放收发的缓冲数据;

地址寄存器,用于保存当前地址;

控制寄存器,用于控制相应的I2C总线的数据传输;

状态寄存器,用于标示相应的I2C总线的当前状态。

2.根据权利要求1所述的具有多路I2C总线的装置,其特征在于,每个I2C总线控制器包括:主控制单元,用于在I2C通信过程中,控制其所属的I2C总线控制器的主工作模式和从工作模式之间的状态切换;

时钟生成单元,用于在其所属的I2C总线控制器处于主工作模式时,为主控制单元提供时钟输入,并为外部I2C从设备提供时钟输出;其中,当该I2C总线控制器处于从工作模式时,主控制单元接收外部I2C主设备提供的时钟。

3.根据权利要求1所述的具有多路I2C总线的装置,其特征在于,具有四个I2C总线控制器以形成四路I2C总线。

4.根据权利要求1所述的具有多路I2C总线的装置,其特征在于,所述外部处理器是MPC8245处理器,其通过地址线、数据线、片选信号线及读写信号线与所述可编程逻辑器件连接。

5.一种具有多路I2C总线的处理器,包括处理器主体,其特征在于,还包括与所述处理器主体连接的可编程逻辑器件;所述可编程逻辑器件包括:多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;

处理器接口模块,用于与处理器主体连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:数据寄存器,用于存放收发的缓冲数据;

地址寄存器,用于保存当前地址;

控制寄存器,用于控制相应的I2C总线的数据传输;

状态寄存器,用于标示相应的I2C总线的当前状态。

6.一种具有多路I2C总线的系统主板,在所述系统主板上设置有处理器,所述处理器包括处理器主体,其特征在于,还包括与所述处理器主体连接的可编程逻辑器件;所述可编程逻辑器件包括:多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;

处理器接口模块,用于与处理器主体连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:数据寄存器,用于存放收发的缓冲数据;

地址寄存器,用于保存当前地址;

控制寄存器,用于控制相应的I2C总线的数据传输;

状态寄存器,用于标示相应的I2C总线的当前状态。

7.一种具有多路I2C总线的工控计算机,在所述工控计算机的主机内设置有系统主板,在所述系统主板上设置有处理器,所述处理器包括处理器主体,其特征在于,还包括与所述处理器主体连接的可编程逻辑器件;所述可编程逻辑器件包括:多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;

处理器接口模块,用于与处理器主体连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:数据寄存器,用于存放收发的缓冲数据;

地址寄存器,用于保存当前地址;

控制寄存器,用于控制相应的I2C总线的数据传输;

状态寄存器,用于标示相应的I2C总线的当前状态。

说明书 :

具有多路I2C总线的装置、处理器、系统主板及工控计算机

技术领域

[0001] 本发明涉及处理器,更具体地说,涉及一种具有多路I2C总线的装置、处理器、系统主板及工控计算机。

背景技术

[0002] I2C总线是由Philips公司开发的用于IC器件之间连接的二线制总线,双向、两线、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合器件之间近距离、非经常性的数据通信。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送数据,并根据地址识别每个器件,每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器。它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏。I2C总线能用于替代标准的并行总线,能连接各种集成电路和功能模块。支持I2C的设备有微控制器、ADC、DAC、储存器、LCD控制器、LED驱动器等。I2C总线上数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整,连接到相同总线的IC数量只受到总线的最大电容400pF限制。由于其使用两线的硬件接口简单,I2C总线的应用越来越广泛。
[0003] MPC8245处理器只有一路I2C总线控制器,在现实的应用中,尤其是在监控系统中,需要有多路I2C总线控制器来完成监控的功能。
[0004] 在I2C总线控制器的实现方面,也可以利用CPU的I/O引脚通过软件编程来模拟I2C总线时序,用完全软件的方法实现I2C接口,但是这将占用较多的CPU资源,而且容易受软件运行的稳定性影响,效率低下。另外,还可利用IC芯片上的I2C总线控制器实现多个I2C从器件读写操作,其运行稳定,但只能在专用支持I2C接口的ASIC硬核单板上使用,单板设计成本高,不能灵活的实现多路I2C总线。

发明内容

[0005] 本发明要解决的技术问题在于,针对现有技术的处理不能实现多路I2C总线;用纯软件I2C接口实现后,其将占有较多CPU资源,效率低下;或用IC芯片实现多个I2C从器件读写时,单板设计成本高等缺陷,提供一种具有多路I2C总线的装置、处理器、系统主板及工控计算机。
[0006] 本发明解决其技术问题所采用的技术方案是:构造一种具有多路I2C总线的装置,其包括可编程逻辑器件,所述可编程逻辑器件包括:
[0007] 多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;
[0008] 处理器接口模块,用于与外部处理器连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,
[0009] 每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:
[0010] 数据寄存器,用于存放收发的缓冲数据;
[0011] 地址寄存器,用于保存当前地址;
[0012] 控制寄存器,用于控制相应的I2C总线的数据传输;
[0013] 状态寄存器,用于标示相应的I2C总线的当前状态。
[0014] 在本发明所述的具有多路I2C总线的装置中,每个I2C总线控制器包括:
[0015] 主控制单元,用于在I2C通信过程中,控制整个通信传输,并控制其所属的I2C总线控制器的主工作模式和从工作模式之间的状态切换;
[0016] 时钟生成单元,用于在其所属的I2C总线控制器处于主工作模式时,为主控制单元提供时钟输入,并为外部I2C从设备提供时钟输出;其中,
[0017] 当该I2C总线控制器处于从工作模式时,主控制单元接收外部I2C主设备提供的时钟。
[0018] 在本发明所述的具有多路I2C总线的装置中,具有四个I2C总线控制器以形成四路I2C总线。
[0019] 在本发明所述的具有多路I2C总线的装置中,所述外部处理器是MPC8245处理器,其通过地址线、数据线、片选信号线及读写信号线与所述可编程逻辑器件连接。
[0020] 根据本发明的另一个方面,提供一种具有多路I2C总线的处理器,其包括处理器主体,其特征在于,还包括与所述处理器主体连接的可编程逻辑器件;所述可编程逻辑器件包括:
[0021] 多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;
[0022] 处理器接口模块,用于与处理器主体连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,
[0023] 每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:
[0024] 数据寄存器,用于存放收发的缓冲数据;
[0025] 地址寄存器,用于保存当前地址;
[0026] 控制寄存器,用于控制相应的I2C总线的数据传输;
[0027] 状态寄存器,用于标示相应的I2C总线的当前状态。
[0028] 在本发明所述的具有多路I2C总线的处理器中,每个I2C总线控制器包括:
[0029] 主控制单元,用于在I2C通信过程中,控制整个通信传输,并控制其所属的I2C总线控制器的主工作模式和从工作模式之间的状态切换;
[0030] 时钟生成单元,用于在其所属的I2C总线控制器处于主工作模式时,为主控制单元提供时钟输入,并为外部I2C从设备提供时钟输出;其中,
[0031] 当该I2C总线控制器处于从工作模式时,主控制单元接收外部I2C主设备提供的时钟。
[0032] 在本发明所述的具有多路I2C总线的处理器中,具有四个I2C总线控制器以形成四路I2C总线。
[0033] 在本发明所述的具有多路I2C总线的处理器中,所述处理器主体是MPC8245处理器,其通过地址线、数据线、片选信号线及读写信号线与所述可编程逻辑器件连接。
[0034] 根据本发明的另一个方面,提供一种具有多路I2C总线的系统主板,在所述系统主板上设置有处理器,所述处理器包括处理器主体和与所述处理器主体连接的可编程逻辑器件;所述可编程逻辑器件包括:
[0035] 多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;
[0036] 处理器接口模块,用于与处理器主体连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,
[0037] 每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:
[0038] 数据寄存器,用于存放收发的缓冲数据;
[0039] 地址寄存器,用于保存当前地址;
[0040] 控制寄存器,用于控制相应的I2C总线的数据传输;
[0041] 状态寄存器,用于标示相应的I2C总线的当前状态。
[0042] 根据本发明的又一个方面,提供一种具有多路I2C总线的工控计算机,在所述工控计算机的主机内设置有系统主板,在所述系统主板上设置有处理器,所述处理器包括处理器主体和与所述处理器主体连接的可编程逻辑器件;所述可编程逻辑器件包括:
[0043] 多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而用于挂接多个外部I2C设备;
[0044] 处理器接口模块,用于与处理器主体连接,并与每个I2C总线控制器进行数据传输的握手通信;其中,
[0045] 每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括:
[0046] 数据寄存器,用于存放收发的缓冲数据;
[0047] 地址寄存器,用于保存当前地址;
[0048] 控制寄存器,用于控制相应的I2C总线的数据传输;
[0049] 状态寄存器,用于标示相应的I2C总线的当前状态。
[0050] 实施本发明的具有多路I2C总线的装置、处理器、系统主板及工控计算机,具有以下有益效果:利用可编程逻辑器件,来完成对处理器主体I2C总线的扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂多个不同的设备,可以是主设备,也可使从设备。来满足一些特殊应用场合,尤其在监控系统中。在可编程逻辑器件内,每个I2C总线控制器仅仅使用四个寄存器,从而大大降低了控制的复杂度,无需占用较多的CPU资源,系统运行稳定,执行效率高。

附图说明

[0051] 下面将结合附图及实施例对本发明作进一步说明,附图中:
[0052] 图1是本发明具有多路I2C总线的处理器的系统框图;
[0053] 图2是图1所示的I2C总线控制器的原理框图;
[0054] 图3是本发明具有多路I2C总线的工控计算机的数据收发控制方法的流程图;
[0055] 图4是本发明具有多路I2C总线的工控计算机的通信时钟控制方法的流程图;
[0056] 图5是图4所示的步骤A4的流程图。

具体实施方式

[0057] 如图1和2所示,在本发明的具有多路I2C总线的处理器中,其主要包括处理器主体,本发明的创新点在于,设置与处理器主体连接的可编程逻辑器件,对处理器主体的I2C总线进行扩展,使该处理器主体能够有多个I2C总线通道,每一路I2C总线上可以挂多个不同的设备,可以是主设备,也可使从设备。处理器主体利用局部总线,通过地址线、数据线、读写信号线和片选信号线与可编程逻辑器件进行通信,在可编程逻辑器件内部经过执行控制软件完成与处理器主体的通信功能,同时作处理,完成完整的I2C协议,在可编程逻辑器件内部完成I2C总线控制器的功能,从而完成了从处理器主体的局部总线到I2C协议的转换,利用可编程逻辑器件来完成对处理器主体的I2C总线控制器的扩展。每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个寄存器组,每个寄存器组包括数据寄存器、地址寄存器、控制寄存器和状态寄存器。在具体设计中,可编程逻辑器件可以是FPGA、CPLD或别的可实现可编程应用的逻辑器件,而处理器主体可选用MPC8245处理器。
[0058] 系统通过处理器主体的局部总线来完成对可编程逻辑器件内部寄存器的读写,每一个I2C总线控制器在可编程逻辑器件内部通过软件实现,每一路I2C总线上可以挂多个I2C设备,可以是主设备,也可以是从设备。通过可编程逻辑器件内部的寄存器,来完成可编程逻辑内的各个I2C总线控制器与处理器主体之间的通信和数据交换,进而实现了处理器主体通过可编程逻辑器件与多个不同通道的I2C设备的通信,完成了处理器主体多个独立通道的I2C总线的扩展。
[0059] 由于处理器主体速度远远大于I2C总线的传输速度,由此处理器主体可以同时与多路I2C总线上的设备通信,及实现多路I2C总线的并行处理,但同一时刻每路I2C总线上只能有一个I2C设备与处理器主体通信。
[0060] 当处理器主体与一路I2C总线上的一个I2C设备通信时,通过对可编程逻辑器件内部所设置的寄存器进行操作来实现,一共需要对4个8位的寄存器进行操作,每一个寄存器有唯一的一个地址,该地址通过处理器主体的地址线译码得到。这4个八位的寄存器分别为:数据寄存器、地址寄存器、控制寄存器和状态寄存器。
[0061] 通过可编程逻辑器件对处理器主体扩展N路I2C总线就需要在可编程逻辑器件内部设置有4×N个8位寄存器,即N个8位数据寄存器、N个8位地址寄存器、N个8位控制寄存器、N个8位状态寄存器,对应外部的N路I2C总线。
[0062] 处理器主体的数据处理的速度远远大于I2C总线的传输速度,并且处理器主体可以多线程多任务分时间片的处理数据,由此能够同时与多路I2C总线上的设备通信,但根据I2C总线传输协议,对于确定的一路I2C总线,处理器主体只能与其上的一个I2C设备通信,该设备可以是主设备,也可以是从设备,在这里,处理器主体相当于该路I2C总线上的一个设备;当处理器主体同时与多路I2C总线上的设备通信时,处理器主体相当于同时分为多个设备,成为多路I2C总线上的各路I2C总线上的设备,一一与I2C总线上的其他设备通信。
[0063] 当处理器主体作为主设备,与一路I2C总线上的I2C设备通信时,处理器主体通过软件驱动程序对可编程逻辑器件内部实现的数据寄存器、地址寄存器、控制寄存器、状态寄存器进行操作,首先对这4个寄存器进行初始化,之后可编程逻辑器件内部实现的I2C总线控制器根据数据寄存器、控制寄存器、状态寄存器中的不同的值来与I2C总线上的I2C设备进行通信,地址寄存器不用,它只在处理器主体作为从设备时才使用,是处理器响应I2C主设备时的自身地址。数据寄存器用来存放发送或者接收的数据,控制寄存器用来指示可编程逻辑器件内部实现的I2C总线控制器的的数据传输,按照设置产生各个协议命令、响应动作及工作模式。状态寄存器用来指示可编程逻辑器件内部实现的I2C总线控制器的状态,与处理器主体进行握手通信。可编程逻辑器件的I2C总线控制器控制的I2C总线上的I2C设备,实现与其的通信,从而间接的实现了处理器主体作为主设备时与I2C总线上的I2C从设备的通信。
[0064] 当处理器主体作为从设备与另一路I2C总线上的设备通信时,处理器主体通过软件驱动程序对可编程逻辑器件内部的数据寄存器、地址寄存器、控制寄存器、状态寄存器进行操作,首先对这四个寄存器进行初始化,之后该路I2C总线的I2C总线控制器根据数据寄存器、控制寄存器、状态寄存器中的不同的值与该路I2C总线上的I2C设备进行通信,将接收的包头与自己地址寄存器中的地址作比较:接收到的8位包头数据,前7位为I2C主设备要访问的从设备的地址,第8位是读写标志,0为写,1为读;当发送的地址与自己地址寄存器中存放的地址匹配时,响应主设备,发送应当信号,之后根据读写标志位对I2C主设备进行发送或者接收数据,发送或者接收的数据缓存在数据寄存器中,并对状态寄存器进行相应的置位操作;根据读写标志位来发送或者接收数据,当进行读操作时,每读一个字节的数据,之后发送一个应答信号给主设备,之后进行下一个字节的读操作;当进行写操作时,每写一个字节的数据,等待主设备发送应答信号,收到应答信号之后,进行下一个字节的写操作。
[0065] 该处理器的工作流程为:系统上电后,处理器主体通过可编程逻辑器件与可编程逻辑器件相连接的I2C设备通信。如果处理器主体作为主设备与可编程逻辑器件所实现的I2C总线上所挂的从设备进行通信时,则处理器主体通过对可编程逻辑器件内部的该路I2C总线控制器相关的寄存器进行操作,根据I2C总线通信协议,来产生起始信号,时钟信号,并查询状态位,对该路I2C总线上的从设备进行发送或者接收数据的操作,当数据交换完成后,产生停止信号,完成整个通信;如果处理器主体作为从设备与可编程逻辑器件所实现的I2C总线上所挂的主设备进行通信时,则可编程逻辑器件所实现的I2C总线上所挂的主设备产生起始信号,时钟信号,处理器主体通过对可编程逻辑器件内的该路I2C总线控制器相关的数据寄存器进行操作来发送或者接收数据,当通信完成后,可编程逻辑器件所实现的I2C总线上所挂的主设备产生停止信号,完成整个通信。通过可编程逻辑器件实现的多路I2C总线上每一路可以挂多个设备,可以是从设备,也可以是主设备,具体能挂的设备数量受总线电容的限制。
[0066] 在一优选实施例中,该处理器主体为MPC8245处理,通过可编程逻辑器件实现该MPC8245处理器具有四路I2C总线;可编程逻辑器件采用XILINX公司的SPARTAN3A系列的芯片,开发平台为ISE10.1。该可编程逻辑器件包括MPC8245处理器接口模块和四个I2C总线控制器。
[0067] MPC8245处理器接口模块主要完成MPC8245处理器与可编程逻辑器件的接口功能并实现与可编程逻辑器件内部的四个I2C总线控制器数据传输的握手通信。在可编程逻辑器件内实现四个I2C总线控制器,每个I2C总线控制器相对应的有四个8位的寄存器,即数据寄存器、地址寄存器、控制寄存器和状态寄存器。
[0068] 数据寄存器实际上是两个寄存器,共享一个地址,根据读/写信号来区分,一个是发送数据缓冲寄存器,另一个是接收数据缓冲寄存器。数据长度为8位。地址寄存器用来保存当前地址。当该I2C总线控制器作为从节点通信时,地址寄存器中保存的是其自身的地址,这个地址在总线上是唯一的,从节点接收到报头后,将其中的地址与自己的地址比较,如果一致,则响应主节点,开始传输。地址是7位,I2C寄存器中,只有前7位是有效的,最后1位无效。控制寄存器用来控制I2C总线的数据传输,按照设置产生各个协议命令、响应动作及工作模式。状态寄存器显示当前总线的状态。通过状态寄存器中的不同的状态指示,来实现与MPC8245处理器的握手。
[0069] MPC8245处理器利用地址线、数据线、片选信号线和读写信号线来与可编程逻辑器件内部的4个I2C总线控制器相关的16个寄存器交换数据、读取状态、作为从设备时响应地址和控制各个I2C总线控制器。
[0070] MPC8245处理器通过查询每个I2C总线控制器中相对应的状态寄存器中的MCF位,来判断该I2C总线控制器中一个字节数据传输是否完成。当传输完成时,MCF被置位1,系统把该位清0来开始新一个字节数据的传输。
[0071] MPC8245处理器利用地址线译码,来读取或者写入数据到相关的寄存器,每个寄存器有唯一的一个地址。MPC8245处理器的低5位的地址线与可编程逻辑器件相连接,通过译码,最多可以有32个地址空间,能够满足16个寄存器所需要的16个地址空间的需求。当MPC8245处理器要对可编程逻辑器件中寄存器的数据进行读操作时,通过地址线选通地址,读信号有效为低电平,写信号无效为高电平,同时片选信号有效为低电平,则系统从可编程逻辑器件内部该地址的寄存器中读取数据;当MPC8245处理器要对可编程逻辑器件中寄存器的数据进行写操作时,通过地址线选通地址,写信号有效为低电平,读信号无效为高电平,同时片选信号有效为低电平,则系统把数据写入到可编程逻辑器件内部该地址的寄存器中。
[0072] 该可编程逻辑器件主要实现并行的4个I2C总线控制器,每个I2C总线控制器通过可编程逻辑器件的I/O管脚连接到外部实现各自独立的I2C总线,每一路独立的I2C总线上可以有多个I2C设备,可以是主设备,也可以是从设备,各路I2C总线相互独立的工作,相互之间没有干扰和影响。
[0073] I2C总线控制器主要通过主控制单元和时钟生成单元,实现其功能。4个I2C总线控制器实现的原理相同,主控制单元主要完成在I2C通信过程中各个状态之间的转换,是整个I2C总线控制器的核心。时钟生成单元仅仅只在I2C总线控制器作为主设备时的模式下工作,作用是为主控制单元提供时钟输入,并为外部的从设备提供时钟输出,是I2C总线通信时的时钟。当I2C总线控制器作为从设备通信时,主控制单元的时钟由可编程逻辑器件所实现的I2C总线上所挂的I2C主设备提供,整个I2C总线通信时的时钟为外部的主设备提供的SCL时钟。
[0074] 主控制单元的状态机控制为任一个I2C总线控制器不管作为主设备还是作为从设备,主控制单元的状态机控制都是相同的。在每个状态,模式都会被检测,以决定输出和下一个状态。如果仲裁失败或者该I2C总线控制器被确定为从设备,该主控制单元会自动由主工作模式切换到从工作模式。当检测到START信号时,主控制单元机进入HEADER状态。在HEADER状态,如果该I2C总线控制器是主设备,则数据寄存器中的HEADER被发送,之后转移到ACK HEADER状态。
[0075] 整个状态机控制描述如下:
[0076] IDLE状态(空闲状态):当I2C总线控制器上电或者复位后,主控制单元就处于此状态。等到检查到开始信号detect_start等于1时,转移到HEADER状态;
[0077] HEADER状态(发送包头状态,即发送第一帧数据):在此状态,系统根据控制寄存器位MSTA值,发送或者接收报头,对SCL开始计数,满足条件后,转移到ACK_HEADER状态;I2C总线控制器中的HEADER移位寄存器与地址寄存器中存放的I2C总线控制器作为从设备时响应的地址进行比较,如果匹配,则表明该I2C总线控制器为被主设备寻址的从设备,模式立刻切换到从设备模式,同时状态寄存器中的MAAS位被置位,数据线SDA将会按照TXAK中的设置应答当前主设备;
[0078] ACK_HEADER状态(对包头帧数据的应答):当该I2C总线控制器作为主设备时,如果没有收到从设备发送的ACK,则发送结束信号,返回到IDLE状态;如果收到ACK,确定仲裁没有丢失,根据控制寄存器位TX值转到XMIT_DATA或者RCV_DATA状态;当该I2C总线控制器作为从设备时,如果地址匹配,则发送ACK,根据主设备发送的第一个字节中的最后一位的值转到XMIT_DATA或者RCV_DATA状态;
[0079] XMIT_DATA状态(发送数据):在此状态时,移位寄存器将数据移到SDA线上。发送一个字节完成后,转移到WAIT_ACK状态;
[0080] WAIT_ACK状态(发送数据时,等待接收设备发送应答信号):在此状态时,如果收到ACK,则返回到XMIT_DATA状态;如果仲裁丢失,则转到IDLE状态;如果没有收到ACK,则发送结束信号,转移到IDLE状态;
[0081] RCV_DATA状态(接收数据):在此状态时,如果检测到重新启动信号,则返回HEADER状态;否则,移位寄存器从SDA线上移入数据,以供MPC8245处理器读取,移入一个字节后,转到ACK_DATA状态,控制寄存器中的TXAK位被输出到数据线SDA;
[0082] ACK_DATA状态(接收数据时,接收完一帧数据对发送设备发送应答信号):IIC控制器发送ACK,返回到RCV_DATA状态。
[0083] 时钟生成单元的状态机控制为其只在I2C总线控制器作为主设备时的模式下工作,作用是为主控制状态机提供时钟输入,并为外部的从设备提供时钟输出,是I2C总线通信时的时钟。整个状态机控制如图4所示:
[0084] 共有7个状态:SCL_IDLE、START、SCL_LOW_EDGE、SCL_LOW、SCL_HIGH_EDGE、SCL_HIGH、STOP_WAIT。具体为:
[0085] SCL_IDLE状态(空闲状态):当上电复位后,状态机就处于该状态。当I2C总线控制器为主节点并且总线空闲时,收到开始标志后,转移到START状态(开始状态,当检测到开始信号时);
[0086] START状态:当在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态(低电平时钟沿状态),否则保持在START状态;
[0087] SCL_LOW_EDGE状态:当在此状态时,在下一个系统时钟时,转移到SCL_LOW状态;
[0088] SCL_LOW状态(时钟低电平状态):在此状态时,根据控制信号,设置SDA的输出;当在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_HIGH_EDGE状态,否则保持在该状态;如果仲裁丢失且已经传输7个字节时,转移到SCL_IDLE状态;
[0089] SCL_HIGH_EDGE状态(高电平时钟沿状态):在此状态时,完成一定的操作,持续一个时钟周期后,转移到SCL_HIGH状态;如果SCL输入为0或者状态寄存器中的位MCF=1,则一直停留在该状态;
[0090] SCL_HIGH状态(时钟高电平状态):在此状态时,如果有重复起始信号,SCL高电平持续一半时间,转移到START状态;如果有结束信号,SCL高电平持续一半时间,转移到STOP_WAIT状态;根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态,否则保持在当前状态;
[0091] STOP_WAIT状态(结束等待状态。产生结束信号时,需要有一定的时间在该状态):在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_IDLE状态。
[0092] 数据的输入/输出依靠双向移位寄存器实现。在程序中设置两个专门的模块来实现双向移位寄存器的功能,其中一个专门发送/接收报(HEADER),另一个负责发送/接收数据。前者只在HEADER状态下移位,后者在XMIT_DATA和RCV_DATA状态下移位。
[0093] 当同时有多个主设备在可编程逻辑器件所实现的同一路I2C总线上时,也包括MPC8245处理器可能作为主设备,通过总线仲裁来确定是哪一个主设备占用总线。每一路I2C总线的仲裁在可编程逻辑器件内部实现。当仲裁失败时,该路I2C总线控制器所对应的状态寄存器中的MAL位被置为1。
[0094] 每个I2C控制器相关的状态寄存器中的不同的位在该模块中在满足不同条件时置不同的值。当一个字节传输完成时,对MCF置位为1,否则为0。当I2C总线上的地址与该I2C总线控制器相关的地址寄存器中的值相同时,该I2C总线控制器会被作为从设备并切换到从设备模式,此时状态寄存器中的MAAS位被置为1。
[0095] 如图3所示的具有多路I2C总线的工控计算机的数据收发控制方法流程图中,其用于对其中的I2C总线控制器的数据收发进行控制,具体包括以下步骤:
[0096] S1、系统上电,进入初始化状态;
[0097] S2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作模式,如果是,进入步骤S3;否则,进入步骤S6;在一优选实施例中,通过读取控制寄存器中的MSTA位来判断,当为1时,表示该I2C总线控制器是主设备,当为0时,表示该I2C总线控制器为从设备;
[0098] S3、向外部I2C设备发送包头数据,并等待外部I2C设备发送的响应信号;
[0099] S4、判断是否收到响应信号及未存在仲裁丢失,如果是,进入步骤S5,否则,进入步骤S1;在一优选实施例中,发送包头数据并等待外部I2C设备响应:发送包头数据为8位,前7位为要访问的外部I2C设备的地址,第8位是读写标志,0为写,1为读;当8位包头数据发送结束时,等待外部I2C设备发送响应信号,当没有响应信号或者判断到仲裁丢失时,返回到刚上电时的状态,即进入步骤S1;当收到响应信号并且仲裁没有丢失时,进行读写操作,即进入下一步骤;对于仲裁丢失的判断,当发生以下情况时,将仲裁标志位置位:1、主节点向SDA线发出高电平,而采样SDA线得到低电平;2、总线忙时,监测到开始信号;3、在从节点模式下收到重启动信号;4、主节点意外检测到结束信号。
[0100] S5、对外部I2C设备进行读写数据操作;进入步骤S9;在一优选实施例中,根据读写标志位来对外部I2C从设备进行读写操作,当进行读操作时,每读一个字节的数据,之后发送一个应答信号给从设备,之后进行下一个字节的读操作;当进行写操作时,每写一个字节的数据,等待从设备发送应答信号,收到应答信号之后,进行下一个字节的写操作;当读写完成时,发送结束信号,结束传输,其中读写操作中每一位是通过通信时钟来计数的。
[0101] S6、此时I2C总线控制器为从工作模式,其接收外部I2C设备发送的包头数据;
[0102] S7、判断包头数据中的地址与地址寄存器中的地址是否匹配,如果是,进入步骤S8,否则,进入步骤S9;
[0103] S8、向外部I2C设备发送应答信号,以响应其为主设备,进行数据收发;
[0104] 在一优选实施例中,I2C总线控制器接收包头数据并与自己地址寄存器中的地址作比较:接收到的8位包头数据,前7位为作为主设备的外部I2C设备要访问的从设备的地址,第8位是读写标志,0为写,1为读;当发送的地址与自己地址寄存器中存放的地址匹配时,响应主设备,发送应答信号,之后根据读写标志位对主设备进行发送或者接收数据;对于读写操作,根据读写标志位来发送或者接收数据,当进行读操作时,每读一个字节的数据,之后发送一个应答信号给主设备,之后进行下一个字节的读操作;当进行写操作时,每写一个字节的数据,等待主设备发送应答信号,收到应答信号之后,进行下一个字节的写操作。
[0105] S9、结束。
[0106] 如图4和5所示的具有多路I2C总线的工控计算机的通信时钟控制方法流程图中,其用于对其中的I2C总线控制器的通信时钟进行控制,具体包括以下步骤:
[0107] A1、系统上电,进入初始化状态;
[0108] A2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作模式,如果是,当收到开始信号后,进入步骤A3;否则,进入步骤A8;
[0109] A3、根据传输速度,产生一定时间的时钟低电平;如图5所示,该步骤可分为三个子步骤:
[0110] A31、保持一定时间的高电平状态;在一优选实施例中,当收到开始信号时,开始产生通信时钟,再保持4us的高电平时间;
[0111] A32、产生时钟低电平,并保持一定时间的下降沿;在一优选实施例中,开始产生时钟低电平后,首先保持300ns的下降沿;
[0112] A33、之后根据传输速度,产生一定时间的时钟低电平。
[0113] A4、判断是否存在仲裁丢失以及已经传输一预设时钟周期,如果是,进入步骤A1,否则,进入步骤A5;在一优选实施例中,如果判断到仲裁丢失,并且已经传输了大于7个时钟周期的时间,则返回到上电时的状态,即进入步骤A1;
[0114] A5、根据传输速度,产生一定时间的时钟高电平;在一优选实施例中,首先保持300ns的上升沿,之后根据传输速度的需要,保持一定时间的高电平状态;
[0115] A6、判断是否传输完成,如果是,进入步骤A7,否则,进入步骤A3;
[0116] A7、保持时钟高电平状态,当收到结束标志信号时,进入步骤A8;读取状态寄存器中一个字节传输完成标志位MCF,如果其等于1,则一直停留在时钟高电平状态,否则,进入时钟结束准备状态,即进入步骤A8;
[0117] A8、时钟结束。
[0118] 本发明是通过几个具体实施例进行说明的,本领域技术人员应当明白,在不脱离本发明范围的情况下,还可以对本发明进行各种变换及等同替代。另外,针对特定情形或具体情况,可以对本发明做各种修改,而不脱离本发明的范围。因此,本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围内的全部实施方式。