CN102023953B - 具有多路i2c总线的***的控制方法 - Google Patents
具有多路i2c总线的***的控制方法 Download PDFInfo
- Publication number
- CN102023953B CN102023953B CN2009101904568A CN200910190456A CN102023953B CN 102023953 B CN102023953 B CN 102023953B CN 2009101904568 A CN2009101904568 A CN 2009101904568A CN 200910190456 A CN200910190456 A CN 200910190456A CN 102023953 B CN102023953 B CN 102023953B
- Authority
- CN
- China
- Prior art keywords
- bus
- data
- processor
- register
- state
- 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.)
- Active
Links
Images
Landscapes
- Information Transfer Systems (AREA)
- Communication Control (AREA)
Abstract
本发明涉及一种具有多路I2C总线的***,在该***中,处理器并行处理多路I2C总线的数据通信;针对每一路I2C总线,所述处理器具有两种工作状态;对于一路I2C总线,根据所述处理器的工作状态,控制该路I2C总线的I2C总线控制器的数据收发,其中,当所述处理器为主工作状态时,产生该路I2C总线的I2C总线控制器的通信时钟。在该***中,通过控制处理器并行处理多路I2C总线,消除了数据传输和处理的瓶颈,增强了该***的执行效率。在实施中,利用可编程逻辑器件,来完成对处理器主体I2C总线的扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂多个不同的设备,可以是主设备,也可使从设备。来满足一些特殊应用场合,尤其在监控***中。
Description
技术领域
本发明涉及一种***,更具体地说,涉及一种具有多路I2C总线的***的控制方法。
背景技术
I2C总线是由Philips公司开发的用于IC器件之间连接的二线制总线,双向、两线、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合器件之间近距离、非经常性的数据通信。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送数据,并根据地址识别每个器件,每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器。它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏。I2C总线能用于替代标准的并行总线,能连接各种集成电路和功能模块。支持I2C的设备有微控制器、ADC、DAC、储存器、LCD控制器、LED驱动器等。I2C总线上数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整,连接到相同总线的IC数量只受到总线的最大电容400pF限制。由于其使用两线的硬件接口简单,I2C总线的应用越来越广泛。
MPC8245处理器只有一路I2C总线控制器,在现实的应用中,尤其是在监控***中,需要有多路I2C总线控制器来完成监控的功能。
在I2C总线控制器的实现方面,也可以利用CPU的I/O引脚通过软件编程来模拟I2C总线时序,用完全软件的方法实现I2C接口,但是这将占用较多的CPU资源,而且容易受软件运行的稳定性影响,效率低下。另外,还可利用IC芯片上的I2C总线控制器实现多个I2C从器件读写操作,其运行稳定,但只能在专用支持I2C接口的ASIC硬核单板上使用,单板设计成本高,不能灵活的实现多路I2C总线。
发明内容
本发明要解决的技术问题在于,针对现有技术的处理不能实现多路I2C总线;用纯软件I2C接口实现后,其将占有较多CPU资源,效率低下;或用IC芯片实现多个I2C从器件读写时,单板设计成本高等缺陷,提供一种具有多路I2C总线的***的控制方法。
本发明解决其技术问题所采用的技术方案是:构造一种具有多路I2C总线的***,所述***包括处理器和与所述处理器连接的可编程逻辑器件,所述可编程逻辑器件包括多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而形成多路I2C总线,每一路I2C总线用于挂接多个I2C设备;
所述处理器并行处理多路I2C总线的数据通信;
针对每一路I2C总线,所述处理器具有两种工作状态:主工作状态和从工作状态;
对于一路I2C总线,根据所述处理器的工作状态,控制该路I2C总线的I2C总线控制器的数据收发,
包括以下步骤:
S1、***上电,进入初始化状态;
S2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作状态,如果是,进入步骤S3;否则,进入步骤S6;
S3、向外部I2C设备发送包头数据,并等待外部I2C设备发送的响应信号;
S4、判断是否收到响应信号及未存在仲裁丢失,如果是,进入步骤S5,否则,进入步骤S1;
S5、对外部I2C设备进行读写数据操作;进入步骤S9;
S6、接收外部I2C设备发送的包头数据,然后进入步骤S7;
S7、判断包头数据中的地址与地址寄存器中的地址是否匹配,如果是,进入步骤S8,否则,进入步骤S9;
S8、向外部I2C设备发送应答信号,以响应其为主设备,进行数据收发;
S9、结束;
当所述处理器为主工作状态时,产生该路I2C总线的I2C总线控制器的通信时钟,包括以下步骤:
A1、***上电,进入初始化状态;
A2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作状态,如果是,当收到开始信号后,进入步骤A3;否则,进入步骤A8;
A3、保持一定时间的高电平状态,之后开始产生时钟低电平并保持一定时间的时钟低电平沿,之后再根据传输速度产生一定时间的时钟低电平;
A4、判断是否存在仲裁丢失以及已经传输一预设时钟周期,如果是,进入步骤A1,否则,进入步骤A5;
A5、根据传输速度,产生一定时间的时钟高电平;
A6、判断是否传输完成,如果是,进入步骤A7,否则,进入步骤A3;
A7、保持时钟高电平状态,当收到结束标志信号时,进入步骤A8;
A8、时钟结束。
在本发明所述的***中,对于每路I2C总线,所述处理器通过一个位于可编程逻辑器件内部的寄存器组,控制该路I2C总线的I2C总线控制器的数据收发。
在本发明所述的***中,所述寄存器组包括:
数据寄存器,用于存放发送或接收的缓冲数据;
地址寄存器,用于保存当前地址;
控制寄存器,用于控制相应的I2C总线的数据传输;
状态寄存器,用于显示当前I2C总线的状态。
在本发明所述的***中,所述处理器是MPC8245处理器,其同时通过地址线、数据线、片选信号线及读写信号线与所述可编程逻辑器件连接。
实施本发明的具有多路I2C总线的***的控制方法,具有以下有益效果:在该***中,通过控制处理器并行处理多路I2C总线,消除了数据传输和处理的瓶颈,增强了该***的执行效率。在实施中,利用可编程逻辑器件,来完成对处理器主体I2C总线的扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂多个不同的设备,可以是主设备,也可使从设备。来满足一些特殊应用场合,尤其在监控***中。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明具有多路I2C总线的***的电路框图;
图2是图1所示的一个I2C总线控制器的数据收发控制流程图;
图3是产生一个I2C总线控制器的通信时钟的控制流程图。
图4是图3所示的步骤A4的流程图。
具体实施方式
如图1所示,在本发明的具有多路I2C总线的***中,其主要包括处理器和设置与处理器连接的可编程逻辑器件,对处理器的I2C总线进行扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂多个不同的设备,可以是主设备,也可使从设备。处理器利用局部总线,通过地址线、数据线、读写信号线和片选信号线与可编程逻辑器件进行通信,在可编程逻辑器件内部经过执行控制软件完成与处理器主体的通信功能,同时作处理,完成完整的I2C协议,在可编程逻辑器件内部完成I2C总线控制器的功能,从而完成了从处理器的局部总线到I2C协议的转换,利用可编程逻辑器件来完成对处理器的I2C总线控制器的扩展。每个I2C总线控制器具有主工作模式和从工作模式两种工作状态,且每个I2C总线控制器配置有一个位于可编程逻辑器件内部的寄存器组,每个寄存器组包括数据寄存器、地址寄存器、控制寄存器和状态寄存器。在具体设计中,可编程逻辑器件可以是FPGA、CPLD或别的可实现可编程应用的逻辑器件,而处理器可选用MPC8245处理器。
***通过处理器主体的局部总线来完成对可编程逻辑器件内部寄存器的读写,每一个I2C总线控制器在可编程逻辑器件内部实现,每一路I2C总线上可以挂多个I2C设备,可以是主设备,也可以是从设备。通过可编程逻辑器件内部的寄存器,来完成可编程逻辑内的各个I2C总线控制器与处理器主体之间的通信和数据交换,进而实现了处理器主体通过可编程逻辑器件与多个不同通道的I2C设备的通信,完成了处理器主体多个独立通道的I2C总线的扩展。
由于处理器速度远远大于I2C总线的传输速度,因此处理器可以看作同时与多路I2C总线上的设备通信,及实现多路I2C总线的并行处理,但同一时刻每路I2C总线上只能有一个I2C设备与处理器通信。
当处理器与一路I2C总线上的一个I2C设备通信时,通过对可编程逻辑器件内部所设置的寄存器进行操作来实现,一共需要对4个8位的寄存器进行操作,每一个寄存器有唯一的一个地址,该地址通过处理器的地址线译码得到。这4个八位的寄存器分别为:数据寄存器、地址寄存器、控制寄存器和状态寄存器。
通过可编程逻辑器件对处理器扩展N路I2C总线就需要在可编程逻辑器件内部设置有4×N个8位寄存器,即N个8位数据寄存器、N个8位地址寄存器、N个8位控制寄存器、N个8位状态寄存器,对应外部的N路I2C总线。
处理器的数据处理的速度远远大于I2C总线的传输速度,并且处理器可以多线程多任务分时间片的处理数据,由此能够同时与多路I2C总线上的设备通信,但根据I2C总线传输协议,对于确定的一路I2C总线,处理器只能与其上的一个I2C设备通信,该设备可以是主设备,也可以是从设备,在这里,处理器相当于该路I2C总线上的一个设备;当处理器同时与多路I2C总线上的设备通信时,CPU相当于同时分为多个设备,成为多路I2C总线上的各路I2C总线上的设备,一一与I2C总线上的其他设备通信。
当处理器作为主设备,与一路I2C总线上的I2C设备通信时,处理器通过软件驱动程序对可编程逻辑器件内部实现的数据寄存器、地址寄存器、控制寄存器、状态寄存器进行操作,首先对这4个寄存器进行初始化,之后可编程逻辑器件内部实现的I2C总线控制器根据数据寄存器、控制寄存器、状态寄存器中的不同的值来与I2C总线上的I2C设备进行通信,地址寄存器不用,它只在处理器作为从设备时才使用,是处理器响应I2C主设备时的自身地址。数据寄存器用来存放发送或者接收的数据,控制寄存器用来指示可编程逻辑器件内部实现的I2C总线控制器的数据传输,按照设置产生各个协议命令、响应动作及工作模式。状态寄存器用来指示可编程逻辑器件内部实现的I2C总线控制器的状态,与处理器进行握手通信。可编程逻辑器件的I2C总线控制器控制的I2C总线上的I2C设备,实现与其的通信,从而间接的实现了处理器作为主设备时与I2C总线上的I2C从设备的通信。
当处理器作为从设备与另一路I2C总线上的设备通信时,处理器通过软件驱动程序对可编程逻辑器件内部的数据寄存器、地址寄存器、控制寄存器、状态寄存器进行操作,首先对这四个寄存器进行初始化,之后该路I2C总线的I2C总线控制器根据数据寄存器、控制寄存器、状态寄存器中的不同的值与该路I2C总线上的I2C设备进行通信,当接收包头并与自己地址寄存器中的地址作比较:接收到的8位包头数据,前7位为I2C主设备要访问的从设备的地址,第8位是读写标志,0为写,1为读;当发送的地址与自己地址寄存器中存放的地址匹配时,响应主设备,发送应当信号,之后根据读写标志位对I2C主设备进行发送或者接收数据,发送或者接收的数据缓存在数据寄存器中,并对状态寄存器进行相应的置位操作;根据读写标志位来发送或者接收数据,当进行读操作时,每读一个字节的数据,之后发送一个应答信号给主设备,之后进行下一个字节的读操作;当进行写操作时,每写一个字节的数据,等待主设备发送应答信号,收到应答信号之后,进行下一个字节的写操作。
该***的工作流程为:***上电后,处理器通过可编程逻辑器件与可编程逻辑器件相连接的I2C设备通信。如果处理器作为主设备与可编程逻辑器件所实现的I2C总线上所挂的从设备进行通信时,则处理器通过对可编程逻辑器件内部的该路I2C总线控制器相关的寄存器进行操作,根据I2C总线通信协议,来产生起始信号,时钟信号,并查询状态位,对该路I2C总线上的从设备进行发送或者接收数据的操作,当数据交换完成后,产生停止信号,完成整个通信;如果处理器作为从设备与可编程逻辑器件所实现的I2C总线上所挂的主设备进行通信时,则可编程逻辑器件所实现的I2C总线上所挂的主设备产生起始信号,时钟信号,处理器通过对可编程逻辑器件内的该路I2C总线控制器相关的数据寄存器进行操作来发送或者接收数据,当通信完成后,可编程逻辑器件所实现的I2C总线上所挂的主设备产生停止信号,完成整个通信。通过可编程逻辑器件实现的多路I2C总线上每一路可以挂多个设备,可以是从设备,也可以是主设备,具体能挂的设备数量受总线电容的限制。
在一优选实施例中,该处理器为MPC8245处理,通过可编程逻辑器件实现该MPC8245处理器具有四路I2C总线;可编程逻辑器件采用XILINX公司的SPARTAN3A系列的芯片,开发平台为ISE10.1。该可编程逻辑器件包括MPC8245处理器接口模块和四个I2C总线控制器。
MPC8245处理器接口模块主要完成MPC8245处理器与可编程逻辑器件的接口功能并实现与可编程逻辑器件内部的四个I2C总线控制器数据传输的握手通信。在可编程逻辑器件内实现四个I2C总线控制器,每个I2C总线控制器相对应的有四个8位的寄存器,即数据寄存器、地址寄存器、控制寄存器和状态寄存器。
数据寄存器实际上是两个寄存器,共享一个地址,根据读/写信号来区分,一个是发送数据缓冲寄存器,另一个是接收数据缓冲寄存器。数据长度为8位。地址寄存器用来保存当前地址。当该I2C总线控制器作为从节点通信时,地址寄存器中保存的是其自身的地址,这个地址在总线上是唯一的,从节点接收到报头后,将其中的地址与自己的地址比较,如果一致,则响应主节点,开始传输。地址是7位,I2C寄存器中,只有前7位是有效的,最后1位无效。控制寄存器用来控制I2C总线的数据传输,按照设置产生各个协议命令、响应动作及工作模式。状态寄存器显示当前总线的状态。通过状态寄存器中的不同的状态指示,来实现与MPC8245处理器的握手。
MPC8245处理器利用地址线、数据线、片选信号线和读写信号线来与可编程逻辑器件内部的4个I2C总线控制器相关的16个寄存器交换数据、读取状态、作为从设备时响应地址和控制各个I2C总线控制器。
MPC8245处理器通过查询每个I2C总线控制器中相对应的状态寄存器中的MCF位,来判断该I2C总线控制器中一个字节数据传输是否完成。当传输完成时,MCF被置位1,***把该位清0来开始新一个字节数据的传输。
MPC8245处理器利用地址线译码,来读取或者写入数据到相关的寄存器,每个寄存器有唯一的一个地址。MPC8245处理器的低5位的地址线与可编程逻辑器件相连接,通过译码,最多可以有32个地址空间,能够满足16个寄存器所需要的16个地址空间的需求。当MPC8245处理器要对可编程逻辑器件中寄存器的数据进行读操作时,通过地址线选通地址,读信号有效为低电平,写信号无效为高电平,同时片选信号有效为低电平,则***从可编程逻辑器件内部该地址的寄存器中读取数据;当MPC8245处理器要对可编程逻辑器件中寄存器的数据进行写操作时,通过地址线选通地址,写信号有效为低电平,读信号无效为高电平,同时片选信号有效为低电平,则***把数据写入到可编程逻辑器件内部该地址的寄存器中。
该可编程逻辑器件主要实现并行的4个I2C总线控制器,每个I2C总线控制器通过可编程逻辑器件的I/O管脚连接到外部实现各自独立的I2C总线,每一路独立的I2C总线上可以有多个I2C设备,可以是主设备,也可以是从设备,各路I2C总线相互独立的工作,相互之间没有干扰和影响。
I2C总线控制器主要通过主控制单元和时钟生成单元,实现其功能。4个I2C总线控制器实现的原理相同,主控制单元主要完成在I2C通信过程中各个状态之间的转换,是整个I2C总线控制器的核心。时钟生成单元仅仅只在I2C总线控制器作为主设备时的模式下工作,作用是为主控制单元提供时钟输入,并为外部的从设备提供时钟输出,是I2C总线通信时的时钟。当I2C总线控制器作为从设备通信时,主控制单元的时钟由可编程逻辑器件所实现的I2C总线上所挂的I2C主设备提供,整个I2C总线通信时的时钟为外部的主设备提供的SCL时钟。
主控制单元的状态机控制为任一个I2C总线控制器不管作为主设备还是作为从设备,主控制单元的状态机控制都是相同的。在每个状态,模式都会被检测,以决定输出和下一个状态。如果仲裁失败或者该I2C总线控制器被确定为从设备,该主控制单元会自动由主工作模式切换到从工作模式。当检测到START信号时,主控制单元机进入HEADER状态。在HEADER状态,如果该I2C总线控制器是主设备,则数据寄存器中的HEADER被发送,之后转移到ACK_HEADER状态。
整个状态机控制描述如下:
IDLE状态(空闲状态):当I2C总线控制器上电或者复位后,主控制单元就处于此状态。等到检查到开始信号detect_start等于1时,转移到HEADER状态;
HEADER状态(发送包头状态,即发送第一帧数据):在此状态,***根据控制寄存器位MSTA值,发送或者接收报头,对SCL开始计数,满足条件后,转移到ACK_HEADER状态;I2C总线控制器中的HEADER移位寄存器与地址寄存器中存放的I2C总线控制器作为从设备时响应的地址进行比较,如果匹配,则表明该I2C总线控制器为被主设备寻址的从设备,模式立刻切换到从设备模式,同时状态寄存器中的MAAS位被置位,数据线SDA将会按照TXAK中的设置应答当前主设备;
ACK_HEADER状态(对包头帧数据的应答):当该I2C总线控制器作为主设备时,如果没有收到从设备发送的ACK,则发送结束信号,返回到IDLE状态;如果收到ACK,确定仲裁没有丢失,根据控制寄存器位TX值转到XMIT_DATA或者RCV_DATA状态;当该I2C总线控制器作为从设备时,如果地址匹配,则发送ACK,根据主设备发送的第一个字节中的最后一位的值转到XMIT_DATA或者RCV_DATA状态;
XMIT_DATA状态(发送数据):在此状态时,移位寄存器将数据移到SDA线上。发送一个字节完成后,转移到WAIT_ACK状态;
WAIT_ACK状态(发送数据时,等待接收设备发送应答信号):在此状态时,如果收到ACK,则返回到XMIT_DATA状态;如果仲裁丢失,则转到IDLE状态;如果没有收到ACK,则发送结束信号,转移到IDLE状态;
RCV_DATA状态(接收数据):在此状态时,如果检测到重新启动信号,则返回HEADER状态;否则,移位寄存器从SDA线上移入数据,以供MPC8245处理器读取,移入一个字节后,转到ACK_DATA状态,控制寄存器中的TXAK位被输出到数据线SDA;
ACK_DATA状态(接收数据时,接收完一帧数据对发送设备发送应答信号):IIC控制器发送ACK,返回到RCV_DATA状态。
时钟生成单元的状态机控制为其只在I2C总线控制器作为主设备时的模式下工作,作用是为主控制状态机提供时钟输入,并为外部的从设备提供时钟输出,是I2C总线通信时的时钟。整个状态机控制如图4所示:
共有7个状态:SCL_IDLE、START、SCL_LOW_EDGE、SCL_LOW、SCL_HIGH_EDGE、SCL_HIGH、STOP_WAIT。具体为:
SCL_IDLE状态(空闲状态):当上电复位后,状态机就处于该状态。当I2C总线控制器为主节点并且总线空闲时,收到开始标志后,转移到START状态(开始状态,当检测到开始信号时);
START状态:当在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态(低电平时钟沿状态),否则保持在START状态;
SCL_LOW_EDGE状态:当在此状态时,在下一个***时钟时,转移到SCL_LOW状态;
SCL_LOW状态(时钟低电平状态):在此状态时,根据控制信号,设置SDA的输出;当在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_HIGH_EDGE状态,否则保持在该状态;如果仲裁丢失且已经传输7个字节时,转移到SCL_IDLE状态;
SCL_HIGH_EDGE状态(高电平时钟沿状态):在此状态时,完成一定的操作,持续一个时钟周期后,转移到SCL_HIGH状态;如果SCL输入为0或者状态寄存器中的位MCF=1,则一直停留在该状态;
SCL_HIGH状态(时钟高电平状态):在此状态时,如果有重复起始信号,SCL高电平持续一半时间,转移到START状态;如果有结束信号,SCL高电平持续一半时间,转移到STOP_WAIT状态;根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态,否则保持在当前状态;
STOP_WAIT状态(结束等待状态。产生结束信号时,需要有一定的时间在该状态):在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_IDLE状态。
数据的输入/输出依靠双向移位寄存器实现。在程序中设置两个专门的模块来实现双向移位寄存器的功能,其中一个专门发送/接收报(HEADER),另一个负责发送/接收数据。前者只在HEADER状态下移位,后者在XMIT_DATA和RCV_DATA状态下移位。
当同时有多个主设备在可编程逻辑器件所实现的同一路I2C总线上时,也包括MPC8245处理器可能作为主设备,通过总线仲裁来确定是哪一个主设备占用总线。每一路I2C总线的仲裁在可编程逻辑器件内部实现。当仲裁失败时,该路I2C总线控制器所对应的状态寄存器中的MAL位被置为1。
每个I2C控制器相关的状态寄存器中的不同的位在该模块中在满足不同条件时置不同的值。当一个字节传输完成时,对MCF置位为1,否则为0。当I2C总线上的地址与该I2C总线控制器相关的地址寄存器中的值相同时,该I2C总线控制器会被作为从设备并切换到从设备模式,此时状态寄存器中的MAAS位被置为1。
如图2所示的一个I2C总线控制器的数据收发控制流程图中,其用于对其中的I2C总线控制器的数据收发进行控制,具体包括以下步骤:
S1、***上电,进入初始化状态;
S2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作状态,如果是,进入步骤S3;否则,进入步骤S6;在一优选实施例中,通过读取控制寄存器中的MSTA位来判断,当为1时,表示该I2C总线控制器是主设备,当为0时,表示该I2C总线控制器为从设备;
S3、向外部I2C设备发送包头数据,并等待外部I2C设备发送的响应信号;
S4、判断是否收到响应信号及未存在仲裁丢失,如果是,进入步骤S5,否则,进入步骤S1;在一优选实施例中,发送包头数据并等待外部I2C设备响应:发送包头数据为8位,前7位为要访问的外部I2C设备的地址,第8位是读写标志,0为写,1为读;当8位包头数据发送结束时,等待外部I2C设备发送响应信号,当没有响应信号或者判断到仲裁丢失时,返回到刚上电时的状态,即进入步骤S1;当收到响应信号并且仲裁没有丢失时,进行读写操作,即进入下一步骤;对于仲裁丢失的判断,当发生以下情况时,将仲裁标志位置位:1、主节点向SDA线发出高电平,而采样SDA线得到低电平;2、总线忙时,监测到开始信号;3、在从节点模式下收到重启动信号;4、主节点意外检测到结束信号。
S5、对外部I2C设备进行读写数据操作;进入步骤S9;在一优选实施例中,根据读写标志位来对外部I2C从设备进行读写操作,当进行读操作时,每读一个字节的数据,之后发送一个应答信号给从设备,之后进行下一个字节的读操作;当进行写操作时,每写一个字节的数据,等待从设备发送应答信号,收到应答信号之后,进行下一个字节的写操作;当读写完成时,发送结束信号,结束传输,其中读写操作中每一位是通过通信时钟来计数的。
S6、此时I2C总线控制器为从工作模式,其接收外部I2C设备发送的包头数据,然后进入步骤S7
S7、判断包头数据中的地址与地址寄存器中的地址是否匹配,如果是,进入步骤S8,否则,进入步骤S9;
S8、向外部I2C设备发送应答信号,以响应其为主设备,进行数据收发;
在一优选实施例中,I2C总线控制器接收包头数据并与自己地址寄存器中的地址作比较:接收到的8位包头数据,前7位为作为主设备的外部I2C设备要访问的从设备的地址,第8位是读写标志,0为写,1为读;当发送的地址与自己地址寄存器中存放的地址匹配时,响应主设备,发送应答信号,之后根据读写标志位对主设备进行发送或者接收数据;对于读写操作,根据读写标志位来发送或者接收数据,当进行读操作时,每读一个字节的数据,之后发送一个应答信号给主设备,之后进行下一个字节的读操作;当进行写操作时,每写一个字节的数据,等待主设备发送应答信号,收到应答信号之后,进行下一个字节的写操作。
S9、结束。
如图3和4所示的产生一个I2C总线控制器的通信时钟的控制流程图中,其用于对其中的I2C总线控制器的通信时钟进行控制,具体包括以下步骤:
A1、***上电,进入初始化状态;
A2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作状态,如果是,当收到开始信号后,进入步骤A3;否则,进入步骤A8;
A3、根据传输速度,产生一定时间的时钟低电平;如图5所示,该步骤可分为三个子步骤:
A31、保持一定时间的高电平状态;在一优选实施例中,当收到开始信号时,开始产生通信时钟,再保持4us的高电平时间;
A32、产生时钟低电平,并保持一定时间的时钟低电平沿;在一优选实施例中,开始产生时钟低电平后,首先保持300ns的时钟低电平沿;
A33、之后根据传输速度,产生一定时间的时钟低电平。
A4、判断是否存在仲裁丢失以及已经传输一预设时钟周期,如果是,进入步骤A1,否则,进入步骤A5;在一优选实施例中,如果判断到仲裁丢失,并且已经传输了大于7个时钟周期的时间,则返回到上电时的状态,即进入步骤A1;
A5、根据传输速度,产生一定时间的时钟高电平;在一优选实施例中,首先保持300ns的时钟高电平沿,之后根据传输速度的需要,保持一定时间的高电平状态;
A6、判断是否传输完成,如果是,进入步骤A7,否则,进入步骤A3;
A7、保持时钟高电平状态,当收到结束标志信号时,进入步骤A8;读取状态寄存器中一个字节传输完成标志位MCF,如果其等于1,则一直停留在时钟高电平状态,否则,进入时钟结束准备状态,即进入步骤A8;
A8、时钟结束。
本发明是通过几个具体实施例进行说明的,本领域技术人员应当明白,在不脱离本发明范围的情况下,还可以对本发明进行各种变换及等同替代。另外,针对特定情形或具体情况,可以对本发明做各种修改,而不脱离本发明的范围。因此,本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围内的全部实施方式。
Claims (4)
1.一种具有多路I2C总线的***,所述***包括处理器和与所述处理器连接的可编程逻辑器件,其特征在于,所述可编程逻辑器件包括多个I2C总线控制器,每个I2C总线控制器通过所述可编程逻辑器件的I/O管脚连接到外部以形成一路I2C总线,从而形成多路I2C总线,每一路I2C总线用于挂接多个I2C设备;
所述处理器并行处理多路I2C总线的数据通信;
针对每一路I2C总线,所述处理器具有两种工作状态:主工作状态和从工作状态;
对于一路I2C总线,根据所述处理器的工作状态,控制该路I2C总线的I2C总线控制器的数据收发,包括以下步骤:
S1、***上电,进入初始化状态;
S2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作状态,如果是,进入步骤S3;否则,进入步骤S6;
S3、向外部I2C设备发送包头数据,并等待外部I2C设备发送的响应信号;
S4、判断是否收到响应信号及未存在仲裁丢失,如果是,进入步骤S5,否则,进入步骤S1;
S5、对外部I2C设备进行读写数据操作;进入步骤S9;
S6、接收外部I2C设备发送的包头数据,然后进入步骤S7;
S7、判断包头数据中的地址与地址寄存器中的地址是否匹配,如果是,进入步骤S8,否则,进入步骤S9;
S8、向外部I2C设备发送应答信号,以响应其为主设备,进行数据收发;
S9、结束;
当所述处理器为主工作状态时,产生该路I2C总线的I2C总线控制器的通信时钟,包括以下步骤:
A1、***上电,进入初始化状态;
A2、读取控制寄存器中的状态位,判断所述I2C总线控制器是否为主工作状态,如果是,当收到开始信号后,进入步骤A3;否则,进入步骤A8;
A3、保持一定时间的高电平状态,之后开始产生时钟低电平并保持一定时间的时钟低电平沿,之后再根据传输速度产生一定时间的时钟低电平;
A4、判断是否存在仲裁丢失以及已经传输一预设时钟周期,如果是,进入步骤A1,否则,进入步骤A5;
A5、根据传输速度,产生一定时间的时钟高电平;
A6、判断是否传输完成,如果是,进入步骤A7,否则,进入步骤A3;
A7、保持时钟高电平状态,当收到结束标志信号时,进入步骤A8;
A8、时钟结束。
2.根据权利要求1所述的***,其特征在于,对于每路I2C总线,所述处理器通过一个位于可编程逻辑器件内部的寄存器组,控制该路I2C总线的I2C总线控制器的数据收发。
3.根据权利要求2所述的***,其特征在于,所述寄存器组包括:
数据寄存器,用于存放发送或接收的缓冲数据;
地址寄存器,用于保存当前地址;
控制寄存器,用于控制相应的I2C总线的数据传输;
状态寄存器,用于显示当前I2C总线的状态。
4.根据权利要求1~3任一所述的***,其特征在于,所述处理器是MPC8245处理器,其同时通过地址线、数据线、片选信号线及读写信号线与所述可编程逻辑器件连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101904568A CN102023953B (zh) | 2009-09-17 | 2009-09-17 | 具有多路i2c总线的***的控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101904568A CN102023953B (zh) | 2009-09-17 | 2009-09-17 | 具有多路i2c总线的***的控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102023953A CN102023953A (zh) | 2011-04-20 |
CN102023953B true CN102023953B (zh) | 2012-08-22 |
Family
ID=43865265
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101904568A Active CN102023953B (zh) | 2009-09-17 | 2009-09-17 | 具有多路i2c总线的***的控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102023953B (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102243619A (zh) * | 2011-06-23 | 2011-11-16 | 天津光电通信技术有限公司 | 一种基于fpga实现多路i2c总线端口扩展的方法 |
CN102841869B (zh) * | 2012-07-03 | 2015-06-03 | 深圳市邦彦信息技术有限公司 | 一种基于fpga的多通道i2c控制器 |
CN102902647B (zh) * | 2012-09-25 | 2015-09-30 | 华为技术有限公司 | 设置在i2c从机印刷电路板的asic芯片和印刷电路板 |
JP6232733B2 (ja) * | 2013-04-24 | 2017-11-22 | セイコーエプソン株式会社 | 通信回路、物理量測定装置、電子機器、移動体、通信方法 |
CN103401879B (zh) * | 2013-08-14 | 2017-08-25 | 青岛海信宽带多媒体技术有限公司 | 一种光模块及保证光模块协议数据完整性的方法 |
CN103441992B (zh) * | 2013-08-14 | 2017-02-15 | 青岛海信宽带多媒体技术有限公司 | 一种保证光模块协议数据完整性的方法 |
CN103472748B (zh) * | 2013-09-04 | 2017-01-18 | 上海顺久电子科技有限公司 | 时序控制电路的验证***和验证方法 |
CN104765709B (zh) * | 2015-03-10 | 2017-12-08 | 中国电子科技集团公司第十研究所 | 多路总线数据仿真*** |
CN104750648B (zh) * | 2015-04-10 | 2017-07-21 | 北京拓盛电子科技有限公司 | 基于双线总线的单向通讯控制装置及方法 |
CN106168934B (zh) * | 2016-06-29 | 2018-12-14 | 锐捷网络股份有限公司 | 一种数据传输方法及装置 |
CN106250336A (zh) * | 2016-07-19 | 2016-12-21 | 青岛海信电器股份有限公司 | 一种fpga及进行总线切换的方法和*** |
CN109800186B (zh) * | 2017-11-17 | 2022-06-24 | 英业达科技有限公司 | 控制***及其控制方法 |
TWI665562B (zh) * | 2017-11-29 | 2019-07-11 | 英業達股份有限公司 | 控制系統及其控制方法 |
CN107967230A (zh) * | 2017-11-30 | 2018-04-27 | 广东高云半导体科技股份有限公司 | I3c电路设备、***和通信方法 |
CN108287796A (zh) * | 2018-01-24 | 2018-07-17 | 郑州云海信息技术有限公司 | 一种控制***和可编程逻辑器件的通信方法 |
CN109992552A (zh) * | 2019-04-10 | 2019-07-09 | 苏州浪潮智能科技有限公司 | 一种iic的管理装置及管理方法 |
CN110046120B (zh) * | 2019-04-12 | 2022-02-18 | 苏州浪潮智能科技有限公司 | 基于iic协议的数据处理方法、装置、***及存储介质 |
CN110781119B (zh) * | 2019-10-22 | 2023-07-04 | 广东高云半导体科技股份有限公司 | 一种i2c总线扩展接口及其控制方法、片上*** |
CN111274188A (zh) * | 2020-02-20 | 2020-06-12 | 深圳震有科技股份有限公司 | 一种多数据i2c总线 |
CN111339019B (zh) * | 2020-02-23 | 2021-10-29 | 苏州浪潮智能科技有限公司 | 一种通过cpld进行i2c总线扩展的方法和装置 |
CN112463703B (zh) * | 2020-11-19 | 2023-01-06 | 苏州浪潮智能科技有限公司 | 一种i2c总线的数据收发控制方法和*** |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN116166594B (zh) * | 2023-04-26 | 2023-07-18 | 闪极科技(深圳)有限公司 | 一种单地址多从机的iic总线电路及其传输方法和装置 |
CN117201222B (zh) * | 2023-08-16 | 2024-06-21 | 天津瑞发科半导体技术有限公司 | I2c接口***、数据写入方法以及数据读取方法 |
CN117056274B (zh) * | 2023-08-29 | 2024-01-30 | 浙江波誓盾科技有限公司 | 一种用于单核处理器的并行数据通信架构及方法 |
CN117370258B (zh) * | 2023-11-02 | 2024-03-29 | 珠海电科星拓科技有限公司 | 一种高速i2c总线的多路低速i2c扩展方法及装置 |
CN117828648B (zh) * | 2024-03-06 | 2024-05-28 | 湖南博匠信息科技有限公司 | 一种可信总线交互***的实现方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6122747A (en) * | 1997-09-05 | 2000-09-19 | First Pass Inc. | Intelligent subsystem interface for modular hardware system |
CN101127023A (zh) * | 2006-08-17 | 2008-02-20 | 四川维肯电子有限公司 | 一种多总线接口的通用异步串口扩展芯片 |
CN101436171A (zh) * | 2008-11-24 | 2009-05-20 | 中国电子科技集团公司第二十八研究所 | 模块化通信控制*** |
-
2009
- 2009-09-17 CN CN2009101904568A patent/CN102023953B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6122747A (en) * | 1997-09-05 | 2000-09-19 | First Pass Inc. | Intelligent subsystem interface for modular hardware system |
CN101127023A (zh) * | 2006-08-17 | 2008-02-20 | 四川维肯电子有限公司 | 一种多总线接口的通用异步串口扩展芯片 |
CN101436171A (zh) * | 2008-11-24 | 2009-05-20 | 中国电子科技集团公司第二十八研究所 | 模块化通信控制*** |
Also Published As
Publication number | Publication date |
---|---|
CN102023953A (zh) | 2011-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102023953B (zh) | 具有多路i2c总线的***的控制方法 | |
CN102023954A (zh) | 具有多路i2c总线的装置、处理器、***主板及工控计算机 | |
KR101429782B1 (ko) | 낮은 전력 및 낮은 핀 카운트 양방향성 듀얼 데이터 레이트디바이스 인터커넥트 인터페이스 | |
CN106453383B (zh) | 一种基于uart的主从多机通讯***及方法 | |
CN100496048C (zh) | 多主通信*** | |
CN100573382C (zh) | 基于i2c的通信***及通信方法 | |
CN102420877B (zh) | 一种多模式高速智能异步串口通信模块及实现方法 | |
CN102253913B (zh) | 一种对多板卡端口进行状态获取和输出控制的装置 | |
CN102088386A (zh) | 一种电路***主从互联模块的串行总线 | |
JP2008536225A (ja) | 周辺機器共有usbハブ | |
CN102541791A (zh) | 数据传送装置及其控制方法 | |
US20070088874A1 (en) | Offload engine as processor peripheral | |
CN102857397A (zh) | 一种多主异步双工差分总线及通讯方法 | |
CN102243619A (zh) | 一种基于fpga实现多路i2c总线端口扩展的方法 | |
CN105677598B (zh) | 基于i2c接口快速读取多个mems传感器数据的模块和方法 | |
CN108111382A (zh) | 基于i3c总线的通信装置及其通信方法 | |
US20090271557A1 (en) | Non-volatile memory storage device with high transmission rate | |
CN107643993B (zh) | 总线转换接口、总线转换接口的工作方法和通信设备 | |
CN110069437B (zh) | 基于响应帧有效性的rs-485总线极性自适应方法 | |
CN117215977B (zh) | 一种i3c集线器及中断仲裁数字实现方法 | |
WO2012013080A1 (zh) | 一种数据透明传输的方法及*** | |
CN116566761B (zh) | Spi双主机共享仲裁***及方法 | |
CN109947019A (zh) | 列车网络输入输出***的处理装置及并行工作控制方法 | |
CN107239423A (zh) | 一种基于扩展iic接口的装置 | |
CN107370651A (zh) | 一种spi从机之间的通信方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220609 Address after: 518000 509, west side of electronic plant, building 3, Yanxiang science and Technology Industrial Park, Gaoxin Road, Dongzhou community, Guangming Street, Guangming District, Shenzhen City, Guangdong Province Patentee after: Shenzhen Yanxiang Huishi Technology Co.,Ltd. Address before: 518057 Guangdong city of Shenzhen province Nanshan District high in the four EVOC Technology Building No. 31 Patentee before: EVOC INTELLIGENT TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |