NXP MCU 技术论坛
直播中

王静

8年用户 1630经验值
私信 关注
[问答]

在iMX6ULL上设置MAC地址,启动后无法获得相同的mac id?

我正在开发基于 imx6ull 的定制板。在 U Boot with Fuse Prog Command 中,我编写了 mac id,但是在启动后我无法获得相同的 mac id。还需要任何其他程序才能正常工作吗?
这是我遵循的程序,如果出现任何问题,您能否纠正,或者引导我完成正确的程序以使其正常工作。


按任意键停止自动引导:0
=> fuse prog 4 2 0x126c62e9
编程库 4 字 0x00000002 到 0x126c62e9...
警告: 对保险丝进行编程是不可逆的作!
这可能会使您的系统变砖。
仅当您确定自己在做什么时才使用此命令!
Really perform this fuse programming?
y
=> fuse prog 4 3 0xfe52
编程库 4 字 0x00000003 到 0x0000fe52...
警告: 对保险丝进行编程是不可逆的作!
这可能会使您的系统变砖。
仅当您确定自己在做什么时才使用此命令!
=> 熔断读取 4 2
阅读库 4:
字0x00000002:126c62e9
=> fuse read 4 3
阅读库 4:
字0x00000003:0000fe52
=> boot

eth1: flags=-28605 mtu 1500
inet 192.168.29.211 网络掩码 255.255.255.0 广播 192.168.29.255
inet6 fe80::acce:1dff:fe14:a73 prefixlen 64 scopeid 0x20
inet6 2405:201:e011:c015:acce:1dff:fe14:a73 prefixlen 64 scopeid 0x0
以太 ae:ce:1d:14:0a:73txqueuelen 1000 (以太网)

回帖(1)

梁宏满

2025-4-14 17:45:22

在iMX6ULL上正确设置MAC地址需要确保OCOTP(On-Chip OTP)的正确编程和设备树配置。以下是详细步骤和常见问题排查:




1. 确认OCOTP写入位置


iMX6ULL的MAC地址存储在OCOTP Bank 4 Word 2和Word 3中:



  • Word 2:低16位为MAC地址前两个字节(OUI的最后部分)。

  • Word 3:完整32位存储MAC地址的后四个字节。


正确写入命令示例:


# 假设MAC地址为 00:04:9f:12:6c:62
# 分解为两部分:
# - Word 2 (Bank 4 Word 2): 0x0400 (OUI前缀) + 0x9f00 = 0x9f000400
# - Word 3 (Bank 4 Word 3): 0x126c62e9

# 写入Word 2:
fuse prog -y 4 2 0x9f000400

# 写入Word 3:
fuse prog -y 4 3 0x126c62e9

⚠️ 注意:用户仅写入Word 2 (0x126c62e9) 而未配置Word 3,可能导致MAC地址不完整。




2. 检查OCOTP读取值


在U-Boot中验证熔丝值:


# 读取Bank 4 Word 2和Word 3:
fuse read 4 2
fuse read 4 3

确保读取的值与写入的一致。




3. 设备树配置


内核需要从OCOTP读取MAC地址。在设备树中检查以下配置:


FEC节点(以太网控制器):


&fec1 {
    phy-mode = "rmii";
    fsl,mac-from-ocotp;  // 启用从OCOTP读取MAC地址
    status = "okay";
};



4. U-Boot环境变量冲突


U-Boot的ethaddrnetaddr可能覆盖OCOTP的值。在U-Boot中检查:


printenv ethaddr


  • 如果存在ethaddr,删除或重置它:
    setenv ethaddr
    saveenv




5. 校验和问题


某些iMX6ULL型号要求对MAC地址区域计算校验和。参考手册确认是否需要以下步骤:



  1. 计算Bank 4 Word 6的校验和。

  2. 写入校验和到对应位置。




6. 内核驱动问题


确保内核配置启用了OCOTP驱动:


# 内核配置选项:
CONFIG_NVMEM_IMX_OCOTP=y



7. 验证MAC地址


在Linux中检查MAC地址来源:


dmesg | grep "FEC MAC"
# 或
cat /sys/class/net/eth0/address


  • 如果显示00:00:00:00:00:00,表示未正确读取OCOTP。




8. 熔丝编程注意事项



  • 熔丝烧录为不可逆操作,确保命令正确。

  • 某些位可能已锁定(如Word 6的校验和位),需参考数据手册。




完整流程总结



  1. 写入OCOTP
    fuse prog -y 4 2 0x9f000400
    fuse prog -y 4 3 0x126c62e9

  2. 验证OCOTP值
    fuse read 4 2
    fuse read 4 3

  3. 配置设备树

    • 添加 fsl,mac-from-ocotp 到FEC节点。


  4. 清除U-Boot环境变量
    setenv ethaddr
    saveenv

  5. 检查内核驱动和日志




如果问题仍未解决,请检查硬件设计是否影响了OCOTP的读取,或联系NXP支持获取芯片级调试建议。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分