Apex Dual Orin 交换机与高级网络功能(BCM89564)#

前提条件(需下载文件)#

下载到DUALORIN:broadcom0320.tar.gz

2.1驱动:2.1_oneui_.tar (2.1固件用于RPC连接的工具)。使用方法:解压缩后进入oneui/scripts/rpcutil 目录,python3执行相应命令即可

2.1pcie驱动:brcm-xgbe.ko

2.1查询固件软件:bcmtools  使用方法:sudo ./bcmtools –swinfo

升级2.6固件版本:bcm89564gb0_evk_avb_switch_rev1.img

使用工具在DUAL ORIN: bcmutil0422

初始化配置#

说明:

初始化配置需在设备每次冷启动后执行一次。

proxy2_6 工具是 bcmutil 与 SPI 接口通信的中间代理,务必确保只运行一个实例,否则会导致冲突。

proxy2_6 成功启动,即可继续执行寄存器读写、组播等功能的配置使用。

设备上电后进入系统,进入SPI工具目录:#

cd /home/nvidia/broadcom/2.6/

执行 SPI 初始化脚本:#

./spi.sh

启动 proxy2_6 服务:#

./proxy2_6 -i spi -c bcm89564 &

如果已在后台运行可以跳过此步。通过以下查询命令确认:

ps aux | grep proxy

若已在后台运行,实行上述命令后会有以下示例输出:  root   12345  0.0  0.1  12345  6789 pts/0    Sl   10:00   0:00 ./proxy2_6 -i spi -c bcm89564

若需要终止当前proxy进程:

sudo kill 12345   #12345替换为之前命令查询到的实际的PID
sudo pkill -f "proxy2_6 -i spi -c bcm89564"

(注意:非定制情况下,BCM89564相关功能配置在设备重断电启后都需要重新配置)

固件2.1升2.6#

说明:基于BCM89564拓展的高级功能都必须在2.6版本的固件下进行配置使用,若您的固件版本为标准的2.1,需要先按如下操作将固件升级至2.6。

注意事项#

版本匹配:必须使用 upgrading_from_2.1_to_2.6 目录下的工具和镜像。

唯一代理:确保 proxy2_6 仅运行一个实例。

备份数据:升级前备份关键配置(如MAC地址、VLAN设置)。

升级前准备#

确认当前环境#

一台Ubuntu系统的PC:版本为19.04及以上

设备状态:确保设备已正常上电并进入系统。

固件版本:执行以下命令查看固件版本信息。当前版本应为 2.1(若已是2.6,无需升级)。

cd /home/nvidia/broadcom/2.6/
./bcmutil version

文件路径:升级工具目录:/home/nvidia/broadcom/2.6/upgrading_from_2.1_to_2.6/

固件镜像:bcm89564gb0_evk_avb_switch_rev1.img(需确认是2.6版本)。

确认或获取设备的 MAC 地址(用于烧录验证)

sudo ./flash_eeprom r -D /dev/i2c-8

关闭冲突进程#

检查并终止已运行的代理服务:

ps aux | grep proxy2_6  #查看进程
kill -9 进程ID       #强制终止(如有多个),进程ID替换成第一行命令查看后的实际ID

升级步骤#

初始化SPI通信#

cd /home/nvidia/broadcom/2.6/
./spi.sh

启动代理服务#

./proxy2_6 -i spi -c bcm89564 & 

执行升级脚本#

cd /home/nvidia/broadcom/2.6/upgrading_from_2.1_to_2.6/
./run.sh 127.0.0.1:5555 bcm89564gb0_evk_avb_switch_rev1.img

注意:如果失败,请手动设置网卡IP

sudo ifconfig eth1 127.0.0.x netmask 255.255.255.0  # x为1~254

检查驱动版本#

sudo rmmod brcm_xgbe           #卸载旧驱动
sudo insmod brcm-xgbe.ko       #加载新驱动(路径在2.6目录下)
ethtool -i eth1                #验证驱动版本

