LS1046A SGMII网口无PHY芯片的配置

本文介绍了LS1046处理器在DEMO板上如何通过SGMII接口连接PHY芯片实现网口通信。在没有PHY芯片的直连情况下,需要关闭SGMII的自协商模式并配置为FIXED-PHY。通过修改设备树配置文件fsl-ls1046a-frwy.dts,详细设置了各个ETH端口的固定链接参数和PHY连接类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 转载地址:https://www.pianshen.com/article/14731854606/

  • LS1046支持SGMII网口,DEMO板设计SGMII+PHY+RJ45的方式出网口,MIDO接口访问PHY芯片,会设置PHY芯片的MIDO地址。

  • 而实际在板间或者CPU之间,是直接通过SGMII对接通讯的,没有PHY芯片,则不要配置PHY芯片MIDO地址。必须配置SGMII网口的PHY为FIXED-PHY,并且关闭SGMII内部PHY自协商模式,方可通讯。

  • 修改设备树配置文件 fsl-ls1046a-frwy.dts
    &fman0 {

    /*eth0 FM3 RGMII 调试网口 */
    ethernet@e4000 {
    phy-handle = <&rgmii_phy1>;
    phy-connection-type = “rgmii”;
    };

    /eth1 FM6 SGMII 对应VP0/
    ethernet@ea000 {
    fixed-link = <0 1 1000 0 0>;
    phy-connection-type = “sgmii”;
    };

    /eth2 FM2 SGMII 对应VP1/
    ethernet@e2000 {
    fixed-link = <0 1 1000 0 0>;
    phy-connection-type = “sgmii”;
    };

    /eth3 FM5 SGMII 对应VP2/
    ethernet@e8000 {
    fixed-link = <0 1 1000 0 0>;
    phy-connection-type = “sgmii”;
    };

    /eth4 FM9 SGMII 对应VP3/
    ethernet@f0000 {
    fixed-link = <0 1 1000 0 0>;
    phy-connection-type = “sgmii”;
    };

    /eth5 FM10 SGMII 主备VP网口/
    ethernet@f2000 {
    fixed-link = <0 1 1000 0 0>;
    phy-connection-type = “sgmii”;
    };

    mdio@fc000 {
    rgmii_phy1: ethernet-phy@1 {
    reg = <0x1>;
    };
    };
    };

  • 关闭SGMII自协商
    在这里插入图片描述
    在这里插入图片描述

### PCIe网口配置与使用说明 #### 1. PCIe设备分类及其功能 PCIe上的设备可以根据其角色划分为两类:Type 0 和 Type 1。Type 0 设备通常作为最终端的外设,例如显卡、声卡以及网卡等[^1]。这些设备直接提供特定的功能给主机系统使用。而Type 1设备则主要用于扩展PCIe总线的能力,如PCIe Switch 或 Root Port,它们的作用类似于网络中的交换机,用于连接更多的PCIe设备。 #### 2. LRES2028PF-4SFP 网络适配器简介 LRES2028PF-4SFP 是一款基于国产主控芯片设计的 PCI Express V2.1 x4 接口的四光口千兆以太网网络适配器[^2]。该适配器支持高速数据传输,并且适用于多种服务器环境下的高带宽需求场景。 #### 3. Realtek RTL8188CE 网络控制器驱动程序 对于某些具体的硬件平台而言,可能需要加载相应的内核模块来启用其网络功能。例如,在Linux环境下,如果检测到的是Realtek RTL8188CE 芯片组,则会自动加载 `rtl8192ce` 驱动程序并完成初始化过程[^3]。这一步骤确保了操作系统能够识别并与物理层通信。 #### 4. SerDes 协议转换 (XFI 至 SGMII) 当面对特殊的应用场合时,比如将原本工作于 XFI 的万兆链路调整为更经济实用的 SGMII 千兆模式下运行,可以通过修改核心参数实现这一目标。具体来说就是依据官方文档给出的数据手册找到合适的寄存器设置组合——即此处提到的 “3455” 方案: | 参数名称 | 值 | |----------------------|----------| | SRDS_PRTCL_S1RCW[128:143] | A | | SD1_RX0_P/N | B | | ... | ... | 上述表格展示了如何重新映射信号路径以便适应新的电气特性要求[^4]。值得注意的是,任何更改都应谨慎操作以免造成不可逆损坏! #### 5. U-Boot 中关于网络部分的启动逻辑分析 最后回到固件层面来看一下底层是如何处理整个流程的。在Freescale LS系列处理器对应的U-Boot版本里头,有关网络方面的初始动作被定义到了如下文件夹结构当中去执行: ```c flexbuild/packages/firmware/u-boot/board/freescale/ls1046ardb/ls1046ardb.c ``` 这里包含了针对不同型号开发板所特有的定制化脚本片段,其中包括但不限于PHY探测、MAC地址分配等功能项[^5]。 --- ### 示例代码展示 下面是一段简单的Python脚本来演示如何读取当前系统的PCIe设备列表: ```python import os def list_pcie_devices(): devices = [] pci_path = '/sys/bus/pci/devices' if not os.path.exists(pci_path): return None for device_dir in os.listdir(pci_path): vendor_id_file = f"{pci_path}/{device_dir}/vendor" class_code_file = f"{pci_path}/{device_dir}/class" try: with open(vendor_id_file, 'r') as vf, \ open(class_code_file, 'r') as cf: vendor_id = vf.read().strip() class_code = int(cf.read(), base=16) # Check if it's a network controller (Class Code: 0x02xx) if (class_code >> 16) == 2: devices.append((device_dir, hex(int(vendor_id, 16)))) except Exception as e: continue return devices if __name__ == "__main__": pcie_nics = list_pcie_devices() if pcie_nics is not None and len(pcie_nics) > 0: print("Detected NICs on PCIe bus:") for dev_info in pcie_nics: print(f"- Device ID: {dev_info[0]}, Vendor ID: {dev_info[1]}") else: print("No active PCIe Network Interface Cards found.") ``` 此脚本利用 Linux 文件系统层次标准(Filesystem Hierarchy Standard),遍历 `/sys/bus/pci/devices` 下的所有目录寻找符合条件的网络接口卡信息。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值