通过SMI(MDC/MDIO)读取外部PHY寄存器

一、基础介绍:

SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。

MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC由MAC产生,作用是为MDIO提供时钟。

二、示例说明

MCU通过SMI读取外部PHY寄存器,MCU采用S32K148,使用S32DS SDK开发

1、MCU对外部PHY的配置

1)PHY的配置结构体说明

2)PHY地址的确认

当连接的PHY为外部PHY时,addr字段表示PHY的SMI/MDIO地址,以便在总线唯一表示PHY设备。基础PHY地址由外部跳线后的输入电平决定,最终将作为Port5的地址。

pinstraps :通过外部跳线决定输入电平

由上图可知,硬件pinstraps表示二进制从高到低为1000,十进制为16,也就是说port5的地址是16port6依次递增

3)在PE中进行配置

2、通信协议说明

1)可以通过Clause 22和Clause45来访问MMDs寄存器,Clause45需要通过Clause22间接访问

2)使用Clause22的13寄存器作为Clause45的操作寄存器

      使用Clause22的14寄存器作为Clause45的数据/地址 寄存器

3)通过Clause22访问Clause45

三、示例:通过PHY读取Port口的Link状态

1、Link状态的获取

Link状态位于MMD01寄存器,需要通过C22选择MMD1寄存器

2、代码实现

#define	PMA_STATUS1_ADDR				1U
#define PMA_PMD_REG                     1U
#define CL22_CL45_CONTROL_ADDR       	13U
#define CL22_CL45_ADDRDATA_ADDR       	14U
#define PHY_ADDR_CONFIG                 16U

static void read_cl45_reg(uint8_t phy, uint16_t devadr, uint16_t devreg, uint16_t *reg)
{
	g_phyConfig->addr = phy;
	PHY_Write(0U, CL22_CL45_CONTROL_ADDR, 0x00&devadr);	//选择PMA/PMD
	PHY_Write(0U, CL22_CL45_ADDRDATA_ADDR, devreg);	//操作C45 PMA_STATUS1寄存器
	PHY_Write(0U, CL22_CL45_CONTROL_ADDR, 0x4000|devadr);	//01:w  10:r
	PHY_Read(0U, CL22_CL45_ADDRDATA_ADDR, reg);
}

int main()
{    
    uint8_t get_reg_val = 0;
    read_cl45_reg(PHY_ADDR_CONFIG,PMA_PMD_REG,PMA_STATUS1_ADDR,&get_reg_val );
    printf("Get register value is [%d]", get_reg_val);
}

调用SDK读写函数

四、附件

          附件 为通信条款说明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/421655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

babylonjs入门-方向光

基于babylonjs封装的一些功能和插件 ,希望有更多的小伙伴一起玩babylonjs; 欢迎加群(点击群号传送):464146715 官方文档 中文文档 案例传送门 懒得打字 粘贴复制 一气呵成 ​

JavaSE——常用API(2/3)-String使用时的注意事项、String的应用案例