预期输出

2.6驱动:version: 2.0

2.1驱动:version: 1.2.0(需重新升级)

升级后验证#

确认固件版本#

cd /home/nvidia/broadcom/2.6/
./bcmutil version

预期输出:显示版本号为 2.6.x

重启设备#

sudo reboot

SPI读写寄存器#

设备上电后进入系统,进入SPI工具目录:#

cd /home/nvidia/broadcom/2.6/

初始化SPI通信和芯片代理#

./spi.sh
./proxy2_6 -i spi -c bcm89564 &

通过以下示例代码读写寄存器:#

./bcmutil reg read  0x49020004 16 0         #读寄存器  0x49020004表示寄存器地址,0表示master主芯片,要在slave读写更换成1即可
./bcmutil reg write 0x4a800302  16 0 0x111  #写寄存器  0x111为写入的内容,被写入的寄存器地址0x4a800302
./bcmutil reg read  0x4a800302 16 0         #读寄存器  读取0x4a800302地址的寄存器   

使用初始化配置中提及的命令关闭proxy2_6, 按照上述步骤,更改寄存器地址,可重新读写其他寄存器

读写交换芯片管理MAC地址#

设备上电后进入系统,进入SPI工具目录:#

cd /home/nvidia/broadcom/2.6/

初始化SPI通信和芯片代理#

./spi.sh
./proxy2_6 -i spi -c bcm89564 &

如本次操作已经在SPI工具目录下执行过SPI 初始化脚本./spi.sh可跳过,但请确认已经关闭上一个proxy2_6的运行实例,重新启动proxy2_6 服务。

执行以下命令,可进行MAC地址读写:

./bcmutil optm writeMAC 02:aa:bb:cc:dd:02    #写入mac
./bcmutil optm readMAC                       #读取mac

若读取MAC出现以下显示,则写入与读取一致:

[NVM:FLASHMNG] [inst:0x00] [id:0x00b0] [line:00642] [state:0x03] [error:0x00]Connected
         Mac idx 0.
         Mac addr 02:aa:bb:cc:dd:02        #读取和写入的一致

89564端口与DUAL ORIN物理端口的对应关系#

组播等功能的配置基于SPI读写寄存器,要使您所接的物理接口功能对应您多希望指定配置的,需要了解:89564端口与DUAL ORIN物理端口的对应关系。

以下内容通过举例的方式辅助您进行之后的功能配置:

根据实际的物理连接配置,可根据上图找到对应的芯片内部端口。

再按照下列规则,根据所控制的端口推算出

以启用端口6、5、1(均在左侧master芯片上)为例:#

端口号

6

5

4

3

2

1

0

状态:1表示启用,0不启用

0

1

1

0

0

0

1

0

则配置master 1、5、6口组播功能:

./bcmutil reg write 0x4b000036 16 0 0x62

表示状态的由0,1组成的二进制数为:0110 0010,转换成16进制为:0x62

并且1、5、6端口均在左边的master芯片(0表示master,若为1表示slave)

组播#

背景说明:#

默认固件已经支持组播功能,所有端口转发所有组播报文

本手册的配置目的是:只允许指定端口进行组播报文转发,其他端口屏蔽

芯片结构:#

BCM89564 是由两片 BCM89561 芯片级联拼接而成,每片都有独立寄存器。

左边芯片是 Master(主芯片)

右边芯片是 Slave(从芯片)

两片通过 Slave 的 8 号口 和 Master 的 6 号口 进行连接(用于通信同步)

Slave 的 15 号口连接 eth1 网口

以配置slave 15口及master1、5口可以转发组播为例:#

所有命令均在设备终端执行,默认路径为 /home/nvidia/broadcom/2.6/

进入 Broadcom 工具目录:#

cd /home/nvidia/broadcom/2.6/

初始化 SPI 通信和芯片代理:#

