PHY调试经验

2023-11-04

1. PHY调试过程

        1.设备树中配置正确的PHY ADDR、PHY ID、clause 45或者22协议,PHY ADDR配置不正确会导致MDC/MDIO通信不正常或失败,PHY ID用于匹配PHY驱动程序。

        2.通过MDC/MDIO读写PHY ID并对比datasheet中的PHY ID,确认MDC/MDIO通信是否正常。

        3.MDC/MDIO通信正常的情况下,读写PHY的寄存器查看PHY的状态是否正常,比如主从、RGMII模式、Link状态。

        4.确认TXCLK是否正常,2.5MHZ对应10M速度,25MHZ对应100M速度,125MHZ对应1000兆速度,当自动协商不成功的时候,可以在设备树中配置fixed-link节点强制配置MAC工作在某种状态,比如100兆全双工。

fixed-link {
    speed = <100>;
	full-duplex;
};

        5.确认SOC侧MAC RGMII接口是否有配置delay,如果没有,PHY侧需要配置delay。

        6.确认SOC侧MAC是否工作正常,通过devmem dump寄存器信息确认RGMII模式、全双工/半双工模式、link状态、speed状态。

2. phy驱动开发步骤说明

        针对phy 驱动而言,主要实现两部分的内容:

        1.实现probe、remove、suspend、resume接口,用于完成phy_driver的注册与注销,以及针对linux设备-总线-驱动模型的基础;

        2.实现phy device处理相关的接口:

config_init
config_aneg
read_status
ack_interrupt
config_intr
did_interrupt
match_phy_device
ts_info
hwtstamp
rxtstamp
txtstamp
set_wol
get_wol

        2.1其中config_init主要是对phy device进行一些初始化配置;

        2.2而config_aneg、read_status主要用于设置phy device的自适应机制已经获取phy的状态(主要用于获取适配速率、双工模式等),一般这两个接口直接使用genphy_config_aneg、genphy_read_status即可,触发该phy device有特殊的定义;

        2.3而ack_interrupt、config_intr、did_interrupt主要用于phy device的link up/down相关的中断处理,这个与具体的phy device有关,查看相应的芯片手册说明即可;

        2.4而针对ts_info、hwtstamp、rxtstamp、txtstamp、set_wol、get_wol主要是时间戳相关的处理,大多数phy device均不需实现这几个接口。

        2.5match_phy_device主要用于实现phy_device与phy_driver的匹配检测,若一个phy_driver支持多个类型的phy_device,则最好实现该接口,若该phy_driver只适配某一个型号的phy_device,则不需要实现该接口,只需要设置支持的phy_id与phy_mask即可。

        以上即是实现phy driver的大体步骤,一般情况下若phy device不是很特殊,完全可以不实现phy driver,而在mdiobus_register时针对没有匹配phy_driver的设备,会将其与genphy_driver进行绑定,而genphy_driver基本上对大多数phy device而言,均可以正常驱动。但若我们仅需要在phy driver的probe接口中进行一些配置(如设置phy device的led mode 等),则完全可以将config_ange、read_status等接口使用genphy_driver中的接口,仅实现probe接口即可。

3. Claus45读写接口封装

        SOC芯片:高通默认不支持C45协议

        PHY芯片:marvell 88q1110,支持寄存器13&14扩展控制PCS/PMA寄存器

        path:Linux/include/phy.h

static inline int phy_write_c45(struct phy_device *phydev, u32 dev_id, u32 regnum, u16 val)
{
        mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0d, dev_id);
        mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0e, regnum);
        mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0d, 0x4000 | dev_id);
        return mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0e, val);
}

