如何模拟mdc/mdio进行数据通讯

一、初识MDC/MDIO

MDC/MDIO是一种串行双线接口,通讯协议按照标准的以太网协议。 MDIO接口在没有传输数据的空闲状态数据线MDIO处于 高阻态 。 MDIO出现一个2bit的开始标识码(01)一个读/写操作开始。 MDIO出现一个2bit数据来标识是 读 (10)还是写操作(01)。 MDIO出现一个5bit数据标识PHY的地址。 MDIO出现一个5bitPHY寄存器地址。 MDIO需要2个时钟的访问时间。 MDIO串行读出/写入16bit的寄存器数据。 MDIO恢复成IDLE状态,同时MDIO进入高阻状态。我们操作目前操作的有以太网phy芯片和光模块内部的phy,虽然都是采用MDC/MDIO来访问,但是区别还是很大的,首先一点是开始位并不相同。

二、MDC/MDIO分类
MDIO前后有两种协议, 包括之前的Clause22 以及之后为了弥补Clause22 寄存器空间不足而出的Clause45, Clause 45 向前兼容Clause 22。1、协议帧格式如下:Clause 22图片: https://uploader.shimo.im/f/8OZcNooYgrychXlB.jpgClause45图片: https://uploader.shimo.im/f/fMG7k8DJtBHDyMzn.png2、时序Clause 22 的时序:图片: https://uploader.shimo.im/f/Ow8vtI8r7BSSArV7.png(write data) 图片: https://uploader.shimo.im/f/1cnXIFeoFIp7DkNb.png(read data)Clause 45 的时序:图片: https://uploader.shimo.im/f/od6BJZTzn2Os3FJ8.png(select register) 图片: https://uploader.shimo.im/f/D6yWmq6EbVm7BYmx.png(write data) 图片: https://uploader.shimo.im/f/3KDnMqwBJ79vCzXp.png(read data)
三、如何解决差异,实现通讯
在尝试用GD芯片官方提供的专用MDC/MDIO访问不到数据之后,改用其他方式,就是通过模拟时序,进行数据交互。因为有两根线,一根是时钟线,另一根是数据线。时钟线需要芯片配置为输出口,数据线因为数据是双向传输,所以在发送数据的时候配置成输出口,在接收数据的时候需要配置成输入口。数据的接收采用位接收。这里有一个很有意思的现象,把专用口设置成普通IO口来模拟也可以进行访问数据。
四、调试过程中出现的问题
1、在调试数据的时候有几个量是需要确定的,分别是物理地址、寄存器地址、设备类型。物理地址和寄存器地址一般都不会错,但是设备类型如果选错了就访问不了。在调试的过程中,以为没一准的格式都是64 位数据,所以在读数据的时候容易回收这个影响,我前面已经选择了地址了,后面度数据的时候是否还需要发送地址,如果不发送地址就不够一帧数据,就是因为这个逻辑,导致前期获取不到数据。其实在读数据的时候,不需要再一次发送地址了,后面那十六位就是等待接收数据了,为了引起误导,附张图,如下:图片: https://uploader.shimo.im/f/e5tCBr6E6pBvapiQ.png后面的16位,就是获取的数据,而不是送地址了。
2、在发送TA的时候其实有一位是高阻状态,高祖状态的设置直接配置成输出口,但是不做上下拉。但是个人觉得这样的切换太麻烦,还需要重新配置,于是直接把高阻态设置成高电平,实现的效果是一样的。可以正常访问数据。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值