批量读取以太网卡光模块中数字诊断信息的装置及方法
技术领域
本发明涉及光通信技术领域,尤其涉及一种批量读取以太网卡光模块中数 字诊断信息的装置及方法。
背景技术
在一块8端口GE(Gigabit Ethernet,千兆以太网)的上联卡上,有8个 光模块,光模块的设备地址是固定的,不可设,即8个光模块拥有相同的I2C 设备地址,,每个光模块都通过一个I2C接口和主控CPU通信。
光模块有两个存储区,第一块存储区的I2C设备地址是A0h,简称A0表格, 第二块存储的I2C设备地址是A2h,简称A2表格。
A0表格存储的主要是模块的一些类型信息,比如光模块的封装、发射波长、 传输距离、速率、厂家信息、模块型号以及生产日期和序列号等。A0表格还有 一些空白保留的字节,这些是留给生产厂家自定义使用以及后续协议增加新的 功能使用的。
A2表格里面的第95至118字节中的内容是光模块的实时数字诊断信息,其 中包括5个工作物理量:
1.工作电压;
2.工作温度;
3.激光器偏置电流;
4模块发射光功率;
5.模块接收光功率。
在工作过程中,CPU经常要查询这5个工作物理量来获取光通信的实时信息。
在一块8端口的GE上联卡上,8个光模块的I2C设备地址都是A0h和A2h。 CPU要想获取光模块的信息,需不同的I2C总线分别和8个光模块通信。
目前读取光模块信息时,主要通过CPLD将CPU的I2C接口的串行时钟线SCL 的时钟信号分为8个独立的时钟信号后分别送到8个光模块,CPLD内设8比特 时钟选通位寄存器,每个寄存器位对应一个光模块的时钟选通信号,当寄存器 的选通位为‘1’时,相对应的光模块的时钟信号选通,可对该光模块进行读取 操作;当寄存器选通位为‘0’时,相对应的光模块的时钟信号断开,不能对该 光模块进行读操作。
CPU通过高速并行总线来写CPLD的时钟选通位寄存器,当需要访问某个光 模块时,将相应的时钟选通位写‘1’,其它时钟选通寄存器位写‘0’,通过I2C 节后完成对这个光模块的的操作。
由于I2C总线是低速总线,速率是100KHz和400KHz可选,即在I2C器件支持的情况下, 最高速率也只有400KHz,即一个时钟周期为2.5uS。一次I2C总线的操作时序约30个时钟周期。
CPU读光模块的实时数字诊断信息时,不能直接地同时和8个光模块通信, 是轮流将每路光模块的I2C时钟选通,分别读出各光模块数据的,系统需要实时 地获取光模块诊断信息以了解光模块及光线路上的工作状态,CPU需频繁地操作 I2C总线,占用了较多的CPU资源,系统工作效率低下。
发明内容
本发明的目的是为解决目前CPU读光模块的实时数字诊断信息时,不能直 接地同时和多个光模块通信,而需轮流将每路光模块的I2C时钟选通,分别读出 各光模块数据,需频繁地操作I2C总线,占用了CPU资源多,系统工作效率低下 的技术问题。
为了解决上述技术问题,一方面,本发明提供一种批量读取以太网卡光模 块中数字诊断信息的装置,所述光模块具有多个,其特征在于,所述装置用于 一次同时读取各所述光模块,包括CPU和CPLD,所述CPU具有I2C接口,所述I2C接 口的串行数据线连接到各所述光模块的I/O端口,所述I2C接口的串行时钟线连接 到所述CPLD,所述CPLD适于将所述串行时钟线上的串行时钟信号转换成多路并 行时钟信号,所述多路并行时钟信号分别连接到各所述光模块的时钟信号输入 端;所述CPLD适于选通各所述光模块的时钟信号并适于定位各所述光模块的设 备地址及光模块的寄存器地址,所述CPU根据所述光模块的设备地址及光模块的 寄存器地址同时读取各所述光模块寄存器中的数字诊断信息;
所述多路并行时钟信号具有同步的写操作时序、异步的写操作应答时序和 异步的读操作时序;所述写操作时序为所述CPLD向各所述光模块传送数据的时 序,所述写操作应答时序为各所述光模块接收到数据后向所述CPU反馈应答信号 的时序,所述读操作时序为所述CPU读取各所述光模块中寄存器数据的时序。
进一步地,所述CPLD包含存储有光模块设备地址及操作码的寄存器A、存 储有光模块寄存器地址的寄存器组B、存储有各光模块时钟信号选通位的寄存器 C和光模块并行时钟生成模块;
所述寄存器A为8位,其中所述光模块设备地址占据高7位,所述操作码 位于最低位,所述操作码为读写操作控制码;所述寄存器A通过并行总线连接 到所述CPU,所述CPU通过所述I2C接口的串行数据线将所述寄存器A的数据发 送至各所述光模块;
所述寄存器组B包含多个寄存器Bn,各所述寄存器Bn分别存储有不同光模 块寄存器的地址;所述光模块寄存器中存储有数字诊断信息;所述寄存器组B 通过并行总线连接到所述CPU,所述CPU通过所述I2C接口的串行数据线将所述 寄存器组B的数据发送至各所述光模块;
所述CPU通过并行总线将光模块时钟信号选通位写入所述寄存器C,所述 I2C接口的串行时钟线和所述寄存器C分别连接到所述光模块并行时钟生成模 块,所述光模块并行时钟生成模块的并行时钟信号输出端连接到各所述光模块 的时钟信号输入端。
另一方面,本发明提供一种批量读取以太网卡光模块中数字诊断信息的方 法,所述光模块具有多个,所述方法用于一次同时读取各所述光模块,包括如 下步骤:
(1)CPU产生数据传输启动信号;
(2)CPLD通过所述CPU的I2C接口的串行数据线向各所述光模块同时传送光 模块的设备地址和读操作的操作码,向各所述光模块传送光模块的设备地址和 读操作的操作码使用的时钟信号具有同步的时序;
(3)各所述光模块成功接收所述光模块的设备地址和读操作的操作码后向 所述CPU反馈第一应答信号,各所述光模块向所述CPU反馈第一应答信号使用的 时钟信号具有异步的时序;
(4)所述CPLD通过所述CPU的I2C接口的串行数据线向各所述光模块同时传 送光模块的寄存器地址,向各所述光模块传送光模块的寄存器地址使用的时钟 信号具有同步的时序;
(5)各所述光模块成功接收所述光模块的寄存器地址后向所述CPU反馈第 二应答信号,各所述光模块向所述CPU反馈第二应答信号使用的时钟信号具有异 步的时序;
(6)各所述光模块向所述CPU的I2C接口的串行数据线传送所述光模块的寄 存器中的数字诊断信息,各所述光模块向所述CPU传送所述数字诊断信息使用的 时钟信号具有异步的时序;
(7)所述CPU成功接收所述数字诊断信息后向各所述光模块反馈第三应答 信号;
(8)所述CPU产生数据传输停止信号,完成一次数据读取。
进一步地,所述步骤(2)中,所述CPU通过I2C接口的串行数据线SDA向各 所述光模块同时传送七位设备地址“1010001”和一位读操作的操作码“1”。
进一步地,所述步骤(3)中,各所述光模块分别在各自时钟的低电平期间, 将低电平的所述第一应答信号送到所述I2C接口的串行数据线上。
进一步地,所述步骤(5)中,各所述光模块分别在各自时钟的低电平期间, 将低电平的所述第二应答信号送到所述I2C接口的串行数据线上。
进一步地,所述步骤(6)中,各所述光模块在各自时钟信号的前8个低电 平期间将一个字节的数字诊断信息送到所述CPU的I2C接口的串行数据线SDA 上,在各自时钟信号的第9个低电平期间,释放所述数据线SDA。
进一步地,所述步骤(7)中,所述CPU通过拉低I2C接口的串行数据线SDA 上的电平向各光模块反馈所述第三应答信号。
进一步地,所述步骤(8)中,所述CPU在I2C接口的串行时钟线SCL保持 高电平期间,释放串行数据线SDA,使得串行数据线SDA返回高电平,通过串行 数据线SDA发生正跳变产生数据传输停止信号。
本发明利用多个光模块的I2C设备地址相同的特点,通过CPLD中的光模块 并行时钟生成模块产生的I2C串行时钟时序,该时序能保证多个光模块向同一 I2C串行数据线传送数据的时候时序错开,总线不冲突,实现批量一次同时读取 多个光模块的数字诊断信息的功能。现有的技术中,读1个光模块的1个寄存 器需要约30个I2C时钟周期,读8个光模块需要约240个时钟周期,本发明一 次同时读8个光模块的1个寄存器约需100个时钟周期,效率提高1倍以上, 大大减少占用的CPU资源,极大提高了系统的工作效率。
附图说明
图1为本发明所述装置的实施例的原理框图;
图2为本发明所述方法一个实施例的流程图;
图3为本发明所述方法另一个实施例的流程图;
图4为本发明读取一次光模块数据的I2C总线时序图;
图5为本发明一次同时读取八个光模块的完整时序图。
图中,1-8:第一GE光模块-第八GE光模块;9:CPLD;901:GE光模块的 设备地址和操作码的寄存器;902:GE光模块寄存器地址的寄存器组;903:GE 光模块时钟选通寄存器;904:八个GE光模块并行时钟生成模块;10:CPU。
具体实施方式
现在结合附图和实施例对本发明作进一步详细的说明。这些附图均为简化 的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关 的构成,且其不应理解为对本发明的限制。
如图1所示的实施例,并参考图4和图5,本发明的批量读取以太网卡光模 块中数字诊断信息的装置,光模块具有8个,即第一GE光模块1至第八GE光 模块8,本装置可用于一次同时读取这8个GE光模块,包括CPU10和CPLD9, CPU具有I2C接口,I2C接口的串行数据线SDA分别连接到8个GE光模块1-8的 I/O端口,CPLD10包含存储有光模块设备地址及操作码的寄存器901、存储有光 模块寄存器地址的寄存器组902、存储有各光模块时钟信号选通位的寄存器903 和光模块并行时钟生成模块904;寄存器901为8位,其中各GE光模块1-8的 设备地址占据高7位,如为二进制的“1010001”,一位读/写操作码位于最低 位,可用二进制的“1”表示读操作,“0”表示写操作,本实施例中为读操作; 寄存器901通过并行总线连接到CPU10,CPU10通过I2C接口的串行数据线SDA 将寄存器901中的7位地址“1010001”及1位读操作码“1”同时发送至各GE 光模块1-8,即各GE光模块1-8具有相同的设备地址和进行相同的读操作;
寄存器组902包含多个寄存器B1、B2……Bn,各寄存器Bn中分别存储有各 GE光模块1-8的寄存器的地址,如A2表格里面的第95至118字节的地址,GE 光模块寄存器中存储有数字诊断信息,其中包括工作电压、工作温度、激光器 偏置电流、模块发射光功率和模块接收光功率5个工作物理量,寄存器组902 通过并行总线连接到CPU10,CPU10通过I2C接口的串行数据线SDA将寄存器组 902的数据同时发送至各GE光模块1-8,即各GE光模块1-8具有相同的寄存器 地址;
CPU10通过并行总线将光模块时钟信号选通位写入寄存器903,I2C接口的串 行时钟线CPU_SCL和寄存器903分别连接到光模块并行时钟生成模块904,光模块 并行时钟生成模块904的并行时钟信号输出端连接到各GE光模块1-8的时钟信号 输入端,并行时钟生成模块904可将I2C接口的串行时钟线CPU_SCL的串行时钟信 号CPU_SCL转换成多路并行时钟信号SCL1-SCL8,多路并行时钟信号SCL1-SCL8分 别连接到各GE光模块1-8的时钟信号输入端;寄存器903可选通各GE光模块1-8的 时钟信号,如对寄存器903的8个选通位均置“1”,则8个GE光模块1-8均被选通, 可同时进行读操作;CPU10根据各GE光模块1-8的设备地址及各GE光模块1-8的寄 存器地址同时读取各GE光模块1-8寄存器中的数字诊断信息;
如图5所示,多路并行时钟信号SCL1-SCL8具有同步的写操作时序,即在图5 中,CPU10向各GE光模块1-8发送“光模块地址”和“光模块寄存器地址”时, 时钟信号SCL1-SCL8的时序同步;具有异步的写操作应答时序,即在图5中,各 GE光模块1-8向CPU10发送“光模块1-8的ACK1”(即第一应答信号)和“光模块 1-8的ACK2”(即第二应答信号)时,时钟信号SCL1-SCL8的时序异步,从SCL1 到SCL8,依次晚一个时钟周期变为低电平;具有异步的读操作时序,即在图5中, 各GE光模块1-8向CPU10发送“光模块1数据”、“光模块2数据”……“光模块8 数据”时,时钟信号SCL1-SCL8的时序异步,从SCL1到SCL8,依次晚8个时钟周 期变为低电平,这样就保证了CPU10能一次同时读取8个GE光模块1-8中同一地址 寄存器的数字诊断信息,而不会发生I2C总线冲突。
如图2所示的实施例,并参考图4和图5,本发明的批量读取以太网卡光模 块中数字诊断信息的方法,包括如下步骤:
S100、CPU产生数据传输启动信号;
S110、CPLD通过CPU的I2C接口的串行数据线SDA向各光模块同时传送光 模块的设备地址和读操作的操作码,向各光模块传送光模块的设备地址和读操 作的操作码使用的时钟信号SCL1-SCL8具有同步的时序;
S120、各光模块成功接收光模块的设备地址和读操作的操作码后向CPU反 馈第一应答信号ACK1,各光模块向CPU反馈第一应答信号ACK1使用的时钟信号 SCL1-SCL8具有异步的时序;
S130、CPLD通过CPU的I2C接口的串行数据线SDA向各光模块同时传送光 模块的寄存器地址,向各光模块传送光模块的寄存器地址使用的时钟信号 SCL1-SCL8具有同步的时序;
S140、各光模块成功接收光模块的寄存器地址后向CPU反馈第二应答信号 ACK2,各光模块向CPU反馈第二应答信号ACK2使用的时钟信号SCL1-SCL8具有 异步的时序;
S150、各光模块向CPU的I2C接口的串行数据线SDA传送光模块的寄存器中 的数字诊断信息,各光模块向CPU传送数字诊断信息使用的时钟信号SCL1-SCL8 具有异步的时序;
S160、CPU成功接收数字诊断信息后向各光模块反馈第三应答信号ACK3;
S170、CPU产生数据传输停止信号,完成一次数据读取。
如图3所示的实施例,并参考图4和图5,本发明的批量读取以太网卡光模 块中数字诊断信息的方法,包括如下步骤:
S200、CPU产生数据传输启动信号;
S210、CPU通过I2C接口的串行数据线SDA向各光模块同时传送七位设备地址“1010001”和一位读操作的操作码“1”,向各光模块传送光模块的设备地址 和读操作的操作码使用的时钟信号SCL1-SCL8具有同步的时序;
S220、各光模块分别在各自时钟SCL1-SCL8的低电平期间,将低电平的第 一应答信号ACK1送到I2C接口的串行数据线SDA上;
S230、CPLD通过CPU的I2C接口的串行数据线SDA向各光模块同时传送光 模块的寄存器地址,向各光模块传送光模块的寄存器地址使用的时钟信号 SCL1-SCL8具有同步的时序;
S240、各光模块成功接收光模块的寄存器地址后向CPU反馈第二应答信号 ACK2,各光模块分别在各自时钟的低电平期间,将低电平的第二应答信号ACK2 送到I2C接口的串行数据线SDA上,各光模块向CPU反馈第二应答信号ACK2使 用的时钟信号SCL1-SCL8具有异步的时序;
S250、各光模块在各自时钟信号的前8个低电平期间将一个字节的数字诊 断信息送到CPU的I2C接口的串行数据线SDA上,在各自时钟信号的第9个低电 平期间,释放数据线SDA,各光模块向CPU传送数字诊断信息使用的时钟信号 SCL1-SCL8具有异步的时序;
S260、CPU通过拉低I2C接口的串行数据线SDA上的电平向各光模块反馈第三 应答信号ACK3;
S270、CPU在I2C接口的串行时钟线SCL保持高电平期间,释放串行数据线SDA, 使得串行数据线SDA返回高电平,通过串行数据线SDA发生正跳变产生数据传输 停止信号,完成一次数据读取。
I2C总线的所有器件的SDA、SCL引脚的输出驱动都为漏极开路结构,如图1 所示,通过外接的上拉电阻R1-R10将总线上的所有节点的SDA、SCL信号上拉到 电源电平VCC,实现线与的逻辑关系。
如图4所示,I2C的总线时序主要包括以下几个信号状态:
1.总线空闲状态:此时每个I2C设备都释放总线,数据线SDA和时钟线SCL被 上拉电阻拉高。
2.启动信号:在SCL保持高电平期间,数据线SDA上的电平被主设备(如CPU) 拉低,产生负跳变,定义为I2C总线的启动信号,标志这一次数据传输的开始。 在建立该信号之前,总线必须是空闲状态。
3.数据位传送:I2C总线每一位数据位都和一个时钟脉冲相对应,在串行时 钟SCL的配合下,在SDA上逐位地串行传送每一位数据。数据传送时,在SCL呈现 高电平期间,SDA上的电平必须保持稳定,只有在SCL为低电平期间,才允许SDA 上的电平改变状态。
4.应答信号:I2C总线上所有数据都是8位字节传送的,发送器每发送一个字 节,就在第9个时钟脉冲释放数据线,由接收器反馈一个应答信号。应答信号低 电平时有效,表示接收器已经成功地接收了该字节。对于有效应答位ACK的要求 是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时 钟的高电平期间SDA为稳定的低电平。
5.停止信号:在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返 回高电平,发生正跳变,称为I2C总线的停止信号,标志着一次传输的终止。停 止信号是主控器(如CPU)主动建立的,建立停止信号后,总线将返回空闲状态。
在图4中,数据位传输包括三个部分:
1.地址1和读写操作码的传送:地址1是光模块的设备地址,固定为7-bit 1010000(A0h)或7-bit 1010001(A2h);在本发明中关注的是地址是1010001 (A2h)。操作码是读写命令,高为读操作,低为写操作,在本发明中关注的是 读操作。地址1和读写操作码由CPLD中的相应寄存器通过CPU发出。
2.地址2的传送:地址2是光模块的寄存器的8-bit地址,本发明中关注的是 第95字节至第118字节的地址空间,这部分的寄存器中存储的是光模块的实时数 字诊断信息。地址2由由CPLD中的相应寄存器通过CPU发出。
3.数据的传送。如果是写操作,数据字节由主设备发到数据线SDA上,如果 是读操作,数据字节由从设备发到数据线SDA上。在本发明中关注的是读操作, CPU是主设备,光模块是从设备,这部分数据为光模块的寄存器中存储的实时数 字诊断信息,由光模块发送到数据线SDA上。
以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关工作 人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。 本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利要求范围 来确定其技术性范围。