如何在 Linux 下为多个 EVB-LAN8670-USB 设备设置不同的 Node ID?
介绍默认情况下多个设备的 Node ID 相同的问题,并提供 mdio-tool 配置方法。ChatGPT 说:
在 Linux 下,当多个 EVB-LAN8670-USB 设备连接到同一系统时,它们的 Node ID(设备地址)默认相同,通常为 0。这会导致 MDIO 通信冲突,无法正确区分和管理多个设备。因此,需要手动为每个设备分配唯一的 Node ID。
默认情况下多个设备 Node ID 相同的问题
由于 EVB-LAN8670-USB 设备默认使用相同的 MDIO 地址(Node ID = 0),当多个设备连接时,系统无法正确访问每个设备。
需要为每个设备配置不同的 Node ID 以避免通信冲突。
使用 mdio-tool 设置不同的 Node ID
mdio-tool 是一个 Linux 下的命令行工具,可用于读取和写入 MDIO 设备寄存器。通过它可以为每个 LAN8670 设备配置唯一的 Node ID。
步骤 1:识别设备
首先,列出系统中所有的 MDIO 设备:
bash
复制
编辑
mdio-tool list
这将显示当前可用的 MDIO 设备及其默认 Node ID。
步骤 2:修改 Node ID
找到某个 LAN8670 设备,并修改其 Node ID(假设我们要将其从 0 改为 1):
bash
复制
编辑
mdio-tool write 0 0x1F 0x1
0:表示默认的 Node ID(即 0)。
0x1F:为 LAN8670 的 Node ID 配置寄存器。
0x1:将其更改为 1。
如果有多个设备,可以重复上述命令,为其他设备分配不同的 Node ID:
bash
复制
编辑
mdio-tool write 0 0x1F 0x2# 第二个设备,设置为 Node ID 2
mdio-tool write 0 0x1F 0x3# 第三个设备,设置为 Node ID 3
步骤 3:验证配置
可以使用以下命令确认修改是否生效:
bash
复制
编辑
mdio-tool read 1 0x1F# 读取 Node ID 1 的配置
mdio-tool read 2 0x1F# 读取 Node ID 2 的配置
mdio-tool read 3 0x1F# 读取 Node ID 3 的配置
总结
默认情况下,多个 EVB-LAN8670-USB 设备的 Node ID 相同,可能导致冲突。
使用 mdio-tool 读取设备信息,并写入新的 Node ID 以区分多个设备。
通过 mdio-tool write 命令修改 Node ID,并使用 read 命令验证修改是否成功。
这样,每个 EVB-LAN8670-USB 设备都能在 Linux 下正常工作,并避免通信冲突。
lsusb | grep Microchip
dmesg | grep lan8670 # 根据序列号区分设备
SUBSYSTEM=="usb", ATTRS{idVendor}=="0424", ATTRS{idProduct}=="8670", ATTRS{serial}=="000000001", SYMLINK+="lan8670_1", RUN+="/path/to/set_node_id.sh 1"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0424", ATTRS{idProduct}=="8670", ATTRS{serial}=="000000002", SYMLINK+="lan8670_2", RUN+="/path/to/set_node_id.sh 2" #!/bin/bash
NODE_ID=$1
DEVICE_PATH="/dev/lan8670_$NODE_ID"# 或使用实际设备路径
# 使用适当的命令设置Node ID
echo "Setting Node ID to $NODE_ID for device at $DEVICE_PATH"
# 这里添加实际设置Node ID的命令,例如:
# lan8670tool --device $DEVICE_PATH --node-id $NODE_ID 这入门门槛很高吧 通过调整功率来控制温度
页:
[1]