mdio协议

1. 简介

        MDIO接口中有特定的术语定义总线上的各种设备,驱动MDIO总线的设备被定义为站管理实体(STA),而被MDC管理的目标设备称为可被MDIO管理的设备(MMD)。

        STA初始化MDIO所有的通信,同时负责驱动时钟MDC。

2. 22号条款

        22号条款的MDIO通信的帧格式定义如下:

 3. 45号条款

        扩充了帧格式,能够访问更多的设备和寄存器,45号MDIO通信帧格式如下:

        地址空间从5位增加到16位,这使得STA访问65536个不同的寄存器。

        45号协议在数据帧的组成部分进行了一些变化,定义了新的ST代码(00),用于标识第45号条款的数据帧。

4. mdio总线的match方法

        mdio总线的match方法为mdio_bus_match,其主要实现如下三方面的匹配检测功能:

        1.先进行设备树驱动模型的支持(若系统支持设备树,则先调用该接口进行匹配检测,主要是将phy_driver与phy_device设备树节点的compatible变量进行匹配检测),若匹配则返回匹配成功;

        2.若1没有匹配成功,则确认phy_driver是否提供了match_phy_device方法,若提供匹配检测方法,则再次进行匹配检测,若匹配成功,则返回成功;

        3.若以上均没有匹配成功,则判断phy_device的phyid与phy_driver支持的phyid进行匹配检测,若匹配成功则返回成功。

static int mdio_bus_match(struct device *dev, struct device_driver *drv)
{
	struct mdio_device *mdio = to_mdio_device(dev);

	if (of_driver_match_device(dev, drv))	//compatible匹配
		return 1;

	if (mdio->bus_match)
		return mdio->bus_match(dev, drv);

	return 0;
}

struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
				     bool is_c45,
				     struct phy_c45_device_ids *c45_ids)
{
	mdiodev->bus_match = phy_bus_match;//真正实现PHY设备和驱动匹配的函数
}

static int phy_bus_match(struct device *dev, struct device_driver *drv)
{
	struct phy_device *phydev = to_phy_device(dev);
	struct phy_driver *phydrv = to_phy_driver(drv);
	const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids);
	int i;

	if (!(phydrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY))
		return 0;

	if (phydrv->match_phy_device)
		return phydrv->match_phy_device(phydev);//调用phy_driver提供的match_phy_device方法

	if (phydev->is_c45) {
		for (i = 1; i < num_ids; i++) {
			if (phydev->c45_ids.device_ids[i] == 0xffffffff)
				continue;

			if ((phydrv->phy_id & phydrv->phy_id_mask) ==
			    (phydev->c45_ids.device_ids[i] &
			     phydrv->phy_id_mask))
				return 1;
		}
		return 0;
	} else {
		return (phydrv->phy_id & phydrv->phy_id_mask) ==
			(phydev->phy_id & phydrv->phy_id_mask);	//对比phydev和phydrv里的phy_id是否相同
	}
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IEEE MDIO协议是一种在通信设备中用于管理PHY(物理层)设备的通信协议MDIO代表管理数据输入/输出,它定义了用于PHY和主控设备之间的通信接口和通信规则。 MDIO协议的主要作用是让主控设备能够通过统一的接口控制和配置多个PHY设备。主控设备可以发送命令和数据来读取和写入PHY设备的寄存器,从而控制PHY设备工作的各个方面,比如连接速度、工作模式、故障检测等。MDIO协议还允许主控设备查询PHY设备的状态信息,如链路状态、噪声电平等。 MDIO协议采用了一对数据线(MDIO和MDC)进行传输。MDC(管理数据时钟)负责提供时钟信号,而MDIO(管理数据输入/输出)线用于传输数据。数据传输采用串行方式,由主控设备控制时钟信号的频率来实现速度的调控。 在MDIO协议中,每个PHY设备都有一个唯一的地址,主控设备在与PHY设备通信时需要指定PHY的地址。主控设备通过发送特定格式的命令和数据包来与PHY设备进行通信。 MDIO协议还定义了一种监控机制,通过周期性发送消息,主控设备能够检测PHY设备的存在和状态。如果PHY设备没有回复,则说明可能存在通信故障或设备故障。 总的来说,IEEE MDIO协议提供了一种标准化的接口和通信规则,使得主控设备能够方便地控制和配置多个PHY设备。它在网络设备中广泛应用,使得网络设备的管理和维护更加简单和可靠。 ### 回答2: IEEE MDIO协议,全称为Institute of Electrical and Electronics Engineers多功能数字输入/输出接口协议。这是一种用于物理层设备之间通信的串行协议。 IEEE MDIO协议定义了两种设备之间进行数据传输的方法,其中包括一个主设备(Master)和多个从设备(Slave)。这些设备可以是各种不同的网络设备,如以太网交换机、路由器、网络适配器等。 MDIO协议通过串行通信线,使用两根信号线进行数据传输。其中,MDIO信号线用于传输数据和命令,MDC信号线用于定时和同步。 MDIO协议使用了帧格式来组织数据传输,其中包括帧开始、操作类型、PHY地址、寄存器地址、数据和校验等字段。主设备可以通过发送读操作或写操作来访问从设备的寄存器,并在数据字段中传输所需的数据。 MDIO协议具有灵活性和可扩展性,可以支持不同的扩展功能。例如,其中包括PHY管理接口(PHY Management Interface),可以用于管理和配置以太网物理层设备的参数,如速率、信道、功耗等。 总的来说,IEEE MDIO协议是一种用于物理层设备之间通信的协议,它提供了一种简单有效的方式来进行设备间的数据传输和管理。它在以太网和其他网络设备中得到了广泛的应用,可以提高网络设备的可管理性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值