要解决在i.MX6ULL上未配置U-Boot时Linux无法识别Micrel KSZ8091RNBCA PHY的问题,请按照以下步骤操作:
1. 检查并配置U-Boot的PHY初始化
- 确认U-Boot设备树配置:确保U-Boot的设备树(或环境变量)正确设置了PHY地址、接口模式(如RMII)和时钟。例如,在U-Boot的
include/configs/板级头文件中,设置:
CONFIG_FEC_MXC_PHYADDR=0 // PHY地址为0
CONFIG_FEC_ENET_DEV=0 // 使用第一个ENET控制器
- 添加PHY复位代码:在U-Boot的板级初始化函数中,添加PHY的复位逻辑:
// 例如,使用GPIO5_IO08作为复位引脚
gpio_request(IMX_GPIO_NR(5, 8), "eth_phy_reset");
gpio_direction_output(IMX_GPIO_NR(5, 8), 0);
udelay(10000); // 保持复位10ms
gpio_set_value(IMX_GPIO_NR(5, 8), 1);
udelay(1000); // 释放复位后延迟1ms
2. 修正Linux设备树配置
在Linux设备树中(如arch/arm/boot/dts/imx6ull.dtsi),确保ENET节点正确配置PHY:
&fec1 {
phy-mode = "rmii";
phy-handle = <ðphy0>;
status = "okay";
mdio {
ethphy0: ethernet-phy@0 {
compatible = "ethernet-phy-id0022.1622"; // KSZ8091的ID
reg = <0>; // PHY地址设为0
reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>; // 复位时间10ms
reset-deassert-us = <1000>;
clocks = <&clks IMX6UL_CLK_ENET_REF>;
clock-names = "rmii-ref";
};
};
};
3. 确认内核驱动配置
- 启用Micrel PHY驱动:在内核配置中确认
CONFIG_MICREL_PHY=y:
make menuconfig
# 进入 Device Drivers > Network device support > PHY Device support
# 选中 "Micrel PHYs"
- 检查驱动加载:启动后执行
dmesg | grep -i phy,应显示类似:
micrel phy 2188000.ethernet-1:01: attached PHY driver [Micrel KSZ8091] (mii_bus:phy_addr=2188000.ethernet-1:01, irq=POLL)
4. 调试硬件连接
- 检查复位信号:测量复位引脚(如GPIO5_8)的波形,确保复位时序符合要求(低电平至少10ms)。
- 验证时钟信号:使用示波器检查PHY的参考时钟(如25MHz)是否稳定。
- 确认MDIO线路:检查MDIO和MDC引脚连接是否正确,无短路或断路。
5. 手动调试PHY寄存器
在U-Boot命令行中使用mdio命令验证PHY状态:
# 列出MDIO总线上的设备
mdio list
# 读取PHY ID寄存器(地址0x02和0x03)
mdio read ethernet 0x02 0x02 # 应返回0x0022
mdio read ethernet 0x02 0x03 # 应返回0x1622(KSZ8091的ID)
# 启用自动协商
mdio write ethernet 0x02 0x00 0x1200
6. 调整内核启动参数
在内核命令行中添加debug和ignore_loglevel,获取详细日志:
# 在U-Boot的bootargs中添加:
setenv bootargs ... debug ignore_loglevel
boot
7. 验证解决方案
- 冷启动测试:断电后重新上电,观察Linux启动时的网络初始化日志。
- 检查网络接口:使用
ifconfig -a确认eth0已正确识别,并能正常连接。
常见问题处理
- PHY地址错误:若
reg属性设置错误,修改设备树中的PHY地址。
- 驱动未加载:检查内核编译配置,确保
CONFIG_MICREL_PHY已启用。
- 复位时序不足:增加
reset-assert-us和reset-deassert-us的值。
通过以上步骤,应能解决因U-Boot未配置导致的PHY初始化问题,确保Linux冷启动时正确识别网络设备。
要解决在i.MX6ULL上未配置U-Boot时Linux无法识别Micrel KSZ8091RNBCA PHY的问题,请按照以下步骤操作:
1. 检查并配置U-Boot的PHY初始化
- 确认U-Boot设备树配置:确保U-Boot的设备树(或环境变量)正确设置了PHY地址、接口模式(如RMII)和时钟。例如,在U-Boot的
include/configs/板级头文件中,设置:
CONFIG_FEC_MXC_PHYADDR=0 // PHY地址为0
CONFIG_FEC_ENET_DEV=0 // 使用第一个ENET控制器
- 添加PHY复位代码:在U-Boot的板级初始化函数中,添加PHY的复位逻辑:
// 例如,使用GPIO5_IO08作为复位引脚
gpio_request(IMX_GPIO_NR(5, 8), "eth_phy_reset");
gpio_direction_output(IMX_GPIO_NR(5, 8), 0);
udelay(10000); // 保持复位10ms
gpio_set_value(IMX_GPIO_NR(5, 8), 1);
udelay(1000); // 释放复位后延迟1ms
2. 修正Linux设备树配置
在Linux设备树中(如arch/arm/boot/dts/imx6ull.dtsi),确保ENET节点正确配置PHY:
&fec1 {
phy-mode = "rmii";
phy-handle = <ðphy0>;
status = "okay";
mdio {
ethphy0: ethernet-phy@0 {
compatible = "ethernet-phy-id0022.1622"; // KSZ8091的ID
reg = <0>; // PHY地址设为0
reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>; // 复位时间10ms
reset-deassert-us = <1000>;
clocks = <&clks IMX6UL_CLK_ENET_REF>;
clock-names = "rmii-ref";
};
};
};
3. 确认内核驱动配置
- 启用Micrel PHY驱动:在内核配置中确认
CONFIG_MICREL_PHY=y:
make menuconfig
# 进入 Device Drivers > Network device support > PHY Device support
# 选中 "Micrel PHYs"
- 检查驱动加载:启动后执行
dmesg | grep -i phy,应显示类似:
micrel phy 2188000.ethernet-1:01: attached PHY driver [Micrel KSZ8091] (mii_bus:phy_addr=2188000.ethernet-1:01, irq=POLL)
4. 调试硬件连接
- 检查复位信号:测量复位引脚(如GPIO5_8)的波形,确保复位时序符合要求(低电平至少10ms)。
- 验证时钟信号:使用示波器检查PHY的参考时钟(如25MHz)是否稳定。
- 确认MDIO线路:检查MDIO和MDC引脚连接是否正确,无短路或断路。
5. 手动调试PHY寄存器
在U-Boot命令行中使用mdio命令验证PHY状态:
# 列出MDIO总线上的设备
mdio list
# 读取PHY ID寄存器(地址0x02和0x03)
mdio read ethernet 0x02 0x02 # 应返回0x0022
mdio read ethernet 0x02 0x03 # 应返回0x1622(KSZ8091的ID)
# 启用自动协商
mdio write ethernet 0x02 0x00 0x1200
6. 调整内核启动参数
在内核命令行中添加debug和ignore_loglevel,获取详细日志:
# 在U-Boot的bootargs中添加:
setenv bootargs ... debug ignore_loglevel
boot
7. 验证解决方案
- 冷启动测试:断电后重新上电,观察Linux启动时的网络初始化日志。
- 检查网络接口:使用
ifconfig -a确认eth0已正确识别,并能正常连接。
常见问题处理
- PHY地址错误:若
reg属性设置错误,修改设备树中的PHY地址。
- 驱动未加载:检查内核编译配置,确保
CONFIG_MICREL_PHY已启用。
- 复位时序不足:增加
reset-assert-us和reset-deassert-us的值。
通过以上步骤,应能解决因U-Boot未配置导致的PHY初始化问题,确保Linux冷启动时正确识别网络设备。
举报