Linux 下访问PHY芯片寄存器

匿名 (未验证) 提交于 2019-12-02 21:56:30


下面代码描述了在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码。Linux内核2.6以上通用。
将下面代码编译后,将可执行文件a.out 重命名为mdio


eth0 为mac层控制器的名称, 一般为eth0 或mgmt0。
#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 help() \






int sockfd;

int main(int argc, char *argv[]){




















lab:


}

很多人在read操作里面判断phy的link状态,
if(mii->val_out& 0x0004){

printf("linkup\n");

}else{

printf("linkdown\n");

}


其实这个做法是比较通用可行的。

解释一下,关于mii->val_out& 0x0004

寄存器3和4为 Identifiier Register
, 这里的内容为phy芯片产商的识别码。

一般这个状态寄存器的数值为: 0x796d

意思是:

14bit : 有能力实现全双工100BASE-X工作模式

8bit : 扩展信息描述在寄存器15.

5bit : 自动协商完成

3bit : 有能力自动协商

2bit : link 状态: up

0bit : 有扩展寄存器

文章来源: https://blog.csdn.net/kunkliu/article/details/92682060
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!