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

本文详细介绍了SMI(SerialManagementInterface)及其与PHY的交互,包括PHY的配置、MDIO和MDC功能,以及如何通过S32K148MCU使用S32DSSDK进行PHY寄存器读写,以获取和设置Link状态。涉及了Clause22和Clause45通信协议的应用实例。
摘要由CSDN通过智能技术生成

一、基础介绍:

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读写函数

四、附件

          附件 为通信条款说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值