光通信器件中多路I2C器件的实时监控方法 【技术领域】
本发明涉及光通信器件的实时监控,具体涉及光通信器件中多路I2C器件的实时监控方法。
背景技术
I2C总线(INTER IC BUS)是Philips公司开发的一个简单双向两线总线,用于连接微控制器及其外围器件。I2C总线最主要的优点是其简单性和有效性,所有符合I2C总线的器件都具有一个片上接口,使器件之间直接通过I2C总线通讯,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的器件都可以成为主总线,这个设计解决了很多在设计数字控制电路时遇到的接口问题。现在Philips提供了超过150种CMOS和双极性兼容I2C总线的IC。
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况做出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
I2C总线在传输数据开始前,主控器件发送起始位,通知从器件做好接收准备;在传输数据结束时,主控器件发送停止位,通知从器件停止接收。起始位时序:当SCL位为高位时,SDA线由高到低的转换;停止位时序:当SCL位为高位时,SDA线由低到高的转换。SDA上的数据在时钟高电平期间必须保持稳定,在SCL低电平期间才可以改变,输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,每个字节必须有一个确认位(又称应答位ACK),与确认位对应的时钟脉冲由主控器产生,发送器在应答期间必须拉低SDA线。
在光通信器件中,基于I2C总线的器件应用极为广泛,各种光传输模块、时钟模块、AD采样转换模块、电源管理模块都使用I2C总线实现配置的下载和数据的上报。随着通信技术的发展,传输速率越来越快,对数据采集实时性的要求也越来越高。CPU对所管辖的各种具有I2C总线的器件进行配置和监控的行为,占用了CPU的大量资源,同时也降低了数据交互的实时性;而且由于各个厂家的I2C器件的时序特性和操作方法各有不同,造成CPU在和这些器件进行数据交换时容易出现操作超时等很多问题。
另外,由于CPU的I/O口资源有限,能直接接入到CPU的I2C器件数量有限,目前解决多路I2C器件监控问题时通常是通过FPGA器件或CPLD器件扩展CPU的I/O口,具体有两种实现方法:第一种是所有的I2C器件共享一根SCL线或者一根SDA线,另一根连接单独I/O口,然后通过模拟I2C时序的方法依次对各个器件进行;第二种是所有的I2C器件的SCL线和SDA线连接单独的I/O口,然后通过模拟I2C时序的方法依次对各个器件进行操作。随着传输器件复杂性提高,越来越多的I2C器件被实际应用,由于上述两种方法的工作模式为串行模式,造成了以下一些问题:
(1)、虽然扩展了I/O口,可以监控更多的I2C器件,但CPU不能及时处理某个I2C器件,还是只能采取轮询I2C器件的方法,延时太大。
(2)、在光传输系统中,I2C器件的数据变化往往具有随机性和突发性,而上述方法的读写操作都需要CPU主动发起,且一次只能操作一个I2C器件,这样容易造成CPU不能及时获取器件性能的变化信息,从而无法及时做出适当响应,这会对系统的性能造成较大影响。
【发明内容】
本发明所要解决的技术问题是解决光通信器件中,CPU不能及时获取I2C器件性能的变化信息,从而无法及时做出适当响应的问题。
为了解决上述技术问题,本发明所采用的技术方案是提供一种光通信器件中多路I2C器件的实时监控方法,包括以下步骤:
A10、选择需要操作的I2C器件;
A20、配置FPGA内部与每个I2C器件对应的I2C模块中的相关寄存器参数,这些寄存器包括:
时钟预定标寄存器,用于选择时钟频率;
命令寄存器,用于选择操作方式和模块使能;
发送缓存寄存器,用于存储发往I2C器件的数据;
状态寄存器,用于获得模块的工作状态、中断标志和告警标志;
接收缓存寄存器,用于缓存I2C器件送来的数据;
A30、FPGA根据每个I2C模块中命令寄存器的操作方式状态与I2C器件进行数据交换,当操作方式为读操作时,FPGA实时读取I2C器件的数据并存储在对应的I2C模块中的接收缓存寄存器内;当操作方式为写操作时,FPGA将I2C模块中发送缓存寄存器中的数据输出至相应地I2C器件;
A40、CPU通过中断或查询方式获取I2C器件更新的数据。
上述方法中,步骤A40包括以下步骤:
A401、通过硬件中断方式或者寄存器中断标志位的状态获知I2C器件是否有数据更新;
A402、如果无数据更新,则转步骤301继续判断是否有数据更新;否则,则转403;
A403、CPU进入中断服务程序,先禁止该I2C模块的读操作,然后停止缓存数据的更新,读取缓存寄存器中的数据,CPU完成对缓存数据的读取后,再使能I2C模块的读操作,重新启动FPGA对I2C器件的定时数据采集,并清除中断。
命令寄存器和状态寄存器分别通过单字节传输控制器与比特传输控制器进行通讯,发送缓存寄存器和接收缓存寄存器分别通过数据移位控制器与比特传输控制器进行通讯,比特传输控制器通过数据线SDA和时钟信号SCL与I2C器件通讯。
本发明,CPU只需完成相关配置,并根据中断标志完成与FPGA之间的数据读取和写入,而不需要参与和I2C器件的数据通信,因此,用较低的成本完成多路I2C器件的监控,从而极大的简化了系统器件的调试和配置操作,加快研发的速度,保证业务开展的准确性,取得大幅降低运维成本,提升用户满意度的有益效果。
【附图说明】
图1为多路I2C器件的实时监控系统结构示意图;
图2为FPGA内部I2C逻辑模块功能框图;
图3为本发明光通信器件中多路I2C器件的实时监控方法的流程图。
【具体实施方式】
本发明提供的光通信器件中多路I2C器件的实时监控方法,由FPGA内部的I2C处理模块独立完成与多路I2C器件的数据交互,在操作完成后向CPU提供中断标志,软件通过中断或者查询的方式获得中断标志后进入相应的服务程序,完成数据的读取或写入,用较低的成本完成多路I2C器件的监控,从而极大的简化系统器件调配的操作。
下面结合附图和具体实施例对本发明做出详细的说明。
图1为多路I2C器件的实时监控系统结构示意图,图2为FPGA内部I2C逻辑模块功能框图,如图1、图2所示,CPU与FPGA以本地总线方式连接,每个I2C器件的时钟SCL和数据SDA两根线都单独和FPGA的I/O口连接,以达到通过FPGA和多个I2C器件间同时进行数据通信的目的,FPGA通过CPU本地总线将各个I2C器件的状态上报给CPU,同时CPU也可通过本地总线完成对各个I2C器件的配置。每个I2C器件的各自SCL、SDA线分别接入到FPGA内部的各自I2C逻辑模块,每个I2C逻辑模块具备I2C主机模式的单字节读写操作和多字节读写操作功能,并提供读写数据缓存,命令寄存器和状态寄存器分别通过单字节传输控制器与比特传输控制器进行通讯,发送缓存寄存器和接收缓存寄存器分别通过数据移位控制器与比特传输控制器进行通讯,比特传输控制器通过数据线SDA和时钟信号SCL与I2C器件通讯。写操作时,先由软件将需要写入I2C器件的数据写入FPGA的发送数据缓存,使能操作后再由FPGA完成对I2C器件的数据写入;读操作时,使能操作后由FPGA先完成对I2C器件的数据读取,并将读取的数据存放接收数据缓存中,在操作结束后再由软件从FPGA的接收数据缓存中完成数据读取。在需要操作I2C器件时,软件选择需要操作的一个或多个器件,访问器件所对应FPGA内部的I2C模块,通过对寄存器的配置,控制每个I2C器件对应的FPGA内部I2C模块的工作,完成对多个I2C器件同时进行读写操作,读操作由FPGA发起,FPGA在一定周期内完成对I2C器件的读操作,并只在数据发生变化时通知CPU更新数据;写操作由CPU发起,FPGA根据配置完成对I2C器件的写操作。软件通过中断或查询方式判断操作是否完成,并根据操作的类型进行下一步操作。
图3为本发明光通信器件中多路I2C器件的实时监控方法的流程图,如图3所示,该方法包括以下步骤:
A10、选择需要操作的I2C器件;
A20、配置FPGA内部与每个I2C器件对应的I2C模块中的相关寄存器参数,这些寄存器包括:
时钟预定标寄存器,用于选择时钟频率;
命令寄存器,用于选择操作方式和模块使能;
发送缓存寄存器,用于存储发往I2C器件的数据;
状态寄存器,用于获得模块的工作状态和中断标志;
接收缓存寄存器,用于缓存I2C器件送来的数据;
A30、I2C模块使能,FPGA根据每个I2C模块中命令寄存器的操作方式状态与I2C器件进行数据交换,当操作方式为读操作时,FPGA实时读取I2C器件的数据并存储在对应的I2C模块中的接收缓存寄存器内;当操作方式为写操作时,FPGA将I2C模块中发送缓存寄存器中的数据输出至相应的I2C器件;
A40、CPU通过中断或查询方式获取I2C器件更新的数据。
步骤A40包括以下步骤:
A401、CPU通过中断或查询方式判断是否有数据更新;
A402、如果无数据更新,则转步骤401继续判断是否有数据更新;否则,则转403;
A403、CPU进入中断服务程序,先禁止该I2C模块的读操作,然后停止缓存数据的更新,读取缓存寄存器中的数据,CPU完成对缓存数据的读取后,再使能I2C模块的读操作,重新启动FPGA对I2C器件的定时数据采集,并清除中断。
下面以CPU通过FPGA对I2C器件的读操作和写操作分别对本发明提供的方法加以详细说明:
(一)CPU读操作。
第一步:选择一个或多个需要操作的I2C器件。
第二步:配置每个I2C器件所对应FPGA内部I2C模块的相关寄存器,选择时钟频率,器件地址和操作长度。CPU通过操作I2C逻辑模块内部的寄存器,完成对相应I2C器件的监控,即通过配置时钟预定标寄存器选择时钟频率,通过配置命令寄存器选择操作方式和模块使能,通过发送缓存寄存器配置发送数据,通过状态寄存器获得模块工作状态和中断标志,通过接收缓存获得采集数据。
第三步:配置命令寄存器使操作方式为读方式并使能模块,FPGA开始按配置的操作周期(最小周期10毫秒,最大周期60秒)对I2C器件进行主动的读操作。
第四步:FPGA向I2C器件发送起始信号、地址和读写类型信息。
第五步:FPGA判断I2C器件的应答信号是否为有效的低电平,如果是则执行下一步;如不是则上报错误报告并发送结束信号,停止该次读操作。经过已配置的操作周期时间,再次重复该步骤,若握手通信正常继续下一个步骤,否则仍重复该步骤,等待软件的命令是否关断与该I2C器件的通信。
第六步:FPGA开始I2C数据接收,在数据接收过程中,每个字节接收结束后FPGA向I2C器件的发送应答信号,并判断I2C器件是否已接收应答信号,如果是则进行下一个字节的接收;如不是则上报错误报告并发送结束信号,停止该次读操作,经过已配置的操作周期时间,再次从第四步开始执行。若握手通信正常继续下一个步骤,否则仍从第四步开始执行,等待软件的命令是否关断与该I2C器件的通信。
第七步:完成最后一个字节接收后,FPGA向I2C器件的发送应答信号。并判断I2C器件是否已接收应答信号,如果是则向I2C器件发送结束信号,并在操作周期定时到来时回到第四步重新开始对I2C器件的读操作,此时如果发现读取的数据发生变化则产生中断信号通知CPU;如不是则上报错误报告并发送结束信号,停止该次读操作,经过已配置的操作周期时间,再次从第四步开始执行。若握手通信正常继续下一个步骤,否则仍从第四步开始执行,等待软件的命令是否关断与该I2C器件的通信。
第八步:FPGA读取的I2C器件所有数据都存储在FPGA的内部缓存中,CPU通过中断或查询方式判断是否有数据更新,数据若更新,软件进入中断服务程序,先禁止该I2C模块的读操作,停止缓存数据的更新,防止CPU在读缓存数据过程中数据被新的采集数据覆盖,CPU完成对缓存数据的读取后,再使能I2C模块的读操作,重新启动FPGA对I2C器件的定时数据采集,最后清除中断,操作完成。
CPU写操作:
第一步:选择一个或多个需要操作的I2C器件。
第二步:配置命令寄存器禁止这些I2C器件的读操作。
第三步:配置每个I2C器件所对应FPGA内部I2C模块相关寄存器,包括选择时钟频率、器件地址、操作长度和配置操作数据。
第四步:配置操作方式为写方式并使能各模块,FPGA内各I2C模块分别对I2C器件同时开始数据写入。
第五步:FPGA向I2C器件发送起始信号、器件地址和读写类型信息。
第六步:FPGA判断I2C器件的应答信号是否为有效的低电平,如果是则进入下一步;如不是则上报错误报告并发送结束信号,停止操作。CPU可根据各个I2C模块的错误报告通过再次使能模块,重新开始对该路I2C器件的写操作。
第七步:在数据发送过程中,每个字节发送结束后FPGA判断I2C器件的应答信号是否为有效的低电平,如果是则进行下一个字节的发送;如不是则上报错误报告并发送结束信号,停止操作。CPU可根据各个I2C模块的错误报告通过再次使能模块,重新开始对该路I2C器件的写操作。
第八步:最后一个字节发送结束后,FPGA判断I2C器件的应答信号是否为有效的低电平,如果是则产生中断信号通知CPU并向I2C器件发送结束信号;如不是则上报错误报告并发送结束信号,停止操作。CPU可根据各个I2C模块的错误报告通过再次使能模块,重新开始对该路I2C器件的写操作。
第九步:软件通过中断或查询方式判断写操作是否完成,进入中断服务程序,清除中断,操作完成。
上述读操作的第四步到第七步,写操作的第五步到第八步由FPGA独立完成,此期间软件不需要参与,并支持同时多路并行执行。
本发明具有如下有益效果:
(1)、能同时操作多个I2C器件,实时监控I2C器件的数据变化,从而大大提高了数据的实时性;
(2)FPGA内I2C逻辑模块的实时特性减少了软件参与的频率,提高了CPU的使用效率;
(3)、利用FPGA的丰富I/O资源及能支持多种I/O接口电平特性,不同厂家的I2C器件(可以是不同的I2C工作速率,不同供电电源值)可以采用完全通用的I2C逻辑模块驱动程序,减小了维护成本和电平转换器件成本。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下做出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。