PHY寄存器驱动调试总结
前段时间对PHY芯片进行了调试,在此做个记录总结。
网络子系统是linux操作系统里很重要的一部分,这里主要说明一下phy芯片在整个子系统里的位置。从这个结构里可以看到,PHY驱动处于链路层。
其硬件连接组成如图所示:
驱动开发适配需要注意以下几点:
1.检查硬件配置,确定PHY芯片的工作模式和RGMII电平是否正确。
2.查看原理图,确定与MAC设备的接口,是gmii还是rgmii或者其它,并在MAC侧的设备树中配置正确。
3. 确定主芯片是否需要PHY芯片提供时钟。
4.Phy芯片的地址正确配置,可以通过 mdio/mdc正确访问 到 phy芯片的寄存器。
如下为网上流行的phy.c读取phy寄存器的方法,需要将其交叉编译成可执行文件后使用,可以直接通过标准网络协议栈读写phy芯片的寄存器值,方便于调试PHY芯片。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <linux/mii.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/sockios.h>
#include <linux/types.h>
#include <netinet/in.h>#define reteck(ret) \ if(ret < 0){ \ printf("%m! \"%s\" : line: %d\n", __func__, __LINE__); \goto lab; \ } #define help() \ printf("mdio:\n"); \ printf("read operation: mdio reg_addr\n"); \printf("write operation: mdio reg_addr value\n"); \ printf("For example:\n"); \printf("mdio eth0 1\n"); \ printf("mdio eth0 0 0x12\n\n"); \ exit(0); int sockfd; int main(int argc, char *argv[]){ if(argc == 1 || !strcmp(argv[1], "-h")){ help(); } struct mii_ioctl_data *mii = NULL; struct ifreq ifr; int ret; memset(&ifr, 0, sizeof(ifr));strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);reteck(sockfd); //get phy address in smi bus ret = ioctl(sockfd, SIOCGMIIPHY, &ifr); reteck(ret); mii = (struct mii_ioctl_data*)&ifr.ifr_data; if(argc == 3){ mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);ret = ioctl(sockfd, SIOCGMIIREG, &ifr);reteck(ret);printf("read phy addr: 0x%x reg: 0x%x value : 0x%x\n", mii->phy_id, mii->reg_num, mii->val_out);}else if(argc == 4){ mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0); mii->val_in = (uint16_t)strtoul(argv[3], NULL, 0); ret = ioctl(sockfd, SIOCSMIIREG, &ifr); reteck(ret);printf("write phy addr: 0x%x reg: 0x%x value : 0x%x\n", mii->phy_id, mii->reg_num, mii->val_in);}
lab: close(sockfd);return 0;
}
用法如下:
(1) Phy 寄存器读
./phyreg eth0 0x1e
(2) Phy 寄存器写
./phyreg eth0 0x1e 0xc
(3) 读 ext 寄存器
例:读 ext reg 0xc:
./phyreg eth0 0x1e 0xc && ./phyreg eth0 0x1f
(4) 写 ext 寄存器
例:写 ext reg 0xc 值为 0x80f6:
./phyreg eth0 0x1e 0xc && ./phyreg eth0 0x1f 0x80f6
5.操作mac侧寄存器,调试tx_delay参数,测试丢包率。
phy 如果工作在含有RGMII 接口的模式,按照业内惯例,tx clk delay 由MAC 来完成;rx clk delay 由phy 来完成。所以一般PHY芯片的rx clk delay默认是 2ns, tx clk delay默认是750ps。
但不排除有些mac会对tx delay 不做配置,或对rx delay 也做配置等情况。就需要针对mac 的配置情况,来相应的在PHY芯片上电初始化时做适配。
PHY寄存器驱动调试总结相关推荐
- 驱动调试之自制工具——寄存器编辑器
转自http://liu1227787871.blog.163.com/blog/static/2053631972012610101614610/ 当我们调试驱动程序的时候,可能要调整寄存器的设置. ...
- 网络驱动->PHY驱动调试
1. Linux 系统网络协议层架构 网络协议框架图: 网络子系统是 linux 操作系统里很重要的一部分.关于这部分有很多的参考资料.这里主要说明一下 phy 芯片在整个子系统里的位置.从这个结构里 ...
- PHY驱动调试之 --- PHY控制器驱动(二)
1. 前言 内核版本:linux 4.9.225,以freescale为例. 2. 概述 PHY芯片为OSI的最底层-物理层(Physical Layer),通过MII/GMII/RMII/SGMII ...
- 展锐UDX710:LAN7800 PHY驱动调试
展锐UDX710:LAN7800 PHY驱动调试 1. 前期准备 1.1 调试环境 1.2 预置条件 1.3 硬件连接 2. 驱动适配 2.1 开启内核驱动支持 2.2 驱动加载验证 2.3 配置网络 ...
- 以太网PHY寄存器分析
以太网PHY寄存器分析 1 1.以太网PHY标准寄存器分析 2 1.1 Control Register 2 1.2 Status register 5 1.3 PHY Ide ...
- 嵌入式软件之裸板与驱动调试
目录 一.裸板调试 1.1 点灯法 1.2 串口调试 1.3 JTAG原理 1.4 JTAG调试 二.驱动调试 2.1 printk调试 2.1.1 printk原理 2.1.2 printk的使用 ...
- [linux kernel] 内核下ksz8081驱动调试
系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 - ...
- 10 怎么写USB驱动,Cadence USB 2.0 Controller和PHY IP驱动移植
怎么写USB驱动,Cadence USB 2.0 Controller和PHY IP驱动移植 作者 将狼才鲸 日期 2022-03-26 本子文档所属的上级文档(Gitee仓库): 才鲸 / 嵌入式知 ...
- 【A113】网卡芯片Realtek RTL8201驱动调试
前言: 这一篇是对自己调试的一个过程记录,代码看的算是比较熟悉了,过程中一直没调过,没后询问原厂FAE,修改了一下dts一个地址参数,就可以了,最终没有太多成就感,修改了PHY芯片的一个状态寄存器.. ...
- 以太网PHY寄存器分析【转】
转自:https://blog.csdn.net/Firefly_cjd/article/details/79825869 以太网PHY寄存器分析 1 1.以太网PHY标准寄存器分析 2 ...
最新文章
- MyBatis之ResultMap标签
- 实现Unity编辑器模式下的旋转
- 输出某个目录下的所有文件和文件夹,包括子文件夹中的内容
- DELL安装不了mysql_Windows 版本 Mysql 8.x 安装
- python多用户登录_python多用户
- SQLServr添加数据列
- linux中的定时器检测按键,STM32单片机利用定时器实现按键采集
- Android应用模块之间通信模式
- APP、软件版本号的命名规范与原则
- android 优秀控件以及开源项目
- Google黑客常用搜索语法
- 如何培养孩子一年读100本书
- 处理行内元素行内块元素中间空隙
- 思维导图工具之Freeplane(上篇)
- 设置samba密码时提示failed to find entry for user
- 浅谈——业务逻辑漏洞
- Win10电脑的快捷键有哪些?Windows10常用组合快捷键大全
- 今日新闻简报 十二条微语早报 每天一分钟 知晓天下事 3月2日
- 苹果党福利!手机数据备份恢复使用攻略
- 嵌入式系统工程师工资怎么样?
热门文章
- Java Web目前主流的框架以及正在兴起的框架
- Ubuntu18新系统火狐浏览器无法播放音乐和视频
- iOS编程比较好开源的完整项目iOS编程比较好开源的完整项目
- Qt Creator使用Valgrind代码分析工具
- 如何安装biopython_Biopython安装
- 平安普惠系统上线申请表模板
- python文件查重_海量文件查重SimHash和Minhash
- django提供的admin后台增加用户时提示:“Table ‘login.login_user‘ doesn‘t exist“
- aspose.words生成pdf字体乱码为方框
- SDL Trados外部审阅无法正常导入并显示修订的问题