./spi.sh
./proxy2_6 -i spi -c bcm89564 &

配置组播转发端口:#

(1)配置 Slave 芯片:开启 8号口 和6号口 的组播功能

./bcmutil reg write 0x4b000036 16 1 0x140

0x4b000036:用于配置“特殊组播端口”

16 :代表寄存器宽度

1:代表 Slave 芯片

0x140:二进制:0001 0100 0000     表示开启 port8(bit8)、port6(bit6)

(2)开启 Slave 芯片的组播地址学习(ARL)功能

./bcmutil reg write 0x4b000021 8 1 0xc1

0x4b000021:组播 ARL 控制寄存器

0xc1:启用组播地址学习 + 启用 MAC 查找(广播/组播查表)

(3)配置 Master 芯片:开启 1、5、6号口 的组播功能

./bcmutil reg write 0x4b000036 16 0 0x62

0:代表 Master 芯片

0x62:二进制:0110 0010

表示开启 port6(bit6)、port5(bit5)、port1(bit1)

(4)开启 Master 芯片的组播地址学习功能

./bcmutil reg write 0x4b000021 8 0 0xc1

验证步骤(推荐)#

场景一:设备侧发组播 → PC 抓包#

使用设备的 千兆口 0 或 1 连到 PC

设备端通过 GStreamer、sendip、ROS 等发组播流

在 PC 上运行 Wireshark / tcpdump 抓包,确认是否收到组播数据

若 PC 收到组播,说明转发配置成功

场景二:PC 发组播 → 模组抓包#

PC 发组播数据(可以用sendip或 VLC)

Jetson 设备用 tcpdump 抓 eth1 看是否能接收到对应的组播包

场景三:切换端口验证转发行为#

将 PC 接到设备的 千兆口 2 或 3

重复上面的组播发送和抓包

正常情况下应抓不到数据(因为这些口未启用组播转发)

无包表示组播未被广播,配置生效

补充说明#

如果修改后仍然收不到包,请检查:是否重新执行了 spi.sh 和 proxy2_6,端口物理连接是否匹配目标口号,VLAN、MTU、驱动是否干预组播行为。

寄存器地址和位掩码是芯片级配置,请勿随意更改。

本配置不具备持久性,重启设备后需重新配置(或集成进固件)。

VLAN配置#

以下内容用于帮助您快速在设备上启用 VLAN(虚拟局域网)功能,让网络分组更清晰,支持组播、TSN 等高级功能。

前置条件:接两台 Ubuntu 电脑到设备的千兆0口(port5)和千兆1口(port1)

示例目标:添加一个 VLAN,VLAN ID 为 101,并将 端口1 和端口5(bit1 和 bit5)加入 VLAN,且设置为 tag 转发 模式。

进入 Broadcom 工具目录#

cd /home/nvidia/broadcom/2.6/

初始化 SPI 通信和芯片代理#

./spi.sh
./proxy2_6 -i spi -c bcm89564 &

配置 VLAN 101,并将 端口1 和端口5 加入该 VLAN,同时开启 tag 转发:#

./bcmutil0422 vlan add 101 0x22 0x22

参数说明:

101:VLAN ID,定义逻辑网络编号(范围 1 ~ 4094)

