打印
[学习资料]

在 Linux 上为 EVB-LAN8670-USB 设备启用 IEEE 802.3cg 10BASE-T1S 协议

[复制链接]
116|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
根特皇宫w|  楼主 | 2025-3-24 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LAN8670 是 Microchip 推出的 10BASE-T1S 以太网 PHY,符合 IEEE 802.3cg 标准,支持多点总线拓扑。要在 Linux 上启用 10BASE-T1S,需要正确配置 设备树(Device Tree)、驱动程序,并使用工具验证通信。

1. 了解 10BASE-T1S (IEEE 802.3cg) 规范
10BASE-T1S 是 IEEE 802.3cg 规范的一部分,专为 工业自动化、汽车、物联网 设计,主要特点:

单对非屏蔽双绞线(Single-Pair Ethernet, SPE) 传输 10 Mbps

支持总线拓扑,多个设备可共享 MDIO 总线

PLCA(PHY-Level Collision Avoidance) 机制,确保低时延和高可靠性

最大 25 米传输距离(取决于线缆质量)

2. 确保 Linux 支持 10BASE-T1S
首先,检查 Linux 内核是否已启用 LAN8670 及 10BASE-T1S 相关功能:

bash
复制
编辑
zgrep LAN867X /proc/config.gz
如果输出:

ini
复制
编辑
CONFIG_MICROCHIP_LAN867X_PHY=y
说明 LAN8670 PHY 驱动已启用,否则需要重新编译内核。

如果未启用,可以手动打开以下选项并重新编译内核:

bash
复制
编辑
Device Drivers  --->
   
  • Network device support  --->
            
  • PHY Device support and infrastructure  --->
                
  • Microchip LAN867x PHY support
    3. 配置 Linux 设备树 (Device Tree)
    为了在 Linux 上启用 10BASE-T1S,需要在 设备树(DTS) 中定义 LAN8670 PHY 及其 PLCA 配置。

    3.1 配置 MDIO 设备
    dts
    复制
    编辑
    &mdio {
        status = "okay";  // 确保 MDIO 启用

        lan8670_0: ethernet-phy@0 {
            compatible = "microchip,lan8670";
            reg = <0x0>;  // MDIO 设备地址 0
            ethernet-phy-id = <0x1fc0 0x8670>;  // LAN8670 的 PHY ID

            // 10BASE-T1S 配置
            plca-enable = <1>;       // 启用 PLCA
            plca-local-id = <0>;     // 设备 ID(0-7)
            plca-node-count = <3>;   // 总线上设备数量
        };

        lan8670_1: ethernet-phy@1 {
            compatible = "microchip,lan8670";
            reg = <0x1>;  // MDIO 设备地址 1
            ethernet-phy-id = <0x1fc0 0x8670>;

            plca-enable = <1>;
            plca-local-id = <1>;
            plca-node-count = <3>;
        };
    };
    解释:

    compatible = "microchip,lan8670" 指定设备兼容 LAN8670 PHY。

    plca-enable = <1> 开启 PLCA 机制,提高 10BASE-T1S 总线效率。

    plca-local-id = <0> / <1> 指定设备在 PLCA 网络中的 ID(通常 0 是协调设备)。

    plca-node-count = <3> 表示总线上 3 个设备(根据网络拓扑调整)。

    4. 重新编译并应用设备树
    编译新的 DTB(设备树二进制):

    bash
    复制
    编辑
    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs
    然后将新的 dtb 文件 复制到 /boot 目录,例如:

    bash
    复制
    编辑
    cp arch/arm64/boot/dts/<your_board>.dtb /boot/
    重启设备:

    bash
    复制
    编辑
    reboot
    5. 验证 10BASE-T1S 配置
    5.1 检查 LAN8670 是否正确加载
    bash
    复制
    编辑
    dmesg | grep -i lan8670
    如果设备正常工作,应该看到:

    less
    复制
    编辑
    [  2.123456] mdio_bus: LAN8670 PHY found at address 0
    [  2.234567] mdio_bus: LAN8670 PHY found at address 1
    [  2.345678] LAN8670 PHY initialized with PLCA enabled
    5.2 使用 ethtool 查看 10BASE-T1S 配置
    bash
    复制
    编辑
    ethtool eth0
    应该显示:

    vbnet
    复制
    编辑
    Supported link modes: 10base-T1S/Full
    Speed: 10Mb/s
    Duplex: Full
    Auto-negotiation: on
    PLCA: enabled
    5.3 读取 PLCA 状态
    bash
    复制
    编辑
    mdio-tool read 0 0x1F
    应返回:

    复制
    编辑
    0x0203
    其中:

    0x02 表示 PLCA 已启用

    0x03 表示 总线上有 3 个设备

    6. 进行 10BASE-T1S 通信测试
    6.1 使用 ping 测试
    如果多个 EVB-LAN8670-USB 设备连接在同一 10BASE-T1S 总线,可以使用 ping 进行基本连通性测试:

    bash
    复制
    编辑
    ping 192.168.1.2
    如果设备正确连接,应该返回:

    python
    复制
    编辑
    64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.3 ms
    6.2 监测网络流量
    bash
    复制
    编辑
    tcpdump -i eth0
    可以实时查看 10BASE-T1S 设备的数据包。

    6.3 使用 iperf 测试吞吐量
    在 LAN8670 设备 1(服务器)上运行:

    bash
    复制
    编辑
    iperf -s
    在 LAN8670 设备 2(客户端)上运行:

    bash
    复制
    编辑
    iperf -c 192.168.1.2 -u -b 10M
    应该显示:

    matlab
    复制
    编辑
    [  4]  0.0-10.0 sec  10.0 MBytes  8.3 Mbits/sec
    表示 10BASE-T1S 工作正常。

    7. 可能的故障排查
    问题        可能原因        解决方案
    dmesg 无 LAN8670 相关日志        设备未连接        重新插拔设备,检查 USB 连接
    ethtool eth0 无 10base-T1S        设备未正确识别        确保 Device Tree 已正确配置
    mdio-tool read 返回 0xFFFF        MDIO 设备未响应        确保 PLCA 配置正确,检查设备地址
    ping 不通        设备未分配 IP        使用 ifconfig eth0 192.168.1.1 up 设定 IP
    总结
    启用内核支持 LAN8670 及 10BASE-T1S(CONFIG_MICROCHIP_LAN867X_PHY=y)。

    在设备树中正确配置 LAN8670 及 PLCA 参数。

    编译并加载设备树,确保 dmesg 识别 LAN8670 设备。

    使用 ethtool 和 mdio-tool 验证 10BASE-T1S 工作状态。

    使用 ping 和 iperf 进行实际网络测试。

    这样就能在 Linux 上成功启用 IEEE 802.3cg 10BASE-T1S 并进行数据通信。

  • 使用特权

    评论回复
    沙发
    xuanhuanzi| | 2025-3-25 11:07 | 只看该作者
    这种是需要配置到文件里执行吧

    使用特权

    评论回复
    发新帖 我要提问
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    30

    主题

    147

    帖子

    0

    粉丝