目录 String使用时的注意事项 阅读程序并解答(1) 阅读程序并解答(2) String的应用案例 案例1 案例2 小结 String使用时的注意事项 String对象的内容不可改变,被称为不可变字符串对象。(每次试图改变…

多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网…

一起玩儿平衡车(ESP32)——02 平衡车的组装与接线方法

摘要:本文介绍平衡车的组装与接线方法 前边介绍了所要实现的平衡车的组成,接下来就来把小车组装起来。首先是下层底板的底面要固定两个轮子。这个只要固定孔位没有问题,用螺丝直接将轮子支架固定上去就可以了。固定好后如下图所示&#xff1…

nginx(三)重写功能 防盗链 方向代理 等

return 可以写在location server if 里面 return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后…

怎么压缩成mp4视频?

在数字化时代,视频已经成为我们日常生活中不可或缺的一部分。然而,有时候我们可能会遇到视频文件太大的问题,不便于传输、存储或分享。那么,如何将视频压缩成MP4格式,以减小文件大小呢?本文将为您介绍几种简…

JavaWeb HTTP 请求头、请求体、响应头、响应体、响应状态码

J2EE(Java 2 Platform Enterprise Edition)是指“Java 2企业版”,B/S模式开发Web应用就是J2EE最核心的功能。 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 在日常的生活中,经常会使用…

Doccano 修复 spacy.gold 的bug

引言 最初只是想把Doccano标注的数据集转换成BIO(类似conll2003数据集)的标注格式; 按照PR的修改意见实现了修改,但是本人不建议这么做; 应该随着Doccano的升级,Doccano的导出格式发生了变化,而原来的doccano-transfo…

高效备考2024年AMC10:吃透2000-2023年1250道AMC10真题

距离2024年AMC10的比赛只有8个月多一点的时间了,如何备考AMC10美国数学竞赛最有效?参加AMC10竞赛是否一定要参加机构的培训班?吃透历年真题是有效的自学、了解AMC10和备考策略之一。事实上,网络上有很多关于AMC10的学习资源&#…

spark sql 转换字符串数组成多列结构

背景 在平时使用spark sql分析数据时,特别是分析从mysql的表入仓的hive表时,我们会经常和字符串数组的列打交道,而且这种情况下我们一般都需要把一行字符串数组的行数据转成多列的形式,我们看下怎么写这个sql spark sql 转换字符…

ppt中调整某条表格框线的格式

1、先设置好边框线的属性: 2、选择要调整的边框线所在的单元格(第二列的右边框加粗,体现分栏的效果) 3、设计--边框--中选择要调整的边框线位置(假设要调整右框线)

【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制

本系列文章跟随《MetaGPT多智能体课程》(https://github.com/datawhalechina/hugging-multi-agent),深入理解并实践多智能体系统的开发。 本文为该课程的第四章(多智能体开发)的第一篇笔记。主要记录下多智能体的运行…

二次元壁纸高清1080P

二次元壁纸高清1080P 夸克网盘:https://pan.quark.cn/s/3dd9688f9ae5 百度网盘:https://pan.baidu.com/s/15YQBfMcOJgSEyZI1PjgHeA?pwdq8zy

先进电机技术 —— 通用变频器

一、变频器名称定义 通用变频器(Variable Frequency Drive, VFD)是一种广泛应用于工业控制领域的电力电子设备,其主要功能是改变供电电源的频率和电压,以达到对交流电动机转速进行精确、连续调节的目的。通用变频器通常具备以下特…

软考 系统分析师系列知识点之需求获取(7)

所属章节: 第11章. 软件需求工程 第2节. 需求获取 需求获取是一个确定和理解不同的项目干系人的需求和约束的过程。需求获取是一件看上去很简单、做起来却很难的事情。需求获取是否科学、准备是否充分,对获取出来的结果影响很大,这是因为大部…

兼容性比较好的浏览器推荐(2023手机浏览器排名)

浏览器在我们日常工作生活占据着重要的位置。浏览器是电脑的必备软件,也是手机端不可缺少的软件之一。如果你想要下载浏览器,却不知道哪个浏览器最好用,那么就看看本篇文章。下文给大家推荐2023年最热门、好用的手机浏览器,排行不…

鬼屋游戏c++

c #include <iostream> #include <string> #include <vector> #include <cstdlib> // 用于随机数生成 #include <ctime> // 用于随机数种子using namespace std;// 定义房间结构体 struct Room {string description;bool hasKey;bool hasClue…

13、输入捕获实验

目录 一、通用定时器输入捕获概述 二、常用寄存器和库函数配置 三、输入捕获实验讲解 一、通用定时器输入捕获概述 STM32输入捕获工作过程&#xff08;通道1为例&#xff09; 一句话总结工作过程&#xff1a; 通过检测TIMx_CHx上的边沿信号&#xff0c;在边沿信号发生跳变…

交换机入门:从基础到进阶的全面学习指南

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…

「媒体宣传」如何写好新闻稿?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 写好新闻稿是媒体宣传的关键环节之一&#xff0c;下面是一些关于如何写好新闻稿的建议&#xff1a; 明确新闻稿的目的和受众&#xff1a;在写新闻稿之前&#xff0c;首先要明确新闻稿的目…