0x22:表示将 端口1(bit1) 和 端口5(bit5) 加入 VLAN   (十六进制0x22= 二进制0010 0010,表示第1和第5位为1,对应的是端口1 和端口5

0x22:表示在 端口1 和端口5 上启用 VLAN Tag 转发(IEEE 802.1Q Tag 会保留)

Tag 转发说明:开启 tag 转发后,数据帧中会带有 VLAN 的标记字段(Tag),下游设备或交换机可以识别 VLAN 所属。

在两台 Ubuntu 电脑上配置 VLAN 虚拟接口#

在配置vlan虚拟网络时,如提示我们当前网卡不规则的情况需要使用如下指令:

sudo ip link add link 网卡 name vlan101 type vlan id 101  #更改网卡名称为vlan并且建立虚拟网络
sudo ip link set vlan101 up #打开虚拟网络
ifconfig #确认是否有网络信息
sudo ip addr add 192.168.31.101(这个地址可随意写)/24 dev vlan101 #配置网卡ip

测试网络是否互通#

您可以从任意一台电脑执行:

ping -I 网卡名.101 192.168.31.100 (对端设备IP)   #千兆1口可以ping通,千兆0口ping可以通

参数说明:

ping:测试网络是否可达

-I 网卡名.101:指定通过某个 VLAN 虚拟网卡 发送 ICMP 包(例如:vlan101)

192.168.31.100:你要 ping 的目标设备的 IP 地址(一般是另一台 PC 的 VLAN 虚拟接口 IP)

如果能 ping 通,说明 VLAN 配置已成功,两个网口处于同一个虚拟局域网中。

配置所有接口都可打开VLAN并ping通:#

./bcmutil0422 vlan add 99 0xFFFF 0xFFFF

若您想恢复成只允许特定端口通信的 VLAN 配置(比如只允许端口1和5互通),可以重启设备后重新执行:

./bcmutil0422 vlan add 101 0x22 0x22

千兆网口巨帧功能#

以下内容旨在指导如何在 Jetson APEX DUAL ORIN 平台中,配置 BCM89564 芯片的巨帧功能,以支持更大尺寸的以太网数据帧传输(如视频流或高速通信)。

芯片结构说明(再次提醒):#

BCM89564 芯片由两片 BCM89561 拼接组成:Master(主芯片)在左侧,Slave(从芯片)在右侧

巨帧功能配置步骤:#

进入工具目录并初始化 SPI 通信#

cd /home/nvidia/broadcom/2.6/
./spi.sh
./proxy2_6 -i spi -c bcm89564 &

打开 Master 芯片的巨帧支持功能#

./bcmutil reg write 0x4b004001 8 0 0xff

0x4b004001 是控制巨帧的寄存器地址

8 是寄存器位宽

0 表示 Master 芯片

0xff 表示启用所有相关端口支持巨帧

打开 Slave 芯片的巨帧支持功能#

./bcmutil reg write 0x4b004001 8 1 0xff

1 表示 Slave 芯片

0xff 同样表示全部端口支持巨帧(按位开启)

gPTP时间同步#

用于在 Jetson 平台上配置 BCM89564 芯片的 gPTP 时间同步功能,适用于多设备时间同步、TSN 网络控制等场景。

硬件结构前提:#

BCM89564 芯片由两个 BCM89561 芯片级联组成

每片有多个端口,例如:Slave 的 15 号口连接 eth1(用于时间同步)

配置 gPTP 功能时,需要明确在哪个端口启用

进入 Broadcom 工具目录并初始化通信#

cd /home/nvidia/broadcom/2.6/
./spi.sh
./proxy2_6 -i spi -c bcm89564 &

查看指定端口 gPTP 状态#

./bcmutil ets portStatus 15

示例输出:portStatus[15]: asCapable across domains: 1

portStatus 命令用于查看端口是否支持并启用了 gPTP

关键字段:asCapable across domains:

1:表示端口支持并启用了 gPTP 功能

0:表示端口未启用或不支持 gPTP

查看 gPTP 是否已与主机同步#

./bcmutil ets getStatus 0

示例输出:Clock status: is sync

输出解释:查看芯片 gPTP 模块是否与 Jetson Orin 同步。关键字段:is sync,如果显示is sync,说明时间已同步;若未显示,说明尚未完成同步

启用或关闭某端口的 gPTP 功能#

./bcmutil ets enablePort 15 true     # 开启 gPTP
./bcmutil ets enablePort 15 false    # 关闭 gPTP

参数含义:15:芯片的端口编号;true:启用该端口 gPTP 功能;false:禁用该端口 gPTP 功能