一种实现I2C和MDIO通信接口协议转换的方法与流程

文档序号:11950096阅读:6871来源:国知局
一种实现I2C和MDIO通信接口协议转换的方法与流程
本发明涉及一种通信协议相互转换和对接的方法,具体是一种实现I2C和MDIO通信接口协议转换的方法,属于电子器件
技术领域

背景技术
:一般而言,以太网通信用的PHY芯片,通常都支持MDIO接口来实现内部寄存器的访问。目前的高速交换机设备广泛使用SFP接口模块来进行数据传输。SFP模块中有一种RJ45Copper电接口模块,其内部都集成了一个PHY芯片。SFP模块对外的管理通信接口协议是I2C,PHY芯片的对外管理通信接口是MDIO,两者不能直接对接。系统设备一般都不能直接访问PHY内部寄存器,而是通过SFP模块内部的MCU来实现功能的配置。但是由于系统调试及实时监测的需要,系统设备需要能够直接对PHY内部寄存器进行读取和修改。目前,对于1000M以下速率的PHY芯片,MDIO通信协议符合IEEE802.3ae的第22章规定,其访问方式如图1所示。其中,PHYAD只是产品的物理地址,一般由硬件管脚决定;REGAD是寄存器地址,只有五个bit,即最多有32个寄存器。由于内部寄存器数量较少,所以可直接通过I2C的一个256字节的寻址空间来实现。一般使用0xAC的I2C从地址,从而达到与SFP的I2C通信接口模式兼容。对于10Gbpc及以上的应用,IEEE802.3ae标准中对于MDIO通信接口标准有变化,定义在第45章,如图2和图3所示。其中,PRTAD是指产品的物理地址,通常由硬件管脚决定;DEVAD指设备地址,支持32种不同类型的寄存器。每一个DeviceAddress都对应有65536个寄存器(Regsiter),所以有专门的通信帧(Frame)来对寄存器地址(Address)来进行设置。基于这种情况,就没有办法使用I2C的一个从地址来实现PHY寄存器的直接访问。然而,10GBASE_T的SFP模块中必须使用该种PHY芯片,也需要支持PHY芯片寄存器的访问。因此,需要一种I2C接口到MDIO接口的转换机制,从而实现通过I2C接口访问PHY的寄存器。技术实现要素:针对上述现有技术存在的问题,本发明提供一种实现I2C和MDIO通信接口协议转换的方法,该方法通过在10G以上PHY芯片的MDIO与I2C之间形成转换机制,从而实现物理连接。本发明通过以下技术方案来实现上述目的:一种实现I2C和MDIO通信接口协议转换的方法,该方法为重新制定I2C通信帧结构,使其满足MDIO寄存器访问,从而实现实时转换;或者,基于SFP模块的内部寄存器,使用预留的从地址或者寄存器提供MDIO的访问接口,由主机通过寄存器实现MDIO数据的访问。进一步,所述重新制定I2C通信帧结构,使其满足MDIO寄存器访问包括如下步骤:1)对一个寄存器进行写入操作:I2C主机发送起始信号后,发送从地址+写入,收到从机ACK信号之后,发送DeviceAddress,收到从机ACK之后,再发送两个字节的RegisterAddress,高8位在前,再发送需要写入该寄存器的数据,高8位在前,最后发送结束信号;2)对一个寄存器进行读取操作:I2C主机发送起始信号后,发送从地址(+写入,收到从机ACK信号之后,发送DeviceAddress,收到从机ACK之后,再发送两个字节的RegisterAddress,高8位在前,然后发送结束信号;3)读取数据:I2C主机发送起始信号后,发送从地址+读取,收到从机ACK信号之后,从I2C总线上读取一个字节,该字节为读取数据的高8位,主机发送ACK信号,然后继续读取一个字节,该字节为读取数据的低8位,主机发送NACK信号,表示读取完毕,最后发送结束信号。所述步骤3)中,读取的两次通信之间,需要留足够的延时,以便于I2C从机完成MDIO数据的获取。基于SFP模块的内部寄存器,使用预留的从地址或者寄存器提供MDIO的访问接口,由主机通过寄存器实现MDIO数据的访问包括如下步骤:1)对一个寄存器进行写入操作:Step1.设置待访问的DEVAD:将DEVAD值写入I2CA2Page的Byte0x70,Step2.设置待访问的RegisterAddress:将16bitRegisterAddress值分别写入I2CA2Page的Byte0x71和0x72,MSB写入0x71,LSB写入0x72,Step3.设置要写入的16bit数值WriteData将16bitWriteData值分别写入I2CA2Page的Byte0x73和0x74,MSB写入0x73,LSB写入0x74,Step4.写入Command命令将值0x01写入I2CA2Page的Byte0x6E,Step5.等待命令执行Step6.查询执行结果读取A2Page的Byte0x6F,如果状态为Busy,则重复Step5和Step6,如果状态为Fail,则表示命令执行失败,如果状态为Complete,则表示命令执行成功。2)对一个寄存器进行读取操作:Step1.设置待访问的DEVAD:将DEVAD值写入I2CA2Page的Byte0x70,Step2.设置待访问的RegisterAddress:将16bitRegisterAddress值分别写入I2CA2Page的Byte0x71和0x72MSB写入0x71,LSB写入0x72,Step3.写入Command命令将值0x02写入I2CA2Page的Byte0x6E,Step4.等待命令执行Step5.查询执行结果读取A2Page的Byte0x6F,如果状态为Busy,则重复Step4和Step5如果状态为Fail,则表示命令执行失败,如果状态为Complete,则表示命令执行成功,继续执行Step6Step6.读取数据读取A2Page的Byte0x75和0x76,0x75为MSB,0x76为LSB,该16bit值即为读取结果。本发明的有益效果是:该方法实现了IEEE802.3标准上第45章MDIO通信方式与传统I2C通信的协议转换,方便用于10G以上带PHY的模块产品设计,直接沿用原来模块的I2C接口,有效降低了产品设计成本。其中,第一种方式(直接修改I2C通信帧结构的方法)的优势在于实时转换,效率更高,而且不需要额外占用模块的内部寄存器空间。但是为了保证一定的实时性指标,对处理器的执行速率有一定的要求;第二种方式(提供MDIO访问命令的方式)的优势在于,由于是直接利用模块的预留寄存器,所以主机不需要在通信方式上做任何修改,同时对模块内部处理器要求不高,而且有错误显示,错误处理机制更加完善。附图说明图1为现有技术存在的1000M以下速率的PHY芯片访问方式示意图;图2为现有技术存在的10Gbpc及以上应用中MDIO通信接口标准示意图;图3为现有技术中32种不同类型的寄存器示意图;图4为本发明中10G以上PHY芯片功能实现的物理连接示意图。具体实施方式下面将结合本发明的实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。如图4所示:一种实现I2C和MDIO通信接口协议转换的方法,该方法为重新制定I2C通信帧结构,使其满足MDIO寄存器访问,从而实现实时转换;或者,基于SFP模块的内部寄存器,使用预留的从地址或者寄存器提供MDIO的访问接口,由主机通过寄存器实现MDIO数据的访问。实施例一,直接修改I2C通信帧结构的方法:原理位重新制订I2C通信的数据格式,使其满足MDIO寄存器访问的需要。帧结构如下:1)对一个寄存器进行写入操作:I2C主机发送起始信号后,发送从地址(7bit)+写入(W,1bit信号为0),收到从机ACK信号之后,发送DeviceAddress(DEVAD)(其中bit7-bit5为0,bit4-bit0为5bitDeviceAddress),收到从机ACK之后,再发送两个字节(16bit)的RegisterAddress,高8位(MSB)在前,然后再发送需要写入该寄存器的数据(16bitWriteData),高8位(MSB)在前,最后发送结束信号(STOP)。如表一所示。表一:寄存器写入操作流程表2)对一个寄存器进行读取操作:读取操作要分两步,首先是写入寄存器地址:I2C主机发送起始信号后,发送从地址(7bit)+写入(W,1bit信号为0),收到从机ACK信号之后,发送DeviceAddress(DEVAD)(其中bit7-bit5为0,bit4-bit0为5bitDeviceAddress),收到从机ACK之后,再发送两个字节(16bit)的RegisterAddress,高8位(MSB)在前,然后发送结束信号(STOP)。如表二所示。表二:读取过程中写入寄存器地址流程表然后读取数据:I2C主机发送起始信号后,发送从地址(7bit)+读取(R,1bit信号为1),收到从机ACK信号之后,然后从I2C总线上读取一个字节,该字节为读取数据的高8位(ReadDataMSB),主机发送ACK信号,然后继续读取一个字节,该字节为读取数据的低8位(ReadDataLSB),主机发送NACK信号,表示读取完毕,最后发送结束信号(STOP)。如表三所示。表三:读取数据流程表需要注意的是,在读取的两次通信之间,必须预留足够的延时,以便于I2C从机完成MDIO数据的获取。实施例二,提供MDIO访问命令的方式:原理是在SFP模块的内部寄存器的基础上,使用预留的从地址或者寄存器来提供MDIO的访问接口,由主机通过这些寄存器的配置来实现MDIO数据的访问。表四:寄存器表表五:命令寄存器(Command)的说明表表六:状态寄存器(Status)的说明表Status值名称状态说明0x00Idel/Complete空闲/命令执行成功0xFFFail命令执行失败0xBBBusy命令执行中,请等待命令执行结果通过表四至表六,作为参考,从而更好理解提供MDIO访问命令的方式:1)对一个寄存器进行写入操作:Step1.设置待访问的DEVAD:将DEVAD值写入I2CA2Page的Byte0x70。Step2.设置待访问的RegisterAddress:将16bitRegisterAddress值分别写入I2CA2Page的Byte0x71和0x72.MSB写入0x71,LSB写入0x72。Step3.设置要写入的16bit数值WriteData将16bitWriteData值分别写入I2CA2Page的Byte0x73和0x74.MSB写入0x73,LSB写入0x74。Step4.写入Command命令将值0x01写入I2CA2Page的Byte0x6E。Step5.等待命令执行Step6.查询执行结果读取A2Page的Byte0x6F,如果状态为Busy,则重复Step5和Step6.如果状态为Fail,则表示命令执行失败。如果状态为Complete,则表示命令执行成功。2)对一个寄存器进行读取操作:Step1.设置待访问的DEVAD:将DEVAD值写入I2CA2Page的Byte0x70。Step2.设置待访问的RegisterAddress:将16bitRegisterAddress值分别写入I2CA2Page的Byte0x71和0x72.MSB写入0x71,LSB写入0x72。Step3.写入Command命令将值0x02写入I2CA2Page的Byte0x6E。Step4.等待命令执行Step5.查询执行结果读取A2Page的Byte0x6F,如果状态为Busy,则重复Step4和Step5.如果状态为Fail,则表示命令执行失败。如果状态为Complete,则表示命令执行成功,继续执行Step6.Step6.读取数据读取A2Page的Byte0x75和0x76,0x75为MSB,0x76为LSB。该16bit值即为读取结果。以上所举实施例为本发明的较佳实施方式,仅用来方便说明本发明,并非对本发明作任何形式上的限制,任何所属
技术领域
中具有通常知识者,若在不脱离本发明所提技术特征的范围内,利用本发明所揭示技术内容所作出局部更动或修饰的等效实施例,并且未脱离本发明的技术特征内容,均仍属于本发明技术特征的范围内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1