YT8531调试记录

本文详细探讨了设备树在以太网设备配置中的作用,包括选择Pinctrl、配置reset和PHY寄存器,以及MAC驱动如何通过状态机、中断属性和调整RX/TX延迟来确保通信质量。此外,还提到了PHY驱动对于不同PHY型号和数据传输时序的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结

还是从设备树,mac驱动,mac驱动对mdio总线的注册,phy驱动 ,phy的datasheet,cpu的datasheet 几个方面来看来看

0.确认供电,以及phy的地址(一般会有多个地址,根据相关引脚电平可配置)

1.确认reset的有效电平

2.确认IO的有效电平

3.确认phy-mode,以及它的pinctrl的复用情况 (cat /sys/kernel/debug/pinctrl/pinctrl-handles  看current state)

4.确认rx_tx_delay的使能,和对应平台的时序

5.确认中断属性带来的影响

设备树

主要是选择pinctrl;配置reset脚;设置IO电平;设置phy的寄存器,phy-mode,中断属性等

eth0: eth@0xd4281800 {
				compatible = "eth";
				pinctrl-names = "default", "rgmii-pins";
				pinctrl-0 = <&emac_pmx_func0 &emac_pmx_func2 &emac_pmx_func3 &emac_pmx_func4>;
				pinctrl-1 = <&emac_pmx_func0 &emac_pmx_func1  &emac_pmx_func2 &emac_pmx_func3 &emac_pmx_func4>;
				reg = <0xd4281800 0x200>;
				interrupts = <10 11>;
				lpm-qos = <PM_QOS_CPUIDLE_BLOCK_AXI>;
				status = "okay";

				reset-gpio = <&gpio 34 0>;
				reset-active-low;/* 根据phy的电气属性选择这个使能电平,一般都是拉低复位,拉高正常工作 */

				reset-delays-us = <0 100000 100000>;

				clk-tuning-enable;
				
				tx-clk-config = <0x1>;
				rx-clk-config = <0x1>;
				3v3-enable = <0>; /* IO voltage, 1 - 3.3v, 0 - 1.8v 跟据phy的电气属性选择不同电平 */ 

				phy-handle = <&phy0>;

				mdio: mdio-bus {
					#address-cells = <0x1>;
					#size-cells = <0x0>;

					/* YT8531  10M/100M/1000M 3.3V RGMII PHY */
					phy0: phy@0 {
						compatible = "ethernet-phy-id4f51.e91b","ethernet-phy-ieee802.3-c22";
						device_type = "ethernet-phy";
						reg = <0x0>; /* set phy address*/
						phy-mode = "rgmii";
						//interrupts = <11>; /* 有中断属性的话,当phy的状态变为running,就不会去调用phy_read_status */
					};

				};
};

状态机

3.10.33内核版本如下 ,不同版本内核,状态机跟设备树都是不一样的操作;具体以各版本源码为准;如果设备了配了中断属性,RUNNING状态就不会自适应百兆千兆了

void phy_state_machine(struct work_struct *work)
{
......        
	case PHY_RUNNING:
			/* Only register a CHANGE if we are polling or ignoring
				* interrupts and link changed since latest checking.
				*/
			if (!phy_interrupt_is_valid(phydev)) {
					old_link = phydev->link;
					err = phy_read_status(phydev);
					if (err)
							break;

					if (old_link != phydev->link)
							phydev->state = PHY_CHANGELINK;
			}
			break;
......
}

mac驱动

up eth0时会调用emac驱动中注册的net_device的netdev_ops成员的ndo_open

net_device_ops
	ndo_open
		of_phy_connect
			phy_prepare_link
				phydev->adjust_link = handler;这个handler是mac驱动根据link状态,来调整speed和duplex

rx_tx_delay

RX和TX的delay是决定数据流是否能通的关键,因为不同平台的数据传输时序各有差异,phy驱动需要对这个delay进行调整

寄存器 

PHY是 IEEE802.3 中定义的一个标准模块。PHY 寄存器的地址空间为 5 位,因此寄存器范围是0 到31 ,最多有 32 个寄存器。IEEE802.3 定义了地址为0-15 这16个寄存器的功能,地址16-31的寄存器留给芯片制造商自由定义。当然不同PHY,还是以他们的datasheet为准

访问方式 

不同的phy的大体上都有这三种方式来访问phy的寄存器,扩展寄存器不同平台的差异就比较明显,因为是有phy厂家自己定义的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值