You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于STM32MP157自定义板U-Boot以太网双错误排查求助

问题1:U-Boot无法读取以太网MAC地址

原因分析

报错提示OTP中MAC地址无效,核心原因有两点:

  1. STM32MP1的OTP专用MAC存储区域未烧写合法的非全0、非广播地址的MAC地址;
  2. U-Boot设备树中nvmem-cells配置未正确关联到OTP的MAC存储节点,或U-Boot未启用NVME相关编译选项。

解决步骤

方案1:烧写OTP MAC地址

STM32MP1的OTP Bank 2(起始地址0x2FF00400)为MAC地址专用存储区,可通过以下方式烧写:

  • 使用STM32CubeProgrammer连接开发板进入烧写模式,写入6字节合法MAC地址;
  • 烧写完成后重启U-Boot,验证是否自动读取MAC。

方案2:临时/永久设置MAC地址

临时设置(重启失效)

在U-Boot命令行执行:

setenv ethaddr AA:BB:CC:DD:EE:FF
saveenv

替换AA:BB:CC:DD:EE:FF为合法MAC地址。

永久修改设备树(非生产环境推荐)

在U-Boot设备树的&ethernet0节点中添加硬编码MAC,并注释NVME相关配置:

&ethernet0{
    // 注释原有NVME配置
    // nvmem-cells = <&ethernet_mac_address>;
    // nvmem-cell-names = "mac-address";
    
    // 添加硬编码MAC
    local-mac-address = [AA BB CC DD EE FF];
};

修复NVME节点关联

确保U-Boot设备树中存在ethernet_mac_address对应的OTP节点:

&otp {
    ethernet_mac_address: mac-address@400 {
        reg = <0x400 0x6>;
    };
};

同时确认U-Boot编译时启用了CONFIG_NVMEM选项。


问题2:手动设置MAC后DHCP报EQOS_DMA_MODE_SWR stuck错误

原因分析

该错误由RMII模式下的时钟配置错误、PHY复位时序异常或引脚复用配置错误导致,RMII对时钟和硬件时序要求严格。

解决步骤

1. 修正RMII参考时钟配置

根据硬件设计调整st,eth_ref_clk_sel属性:

  • 若使用外部PHY提供50MHz参考时钟:
    st,eth_ref_clk_sel = <0>;
    
  • 若使用内部PLL生成50MHz时钟:
    st,eth_ref_clk_sel = <1>;
    

同时确认clocks中的ETHCK_K时钟源配置与硬件匹配。

2. 调整PHY复位配置

设备树中ethernet0和phy0节点重复配置了复位GPIO,建议只保留phy0节点的复位设置,并延长复位时长:

&ethernet0{
    // 注释重复的复位配置
    // phy-reset-gpios = <&gpiob 0 GPIO_ACTIVE_LOW>;

    mdio0 {
        phy0: ethernet-phy@0 {
            reset-gpios = <&gpiob 0 GPIO_ACTIVE_LOW>;
            reset-duration = <500>; // 增大至500ms确保PHY复位完成
            reg = <0>;
        };
    };
};

同时检查GPIO B0的引脚复用配置是否正确(在eth1_pins_mx节点中),确保为输出模式。

3. 验证RMII引脚配置

检查eth1_pins_mx节点是否包含所有RMII必需引脚,且电气属性配置正确:

eth1_pins_mx: eth1-1 {
    pins1 {
        pinmux = <STM32_PINMUX('G', 11, AF11)>, /* ETH_MDC */
                 <STM32_PINMUX('G', 13, AF11)>, /* ETH_TXD0 */
                 <STM32_PINMUX('B', 13, AF11)>, /* ETH_TXD1 */
                 <STM32_PINMUX('G', 14, AF11)>; /* ETH_TXEN */
        drive-push-pull;
        slew-rate = <STM32_SLAVE_RATE_HIGH>;
    };
    pins2 {
        pinmux = <STM32_PINMUX('A', 2, AF11)>,  /* ETH_MDIO */
                 <STM32_PINMUX('C', 4, AF11)>,  /* ETH_RXD0 */
                 <STM32_PINMUX('C', 5, AF11)>,  /* ETH_RXD1 */
                 <STM32_PINMUX('A', 7, AF11)>;  /* ETH_CRS_DV */
        drive-push-pull;
        slew-rate = <STM32_SLAVE_RATE_HIGH>;
    };
};

4. 检查U-Boot编译配置

确保启用以下关键配置:

CONFIG_STM32_ETH=y
CONFIG_DM_ETH=y
CONFIG_PHYLIB=y
CONFIG_PHY_RESET=y
CONFIG_STM32_EQOS=y
CONFIG_RMII=y

若使用特定型号PHY,需添加对应驱动配置(如CONFIG_PHY_REALTEK=y)。


内容的提问来源于stack exchange,提问作者radium88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:37:12