static inline int phy_read_c45(struct phy_device *phydev, u16 dev_id, u32 regnum)
{       
        mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0d, dev_id);
        mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0e, regnum); 
        mdiobus_write(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0d, 0x4000 | dev_id);
        return mdiobus_read(phydev-&gt;mdio.bus, phydev-&gt;mdio.addr, 0x0e);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHY调试经验 的相关文章

  • RTC实时时钟实验(低功耗、纽扣电池供电)

    目录 I MX6U RTC 简介 硬件原理分析 实验程序编写 修改文件MCIMX6Y2 h 编写实验程序 编译下载验证 编写Makefile 和链接脚本 编译下载 实时时钟是很常用的一个外设 通过实时时钟我们就可以知道年 月 日和时间等信息
  • Linux驱动_多点电容触摸

    一丶Linux下多点电容触摸驱动框架 电容触摸屏IC是FT5426 为IIC协议芯片 因此需要编写IIC驱动 触摸IC会发出中断信号 并在中断服务函数中上报信息 因此需要编写中断框架 触摸屏向Linux内核上报的信息都属于Input子系统
  • 正点原子STM32 H743完成RT Thread下的LAN8720 网卡驱动 LWIP跑起来

    目前RT官网对H743的支持力度还不理想 本想按照F407的搞定网卡的套路来搞定H743的网卡 因为phy也是LAN 8720 以为会很轻松 没想到却是一条遍布荆棘的路 好在已经有不少大佬做了不少工作 终于在巨人肩膀人完成了网卡的驱动 能p
  • Linux设备驱动-procfs

    在Linux中 procfs是进程文件系统 file system 的缩写 包含一个伪文件系统 启动时动态生成的文件系统 可用于内核层和用户层交互信息 这个文件系统通常被挂载到 proc 目录 由于 proc 不是一个真正的文件系统 它也就
  • fb设备驱动1:fb设备的显像原理和步骤

    lcd的显像原理 将DDR内存的一部分划分出来作为显存 显存与lcd显示屏幕之间做一个双向的映射 然后用户只需要将需要显示的内容放入显存之中 然后显存中的内容就会刷新到lcd的储存器中进行显示 显存 在内核之中申请一块内存作为显存 由于内核
  • 擎创技术流

    上期跟大家聊了下eBPF的发展历史还有特性 点击这里 擎创技术流 深入浅出运维可观测工具 一 聊聊eBPF的前世今生 一键回看上期精彩内容 这期主要跟大家分享下eBPF在应用过程中可能出现的问题 希望能帮到遇到类似问题的朋友 话不多说 我们
  • inux字符驱动之read、write部分

    本期主题 linux字符驱动之read write部分 往期链接 linux设备驱动中的并发 linux设备驱动中的编译乱序和执行乱序 linux设备驱动之内核模块 linux字符驱动 linux字符驱动之ioctl部分 linux字符驱动
  • 【分析笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析

    相关信息 硬件平台 全志T507 系统版本 Android 10 Linux 4 9 170 问题描述 PF4 无法通过标准接口设置为中断模式 而 PF1 PF2 PF3 PF5 正常可用 分析过程 一开始以为是引脚被其它驱动占用引起 或者
  • imx6ull驱动开发经验

    1 背景 imx6ull驱动开发基于正点原子的开发板 上面运行linux 4 1 15内核 根文件系统为ubuntu 16 05 5 LTS 2 加载驱动文件chrdevbase ko文件时 先使用depmod生成依赖文件时 提示无modu
  • RK3568 CAN驱动更新说明

    RK3568 CAN问题 同时收发数据一段时间 几秒钟 can出现错误收发功能异常 必须重新down up恢复正常 内核更新rockchip canfd c iopoll h 配置Networking support gt CAN bus
  • LCD笔记(4)分析内核自带的LCD驱动程序

    1 驱动程序框架 Linux驱动程序 驱动程序框架 硬件编程 在前面已经基于QEMU编写了LCD驱动程序 对LCD驱动程序的框架已经分析清楚 核心就是 分配fb info 设置fb info 注册fb info 硬件相关的设置 1 1 入口
  • <Linux开发>驱动开发 -之- Linux LCD 驱动

    Linux开发 驱动开发 之 Linux LCD 驱动 交叉编译环境搭建 Linux开发 linux开发工具 之 交叉编译环境搭建 uboot移植可参考以下 Linux开发 之 系统移植 uboot移植过程详细记录 第一部分 Linux开发
  • Arduino DHCP 配置失败

    我正在使用与 Arduino 软件捆绑在一起的 Web 客户端的以太网草图示例 除了固件地址 我将其更改为印在以太网扩展板背面的地址 之外 无需更改其他任何内容 每当我将 Arduino 连接到网络并查看串行监视器时 我收到的唯一消息是 无
  • 车载以太网笔记

    文章目录 以太网协议分层 协议 中间设备 子网掩码 物理层 测试 内容比较杂 后续会整理 以太网协议分层 协议 中间设备
  • 车载以太网-物理层

    文章目录 车载以太网物理层 100BASE T1 和 1000BASE T1 100BASE TX 测试 车载以太网物理层 车载以太网物理层 Automotive Ethernet PHY 是指车载以太网系统中负责实现物理层功能的部分 物理
  • linux ARM64 处理器内存屏障

    一 内存类型 ARMv8架构将系统中所有的内存 按照它们的特性 划分成两种 即普通内存和设备内存 并且它们是互斥的 也就是说系统中的某段内存要么是普通内存 要么是设备内存 不能都是 1 普通内存 Normal Memory 普通内存的特性是
  • 获取android以太网MAC地址(不是wifi接口)

    我使用的是 Api 级别 8 的 Android 我想获取以太网接口 eth0 的地址 在 API 级别 8 上 NetworkInterface 类没有函数 getHardwareAddress WifiManager 也不起作用 因为这
  • NDIS 和微型端口驱动程序

    我正在尝试使用 Visual Studio 2012 中提供的 WDK 工具修改以太网驱动程序 WDK 中提供的示例包括 微型端口适配器 和 NDIS 轻量级过滤器 等 我仍处于驱动程序编写的最初阶段 因此发现很难浏览代码 在 Visual
  • 无法确定如何使用 ioctl/SIOCGIFADDR/SIOCGIFCONF 在 Mac OS X 上获取以太网接口信息?

    您是否在弄清楚如何使用 ioctl SIOCGIFADDR SIOCGIFCONF 获取 Mac OS X 上的接口信息时遇到问题 今天 我在让在 Linux 上运行良好的代码在 Mac OS X 上运行时遇到了很多麻烦 复制粘贴到main
  • 通过 C++ 检查 Windows 计算机是否在以太网上

    因此 我尝试为此寻找几个不同的答案 我认为可能有希望的一个是 如何使用 Qt 检查 Windows 上的网络接口类型是以太网还是无线 https stackoverflow com questions 21680108 how to che

