提高PON模块I2C读取速率的方法与流程

文档序号:20840383发布日期:2020-05-22 17:25阅读:178来源:国知局
提高PON模块I2C读取速率的方法与流程
本发明涉及网络传输
技术领域
,尤其是涉及一种提高pon模块i2c读取速率的方法。
背景技术
:pon是一种典型的无源光纤网络,是指(光配线网中)不含有任何电子器件及电子电源,odn全部由光分路器(splitter)等无源器件组成,不需要贵重的有源电子设备。一个无源光网络包括一个安装于中心控制站的光线路终端(olt),以及一批配套的安装于用户场所的光网络单元(onus)。在olt与onu之间的光配线网(odn)包含了光纤以及无源分光器或者耦合器。pon系统结构主要由中心局的光线路终端(olt:opticallineterminal)、包含无源光器件的光分配网(odn:opticaldistributionnetwork)、用户端的光网络单元/光网络终端(onu/ontopticalnetworkunit/opticalnetworkterminal)组成,其区别为ont直接位于用户端,而onu与用户之间还有其它网络(如以太网)以及网元管理系统(ems)组成,通常采用点到多点的树型拓扑结构。当cpu需要通过i2c访问多个相同地址的从设备时,需要用到i2c切换芯片。通过先访问i2c切换芯片的地址,然后写寄存器选择选通哪一路i2c,然后和选通的i2c通信。此类芯片因为选择较少,质量过关的都是国外知名品牌,而且由于用量不是特别巨大,导致其价格比较昂贵,交期不好。如果不使用切换芯片,则需要在cpu出多路的i2c,一般的cpu最多2-3路i2c,对现有的设备而言远远不够。此外,由于通常情况下pon模块i2c通信速率为100khz,按照i2c切换的读取方式,需要每个模块串行读取,这就需要不断地重复切换通道来实现对某一路pon模块的读取操作,这大大限制了i2c切换读取方式的速率,使得其读取速率远远不能满足网页快速显示的要求。技术实现要素:有鉴于此,有必要针对上述的问题,提供一种提高pon模块i2c读取速率的方法,将pon模块按照100ms的间隔提前读到cpld模块后,再用spi速率读取,采用32mbps的spi速率,大大提高读取速率,从而满足网页快速显示的要求。为实现上述目的,本发明是根据以下技术方案实现的:一种提高pon模块i2c读取速率的方法,包括以下步骤:步骤s1:采用cpld对多路pon模块进行数据读取并写入寄存器;步骤s2:通过spi接口读取cpld中的寄存器。进一步地,上述步骤s1具体包括以下步骤:步骤s101:定义cpld的逻辑地址,对每路pon模块读取的数据进行寄存器分配,默认pon模块的地址为a0(即10100000),默认初始情况sda为输入状态,scl一直处于输出状态,scl1,scl2…scl(n)由cpld内部产生,电平检测为scl的上升沿检测,管脚改为od门类型;步骤s102:按照i2c标准协议,当scl为高时,sda由高变低时表示i2cstart,逻辑开始在scl的上升沿检测数据并暂存在定义好的寄存器,当start信号开始后的第8个上升沿,检测sda电平,此时电平为1时,表示cpld对pon模块进行读取操作,将读取的数据写入到相应的寄存器中。进一步地,上述步骤s2具体包括以下步骤:步骤s201:根据spi标准协议,cpu通过spi接口,用片选(cs)信号选中cpld,此时cpld就是一个从spi设备,cpu就会进行下一步操作;步骤s202:cpu通过访问之前定义好的寄存器映射表相应地址,根据spi通信原理主从设备移位寄存器数据互换,从而cpu就会得到pon模块的数据。本发明的优点和积极效果是:olt设备下挂的pon模块通过i2c与cpld连接再通过spi连接到cpu,因为所有pon模块i2c地址一样,需要用到i2c开关切换芯片,以16端口pon设备为例,需要用到16路i2c,至少需要2颗8路的i2c切换芯片。每颗i2c切换芯片8元左右,4颗成本达到16元。而选用的1片逻辑包含108个gpio,速率能够达到200m左右,可以做到超过50路i2c,而成本只要1.6美金,几乎只相当于一颗8路开关切换芯片的价格,同传统的方案相比,本方法具有更低廉的价格,更多路数,更快速,采购也更为方便;通过spi接口进行数据读取时速率能达到32mbps,而i2c的速率通常只有100kbps,相比而然spi的读取速率要远超i2c读取速率;spi读取方式不像i2c读取那样,需要不断的重复切换通道来实现某一路pon模块的读取操作,从而使得spi的读取速率可以达到32mbps,这是i2c远不能达到的,同cpld切换通道通过i2c读取pon模块方案比,使用spi读取速率更快速,更简便。因为i2c是单端信号,olt设备板较大,时钟边沿在长距离传输后上升沿有一定程度的变缓,在cpld产生时钟分出去,这是i2c切换芯片不具备的。对于数据检测,因为从i2c的时钟是经过逻辑处理的,因此可以控制检测点的提前和延后。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明的cpld的信号连接示意图;图2为本发明的spi访问cpld操作步骤图;图3为本发明的pon模块数据读取操作步骤图;图4为本发明的一个具体实施方式的原理示意图。具体实施方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合附图和具体的实施例对本发明的技术方案进行详细说明。需要指出的是,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。i2c总线是由philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件,然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下,主机负责产生定时时钟和终止数据传送。sda(串行数据线)和scl(串行时钟线)都是双向i/o线,接口电路为开漏输出,当总线空闲时,两根线都是高电平。发送到sda线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(msb),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线scl保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线scl后数据传输继续。cpld(complexprogrammablelogicdevice)复杂可编程逻辑器件,是从pal和gal器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。cpld主要是由可编程逻辑宏单元(mc,macrocell)围绕中心的可编程互连矩阵单元组成。其中mc结构较复杂,并具有复杂的i/o单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于cpld内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。spi是串行外设接口(serialperipheralinterface)的缩写,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为pcb的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议。spi在发送接口和接收接口都有各自的数据通道和流控状态信息通道,其数据通道和流控状态信息通道是独立的并且是点对点通信,数据是以包的形式发送,根据数据包中的内嵌地址可支持高达256个端口。spi是一种高速、高效率的串行接口技术,通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。spi是一个环形结构,通信时需要至少4根线(事实上在单向传输时3根线也可以),也是所有基于spi的设备共有的,它们是miso(主设备数据输入)、mosi(主设备数据输出)、sclk(时钟)、cs(片选)。其中,cs是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个spi设备成为可能。本发明提供了一种提高pon模块i2c读取速率的方法,包括以下步骤:步骤s1:采用cpld对多路pon模块进行数据读取并写入寄存器;步骤s2:通过spi接口读取cpld中的寄存器。进一步地,上述步骤s1具体包括以下步骤:步骤s101:定义cpld的逻辑地址,对每路pon模块读取的数据进行寄存器分配,默认pon模块的地址为a0(即10100000),默认初始情况sda为输入状态,scl一直处于输出状态,scl1,scl2…scl(n)由cpld内部产生,电平检测为scl的上升沿检测,管脚改为od门类型;对每路pon模块读取的数据进行寄存器分配时的映射关系如下(以16路pon模块为例):123n16温度000102……0f电压101112……1f功率202122……2f电流303132……3f步骤s102:按照i2c标准协议,当scl为高时,sda由高变低时表示i2cstart,逻辑开始在scl的上升沿检测数据并暂存在定义好的寄存器,当start信号开始后的第8个上升沿,检测sda电平,此时电平为1时,表示cpld对pon模块进行读取操作,将读取的数据写入到映射好的寄存器中,例如:读取第n路pon模块的温度、电压、功率、电流并分别写入寄存器的(n-1)0、(n-1)1、(n-1)2、(n-1)3;当start信号开始后的第8个上升沿,检测sda电平,此时电平为0时,表示cpld对pon模块进行写入操作,将cpld寄存器的数值写入到pon模块,例如:将cpld寄存器中的(n-1)0、(n-1)1、(n-1)2、(n-1)3的数值写入到第n路pon模块的温度、电压、功率、电流的地址中,此时,等待下一个start信号,重新恢复初始态并执行。进一步地,上述步骤s2具体包括以下步骤:步骤s201:根据spi标准协议,cpu通过spi接口,用片选(cs)信号选中cpld,此时cpld就是一个从spi设备,cpu就会进行下一步操作;步骤s202:cpu通过访问之前定义好的寄存器映射表相应地址,根据spi通信原理主从设备移位寄存器数据互换,从而cpu就会得到pon模块的数据。图2为本发明的spi访问cpld操作步骤图。第一个上升沿来的时候,sdo将寄存器中的最高位发送出去,寄存器中的数据左移一位,后面补入送来的一位未知数,此时数据将会是sdo=1、寄存器=0101010x;下降沿到来的时候,sdi上的电平将锁存到寄存器中的最后一位,那么这时寄存器=0101010sdi,这样8个时钟脉冲以后,两个寄存器的内容相互交换一次,这样就完成一个spi时序。这里举个例子说明通信过程,例:假如主机和从机初始化就绪,主机的buffer=0xaa,从机的buffer=0x55,下面将分步把spi的8个时钟周期的数据情况演示一遍,设上升沿为发送数据:这样就完成了两个寄存器8位的交换,上面的上表示上升沿,下表示下降沿,sdi、sdo相对于主机而言。其中cs引脚作为主机的时候,从机可以把它拉低被动选为从机,作为从机的时候,可以作为片选的引脚。根据以上的分析,一个而完成一次完整的传送周期需要2个8位时钟周期,因为首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个8位时钟周期才能把数据读回来。此处只做读操作,所以忽略写操作。图3为本发明的pon模块数据读取操作步骤图。“s”表示i2c访问的开始信号,scl为高电平,sda由高变低;“pon模块i2c地址”,表示需要访问的pon模块的i2c地址,1010000;“0”表示写的意思,低电平,即主i2c写pon模块操作;“a”表示应答,低电平,表示pon模块收到有效的指令对主i2c的应答;“pon模块物理地址”是pon模块存储信息的物理地址,从00000000至11111111;“a”表示应答,低电平,表示pon模块收到有效的指令对主i2c的应答;“s”表示i2c访问的重复开始信号,scl为高电平,sda由高变低;“pon模块i2c地址”,表示需要访问的pon模块的i2c地址,1010000;“1”表示读的意思,高电平,即主i2c写读模块操作;“a”表示应答,低电平,表示pon模块收到有效的指令对主i2c的应答;“pon模块数据”表示pon模块将pon模块物理地址里面的数据发送给主i2c;“/a”表示一个读操作结束,高电平,表示主i2c不对pon模块应答;“p”表示结束,scl为高,sda由低变高。图4为本发明的一个具体实施例,根据附图4,首先对cpld进行初始化,定义寄存器,对每路pon模块读取的数据进行寄存器分配;然后cpld通过i2c对每路pon模块进行数据读取参照图3;然后cpld将读取的每路数据存储在定义好的寄存器中(这里可以根据需要设定多长时间或者当spi访问时触发cpld读取pon模块数据);最后cpu通过spi接口访问之前定义好的寄存器映射表相应地址,读取cpld存储pon模块数据的寄存器,从而获取数据。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明的保护范围应以所附权利要求为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1