Linux ARM平台开发系列讲解(网络篇)1.4 MDIO总线设备phy device设备ID定义和获取

1. 概述

除了phy通信时得address外,每个phy出厂前还有厂家的唯一标识,因为phy都遵循国际802标准,所以寄存器PHYID1PHYID2两个寄存器就负责存储该信息,以RTL8211F为例,如下图:
在这里插入图片描述

2. 扫描存在的phy并添加到mii_bus

mii_bus会自动扫描新添加的phy,其机制就是扫描PHYID寄存器,若有返回值,则说明PHY存在,将其ID添加到mii_bus总线上,具体源码实现如下:

  • 源码路径:drivers\net\phy\mdio_bus.c
struct phy_device 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux 中的 mdio 是一种管理数据输入/输出 (MDIO) 协议,用于与以太网物理层器件 (PHY) 进行通信。PHY 是用来将以太网数据转换为传输介质能够接受的信号的一种芯片,它与主处理器相连,并通过 MDIO 接口进行通信。 在 Linux 中,MDIO 的读取过程通常需要以下步骤: 1. 获取 mdio_bus 结构体:首先,我们需要获取一个 mdio_bus 结构体,它表示 MDIO 控制器的总线,该总线上连接了一个或多个 PHY。我们可以使用函数 `mdio_bus_alloc()` 来动态分配一个 mdio_bus 结构体。 2. 注册 mdio_bus:分配好 mdio_bus 结构体后,需要注册该总线以向 Linux 内核进行注册,并通过 MDIO 物理设备进行访问。可以使用函数 `mdiobus_register()` 注册该总线。 3. 查找并注册 PHY:成功注册总线后,需要通过函数 `phy_find_first()` 或 `phy_find_by_mask()` 查找连接到总线的第一个 PHY,或者按照指定的位掩码查找 PHY。找到 PHY 后,可以使用函数 `phy_connect()` 来为该 PHY 注册一个控制器。 4. 读取 PHY 寄存器:成功连接到 PHY 后,可以使用函数 `phy_read()` 来读取 PHY 的寄存器。需要提供 PHY 的地址和寄存器的编号来指定要读取的寄存器。 5. 取消注册:当不再需要使用 MDIO 总线PHY 时,需要使用函数 `mdiobus_unregister()` 和 `phy_disconnect()` 来取消注册和断开连接。 以上是在 Linux 中使用 mdio 读取 PHY 的基本步骤。通过这些步骤,我们可以通过 MDIO 总线PHY 进行通信,并读取或修改 PHY 的寄存器值,以满足特定的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式内核源码

给我一点肉啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值