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 功能