[以太网/USB/其他总线] 如何在linux多个 EVB-LAN8670-USB中设置 NodeID

[复制链接]
2834|18
 楼主| elearn123 发表于 2024-12-20 11:59 | 显示全部楼层 |阅读模式
当在一个系统中使用多个 EVB-LAN8670-USB 板时,当前的 Linux 驱动程序 1v0 将每个板中的 NodeID 设置为相同的值。当有多个 USB 设备时,默认情况下,它们都具有相同的节点 ID。
使用 EVB-LAN8670-USB 时,可以通过 MDIO 访问 LAN8670 寄存器。
在 Linux 系统上,可以用mdio-tool实现 MDIO 读/写, 链接地址:
https://microchiptechnology.sharepoint.com/:f:/s/FileSection/EsRAtu8aemJGv4LvKfLn1OQBxC4hWzwQsJ8WOzBgZJEvZQ?e=JVdfNr
如果有 2 个 10BASE-T1S USB 设备,则可以按如下方式设置 NodeID:
示例:
$ sudo ./mdio-tool w eth1 0x1FCA02 0x0801
将 eth1 的 NodeID 设置为 1。
$ sudo ./mdio-tool w eth1 0x1FCA01 0x8000
使能eth1 PLCA。
$ sudo ./mdio-tool w eth2 0x1FCA02 0x0802
将 eth1 的 NodeID 设置为 2。
$ sudo ./mdio-tool w eth2 0x1FCA01 0x8000
使能 eth2  PLCA。
734774645 发表于 2024-12-21 17:17 | 显示全部楼层
通过指令写到地址里数据。
小灵通2018 发表于 2024-12-25 14:40 | 显示全部楼层
不同的应该是有不同的地址吧。
t1ngus4 发表于 2025-2-18 13:23 | 显示全部楼层
在Linux系统中为多个EVB-LAN8670-USB 设备设置NodeID,通常需要结合硬件配置和软件操作。
su1yirg 发表于 2025-2-18 14:39 | 显示全部楼层
EVB-LAN8670-USB是基于10BASE-T1S以太网标准的评估板,支持单对以太网(SPE)通信。
p0gon9y 发表于 2025-2-18 15:40 | 显示全部楼层
NodeID是设备在网络中的唯一标识符,用于区分不同的设备。
q1d0mnx 发表于 2025-2-18 16:48 | 显示全部楼层
确保所有EVB-LAN8670-USB设备已正确连接到 Linux 主机。
y1n9an 发表于 2025-2-18 19:10 | 显示全部楼层
一般要安装 EVB-LAN8670-USB 的驱动程序和必要的工具。
lamanius 发表于 2025-2-18 20:25 | 显示全部楼层
如果驱动未安装,可以参考官方文档或使用以下命令安装
l1uyn9b 发表于 2025-2-18 22:06 | 显示全部楼层
EVB-LAN8670-USB 的 NodeID 通常通过以下方式设置:使用官方工具,微芯(Microchip)通常会提供专用的配置工具或脚本,用于设置 NodeID。下载并运行官方工具,按照提示为每个设备分配唯一的 NodeID
g0d5xs 发表于 2025-2-19 10:11 | 显示全部楼层
如果没有官方工具,可以通过以下步骤手动配置:识别设备,使用lsusb或dmesg命令找到每个设备的 USB 地址。
d1ng2x 发表于 2025-2-19 11:53 | 显示全部楼层
使用 libusb 或 pyusb 编写脚本,通过USB接口向设备发送配置命令
b5z1giu 发表于 2025-2-19 13:01 | 显示全部楼层
使用网络工具(如 ifconfig 或 ip 命令)检查设备是否正常工作。可以测试设备之间的通信,确保 NodeID 设置正确。
慢醇 发表于 2025-2-23 00:04 | 显示全部楼层
通过 MDIO 控制,你可以修改每个设备的 NodeID
jiekou001 发表于 2025-2-26 16:20 | 显示全部楼层
是不是可以用Python实现
  1. import subprocess

  2. # 获取网络接口的 MAC 地址
  3. def get_mac_address(interface):
  4.     result = subprocess.run(['ifconfig', interface], stdout=subprocess.PIPE)
  5.     output = result.stdout.decode('utf-8')
  6.     mac_address = output.split('ether ')[1].split(' ')[0]
  7.     return mac_address

  8. # 为每个设备分配 NodeID
  9. devices = ['eth0', 'eth1']
  10. node_ids = {}

  11. for idx, dev in enumerate(devices):
  12.     mac = get_mac_address(dev)
  13.     node_ids[mac] = idx + 1  # 分配 NodeID

  14. print(node_ids)
jiekou001 发表于 2025-2-26 16:21 | 显示全部楼层
设置完成后,验证每个设备的 NodeID 是否正确:

通过应用程序读取 NodeID。

检查设备是否按预期工作。
自动化陈稳 发表于 2025-4-27 01:03 | 显示全部楼层
你提到的 mdio-tool 是用于读写 MDIO 寄存器的工具,这样可以在运行时配置每个设备的参数,包括设置 NodeID 和启用 PLCA。
野玫瑰 发表于 2025-8-29 12:18 | 显示全部楼层
在 Linux 中为多个 EVB-LAN8670-USB 设置 NodeID,可通过 udev 规则绑定设备 MAC 与固定 NodeID。先获取各设备 MAC,创建 udev 规则文件,用 SUBSYSTEM=="net" 匹配,加 ATTR {address}=="MAC" 和 ENV {NODE_ID}="值",重启 udev 服务使规则生效,实现每个设备固定 NodeID。
灰色与青 发表于 2025-9-22 17:12 | 显示全部楼层
在 Linux 下为多个 EVB-LAN8670-USB 设置 NodeID:先通过 lsusb 确认各设备 USB 地址,用 udev 规则绑定设备到固定网口名;再通过 ethtool -E 网口名 magic 0x... offset N value X,指定偏移量 N 写入 NodeID 值 X,不同设备用不同网口名区分设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

29

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部