随机推荐

  • 一文读懂:全网都在说的AIGC到底是什么?

    什么是AIGC AIGC AI Generated Content 是利用人工智能来生成你所需要的内容 GC的意思是创作内容 与之相对应的概念中 比较熟知的还有PGC 是专业人员用来创作内容 UGC是用户自己创造内容 顾名思义AIGC是利用
  • 需求评审要点

    背景 某功能需要发起需求评审 会议参与人有 产品经理 产品线负责人 前后端开发 架构师 测试 ui等 作为该需求的产品经理主持评审会议 需要注意以下的点 1 需求得理清楚想清楚 若有多个方案 可列出多个方案 且列出自己决定的方案 若未想清楚
  • 52-C语言-文件问题-把字符串中的小写字母变为大写字母,并输出到磁盘文件“test”中,输入的字符串以‘!’结束

    问题 从键盘输入一个字符串 将其中的小写字母全部转换成大写字母 然后输出到一个磁盘文件 test 中保存 输入的字符串以 结束 思路 从键盘输入字符串 char str 100 gets str 将其中的小写字母变为大写字母 并且给大写字母
  • linux查看mysql内存_查看数据库最占资源或内存的查询SQL

    1 使用下面查询修正数据库中最占资源的查询 select b username a DISK READS reads a EXECUTIONS exec a disk reads decode a executions 0 1 a exec
  • MySQL的常用函数大全

    一 字符串函数 常用函数 函数 功能 CONCAT s1 s2 sn 字符串拼接 将s1 s2 sn拼接成一个字符串 LOWER str 将字符串全部转为小写 UPPER str 将字符串全部转为大写 LPAD str n pad 左填充
  • 二、MySQL逻辑架构与常见存储引擎

    1 MySQL逻辑架构 MySQL逻辑架构主要分为3层 如下图所示 1 1 连接层 作用 用于与客户端的连接处理 授权认证 安全 权限校验等 每个客户端连接 在MySQL服务器端都会有一个线程与其相互对应 这个线程负责处理这个客户端连接的操
  • protobuf 中复合数据类型的读写

    背景 protobuf 在生成的 C 代码中为 proto 文件中的每个 message 生成了对应的 C 类 并提供了数据成员的读写方法 message 类型读写 message 示例 message Point double lng 1
  • #if defined(__cplusplus)

    由于C 编译器需要支持函数的重载 会改变函数的名称 因此dll的导出函数通常是标准C定义的 这就使得C和C 的互相调用变得很常见 但是有时可能又会直接用C来调用 不想重新写代码 让标准C编写的dll函数定义在C和C 编译器下都能编译通过 通
  • handsontable右键新增、删除改为按钮新增删除

    handsontable自带右键新增表格行和删除行功能 afterchange钩子中 但是实际使用中 右键功能并不容易被发现 用户的使用体验不好 所以需要把新增行和删除行的功能拿出来 在表格外使用按钮实现表格行的新增和删除 实现的效果如下图
  • Bug修改日记:SpringBoot项目启动报错: UnsatisfiedLinkError

    Bug修改日记 作者简介 努力的clz 一个努力编程的菜鸟 文章专栏 bug日志 记录一下平时开发过程中遇到的各种 疑难杂症 bug 分析过程以及解决办法 一 报错信息 UnsatisfiedLinkError 不满意的链接错误 no tc
  • 2023 年全国大学生电子设计竞赛仪器设备和主要元器件及器材清单

    本科组 1 仪器设备清单 直流稳压电源 具有恒流 恒压模式自动切换功能 0 30V 3A 双路 数字示波器 100MHz 双通道 函数发生器 50 MHz 双通道 射频信号源 500MHz 100dBm 0dBm 具有射频输出开关功能 矢量
  • docker-compose编排ELK,kibana报错Unable to revive connection: http://172.16.23.126:9200/

    问题描述 使用docker compose方式编排ELK环境 启动elasticsearch没有问题 浏览器访问内网es环境http 172 16 23 126 9200 cluster health pretty正常 但是kibana启动
  • MySQL导入.sql文件方法以及导入失败的问题解决

    首先这是聂老师的sql文件 MySQL dump 10 13 Distrib 8 0 27 for Win64 x86 64 Host localhost Database teaching Server version 8 0 27 40
  • Linux创始者托瓦兹谈及IoT --「安全在其次」

    本文译至 http japan zdnet com article 35080722 2 圣迭戈 Linux之父Linus Torvalds 在Linux Foundation主办的活动 Embedded Linux Conference
  • 阿里云学生计划领取攻略

    阿里云学生计划题目答案分享 由于朋友需要 便整理了一下给出分享 笔者概念性东西不是很好 如有错误多多包涵 文章部分题目来自网友 先给出阿里云学生疫情领取地址 点击这里这里这里这里 参考答案如下 数据库管理系统是 B A 操作系统的一部分 B
  • NETCore入门系列(Log4NET组件的使用)

    文章目录 分析 整合Log4net 源码 分析 1 官方自带的Log中间件可在命令行中输出日志 通过在构当前控制器的构造函数中注入 如下图 2 此时如果想要将日志输出到项目的某个文件中 则可以通过整合Log4net组件 3 一般建议日志记录
  • 算法:z字形排列

    将一个给定字符串根据给定的行数 以从上往下 从左到右进行 Z 字形排列 class Solution public string convert string s int numRows string result 如果排序长度为1 或者字
  • Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)

    Python OpenCV中的非局部均值去噪 Non Local Means Denoising 1 效果图 2 原理 3 源码 2 1 单彩色图去噪 2 2 多连续彩色帧去噪 参考 这篇博客将介绍不同的计算摄影技术 非局部均值去噪 Non
  • MYSQL 命令大全

    一 连接MySQL 格式 mysql h 主机地址 u 用户名 p 用户密码 1 例1 连接到本机上的MYSQL 首先在打开DOS 窗口 然后进入目录 mysqlbin 再键入命令mysql uroot p 回车后提示你输密码 如果刚安装好
  • PHY调试经验

    1 PHY调试过程 1 设备树中配置正确的PHY ADDR PHY ID clause 45或者22协议 PHY ADDR配置不正确会导致MDC MDIO通信不正常或失败 PHY ID用于匹配PHY驱动程序 2 通过MDC MDIO读写PH