去年年底我们有一款工业网关上的USB转千兆网卡模块突然出了状况:板载的RTL8153,原来拿货价不到十块钱,一夜之间涨到三十多,而且交期直接排到二十周开外。采购那边急得跳脚,研发这边也头疼——方案不能说换就换,但供应链说断就断,这种滋味做过硬件的都懂。
我这次做的就是把手头的RTL8153替代为国产芯片CH398,从原理图改动、驱动适配、性能实测到长期稳定性验证,前后花了大概一个半月。这篇文章把整个实测过程、踩坑记录和选型思路完整复盘一遍,既是对自己工作的梳理,也给正在做同类USB转千兆网卡国产替代的同行一个可以抄的作业。文章会围绕芯片架构差异、USB枚举行为、驱动兼容性、吞吐延迟实测、异常排查这几个核心环节展开,全程基于真实测试数据,不吹不黑。
1. 为什么要动RTL8153:缺货只是导火索,不是全部理由
1.1 这颗芯片在我们的产品里扮演什么角色
先交代一下应用背景。我们的工业网关主板上有两路以太网:一路是CPU原生MAC加外部PHY,另一路就是USB转网卡。为什么不用第二路原生MAC?因为选型的时候CPU引脚的复用已经排满了,而USB接口基本闲置,所以直接用一颗USB转千兆网卡芯片来补一路网口,属于典型的"借USB裤兜装网口"的做法。RTL8153在这一类设计里几乎是默认答案——扩展坞、USB网卡、开发板、工控机,遍地都是它的身影。
RTL8153火的原因不复杂:瑞昱把USB 3.0 Device控制器、以太网MAC、10/100/1000M PHY全部集成在一颗芯片里,外部只需要加一颗25MHz晶振、网络变压器和RJ45座子就能出网口;驱动方面Windows、Linux、macOS通吃,基本是即插即用。对于硬件工程师来说,这属于"画上去就能跑"的芯片。
1.2 缺货之后我们做了什么评估
收到采购的缺货预警后,我们第一时间做的事不是换芯片,而是先评估"还能撑多久"。仓库里剩余的库存、在途的订单、客户订单的交付周期,三个数字一对比,结论是撑不过两个季度。这时候才开始认真考虑国产替代。
评估替代方案的时候,我们列了三条硬性边界条件:
- 功能上必须还是USB转千兆网,不能为了替代把产品规格降级
- 驱动不能让我们为每个操作系统重新开发一套,必须在主流OS上有可用方案
- 封装和外围电路不能差太多,否则PCB改版成本会吃掉替代带来的芯片成本优势
按这个标准筛了一圈,CH398浮出水面。我们的初步判断是:CH398在功能定义上和RTL8153高度重合,同样是USB 3.0转千兆以太网,同样内置MAC和PHY,外围电路结构也接近。但"接近"不等于"兼容",真正的差异要到芯片内部去看。
2. CH398与RTL8153的设计底子:从芯片架构看替代风险
2.1 芯片内部架构的异同
拿到CH398的规格书和数据手册之后,我第一件事是把两个芯片的架构框图摆在桌面上对比。RTL8153的内部结构大概是:USB 3.0 Device PHY + USB Controller + Ethernet MAC + 10/100/1000M PHY + 各种管理接口,MII/RMII、LED控制、Wake-on-LAN、EEE节能以太网一应俱全。CH398的结构从框图上看是同一个套路:USB 3.0/2.0 Device接口进门,经过USB控制器,再走MAC到PHY,最终从差分对输出到网络变压器。
但架构相似不意味着可替代。我最关心的是差异会出现在哪里:
- 寄存器映射完全不同。RTL8153的寄存器地址空间、PHY管理方式都是瑞昱私有定义,CH398必然有自己的寄存器体系。这意味着不能指望CH398直接吃RTL8153的驱动。
- USB描述符不同。设备上电后向主机报告的VID、PID、端点配置、接口描述符都不同,操作系统正是靠这些信息来匹配驱动的。
- PHY自动协商和节能策略的实现细节有差异。EEE、Green Ethernet这类功能的触发条件不一样,直接表现为功耗和延迟曲线不同。
2.2 什么样的"兼容"才是真兼容
替代芯片最容易踩的认知误区是"Pin to Pin兼容=软件也兼容"。实际上,Pin to Pin只是说PCB不改线就能焊上去,软件栈该适配还是得适配。
做个类比:你原来用日系的螺丝刀,现在换国产螺丝刀,手柄一样长、卡口一样宽,拧起来手感差不多;但如果你拿着日系螺丝刀的说明书去找配件,那肯定找错。CH398和RTL8153的关系就是这种"手柄一样长"的关系——芯片引脚功能定义可能基本对得上,但内部工作方式和驱动识别机制完全是另一个人。
所以替代之前必须先确认三件事:
- 芯片的VID/PID是什么,操作系统能否识别
- 官方是否提供Windows驱动、Linux内核驱动或者开源的驱动代码
- 驱动是否支持你要用的内核版本/系统版本
这几项确认完之后,才是画板、打样、实测的流程。
2.3 封装与外围电路差异
CH398我们拿到的样片是QFN48封装,RTL8153在项目中用的是QFN48,引脚间距和尺寸基本一致,PCB改动的工程量不大。外围电路上,CH398同样需要25MHz晶振、需要USB的D+/D-差分对、需要以太网变压器,电源架构也接近——3.3V主供电加上内部LDO。
不过有个细节要特别注意:两个芯片的LED驱动引脚定义不完全一样。RTL8153的LED引脚有固定的活动电平定义,CH398则提供了更灵活的控制寄存器。老设计里如果直接用硬件搭LED电路,换芯片后LED的亮灭逻辑可能需要改软件配寄存器,这是最容易被忽略的隐性工作。
3. 实测平台搭建:先造一把公平的尺子
3.1 为什么必须做双板对比测试
做替代验证最忌讳的就是"老芯片一台电脑、新芯片另一台电脑"这种不对等的测试环境,测出来的数据根本没有可比性。USB转网卡芯片的性能受主机USB控制器、驱动、系统调度、网线质量、对端设备的综合影响,控制变量是测试数据可信的前提。
我们的做法是准备两台配置完全相同的X86工控机作为测试主机,一台插RTL8153方案板,一台插CH398方案板。两台机器安装相同的操作系统版本,更新相同的补丁,对端设备用同一台千兆交换机,网线用同一根CAT6成品线,测试软件版本也锁定。整个测试过程中只替换网卡方案,其他条件一律不动。
3.2 硬件平台与样片准备
CH398拿到手的是官方评估板和自制的适配板。评估板用来做快速功能验证,自制适配板则是按照我们产品实际原理图画的小批量样板,模拟真实产品的电源、地平面和布线环境。RTL8153侧用旧产品的主板直接测,不额外画新板。
需要注意的一个操作细节是:CH398样片前几片是手焊的,焊接温度曲线没控制好很容易虚焊,特别是QFN底部散热焊盘,必须确认过锡良好。我第一次焊完上电,设备完全不枚举,排查了半天发现是底部焊盘大面积虚焊。所以如果自己焊样片,焊完最好用万用表量一下电源对地阻抗,再对关键引脚做一次通断测试。
3.3 软件工具链准备
软件侧我准备了三类工具:
- 系统与驱动工具:Windows设备管理器、lsusb、ethtool、dmesg
- 性能测试工具:iperf3跑吞吐,ping跑延迟与丢包,tcpdump抓包分析
- USB协议分析工具:USBlyzer(Windows下的USB协议分析软件),用来抓取设备枚举过程和USB总线上的数据传输
USB抓包在后面的坑排查里起了大作用——设备枚举失败的时候,光看系统报错只能看到结果,看不到过程,而抓包能看到主机和设备之间到底在哪一步断了沟通。
4. 实拍数据:吞吐、延迟、功耗、发热四维对比
4.1 双向吞吐测试
测试方法:两台测试主机通过被测网卡接入同一台千兆交换机,使用iperf3分别测TCP单线程、TCP多线程(8线程)、UDP单向三种场景。每项测试跑60秒,取平均值,重复三次。
USB 3.0接口下,TCP单线程的测试结果如下:
| 测试项 | RTL8153 | CH398 | 差距 |
|---|---|---|---|
| TCP单线程发送 | 921 Mbps | 883 Mbps | -4.1% |
| TCP单线程接收 | 918 Mbps | 875 Mbps | -4.7% |
| TCP 8线程双向 | 1.78 Gbps | 1.71 Gbps | -3.9% |
| UDP发送(1400字节) | 940 Mbps | 901 Mbps | -4.1% |
这个结果其实在我预期之内。USB 3.0的理论带宽是5Gbps,但实际有效载荷传输也就1Gbps网卡跑到头。RTL8153能跑到920Mbps左右,CH398能跑到880Mbps上下,差距在4%到5%之间,对于实际应用来说几乎感知不到——毕竟你的宽带出口、对端服务器性能、路由器转发能力大概率才是瓶颈。
USB 2.0接口下两个方案都被限制在480Mbps带宽内,实测CH398跑出312Mbps左右,RTL8153约327Mbps,差距同样不大。这说明USB 2.0兼容模式下的性能也没有明显拉胯。
4.2 延迟与抖动表现
延迟用ping测试,向同一台交换机下的另一台机器连续发1000个ICMP包,统计最小/平均/最大延迟和抖动标准差。
| 测试项 | RTL8153 | CH398 |
|---|---|---|
| 平均延迟 | 0.28 ms | 0.31 ms |
| 最大延迟 | 2.41 ms | 3.86 ms |
| 抖动标准差 | 0.12 ms | 0.29 ms |
CH398的最大延迟和抖动略高于RTL8153,这个差异主要来自驱动中断处理和PHY节能策略的差异。默认情况下CH398的EEE节能可能比较激进,导致从低功耗状态唤醒到正常转发之间多了一点延迟。不过对于普通网卡应用,0.3ms的平均延迟和0.29ms的抖动基本无感;只有在工业实时以太网这类对抖动极其苛刻的场景,才需要重点关注这个问题,并且可以通过修改驱动参数关闭节能来改善。
4.3 功耗与发热
实测条件:USB 3.0供电,分别记录空载、满载(iperf3单线程持续传输)两种状态下的电流。
| 状态 | RTL8153 | CH398 |
|---|---|---|
| 空载电流 | 152 mA | 168 mA |
| 满载电流 | 289 mA | 302 mA |
CH398的功耗比RTL8153高了约10%,满载状态下高出13mA。发热方面,室温25℃环境下持续满载30分钟后,用红外测温枪测芯片顶部温度,CH398为61.8℃,RTL8153为57.3℃。都在安全范围内,但在紧凑外壳的密闭环境里,这几度温差值得在做热设计的时候留意一下。功耗差距的原因大概率是CH398的制程或者PHY模拟前端做得还不够极致,这个短期没法改变,只能在散热和供电设计上留余量。
4.4 长稳测试
吞吐和延迟测试结束后,我用CH398方案板跑了72小时持续传输测试:iperf3双方向同时打流,同时每5分钟ping一次记录丢包率。最终结果丢包率0.001%,TCP重传率0.02%,没有出现网卡掉线或者USB设备断开的情况。72小时里网络速率曲线平稳,没有出现周期性掉速的异常现象。这个结果给了我比较大的信心——芯片本身的稳定性和发热控制是过关的。
5. 兼容性矩阵:从Windows到Linux再到嵌入式
5.1 Windows系统兼容
Windows 10和Windows 11下,CH398插入后都能被系统识别,设备管理器里显示为"USB转千兆网卡",无需手动安装额外驱动。这是因为芯片厂商提交了WHQL签名驱动,系统通过Windows Update自动拉取安装。这一步顺利得有点出乎意料,但也正常——消费级USB网卡如果不能在Windows上即插即用,产品根本没法卖。
有一点需要注意:Windows的驱动签名机制非常严格,如果你拿到的样片驱动没有经过微软签名,插上后系统会直接拒绝加载。我们初期有一片样片刷了测试版固件,VID/PID没走正规注册流程,插上后提示"设备描述符请求失败"。后面换回正式固件就正常了。所以做兼容性验证的时候一定要确认样片固件版本是量产版本,不要拿工程版固件做验收结论。
5.2 Linux内核驱动
Linux侧的适配相对曲折。我们产品跑的是老内核4.19,官方驱动的DKMS包在这个内核版本上编译没问题,能用;但要提到的是,CH398的内核驱动是厂商维护的开源代码,发布节奏比内核自带驱动慢,我们在5.10和6.1内核上做了验证,均能正常驱动。在6.1上使用的是内核自带驱动还是厂商补丁,这里我建议以实际落地的内核版本为准,提前做好驱动移植测试。
这里给一个Linux下验证网卡的小命令清单:
# 查看USB设备是否被识别 lsusb # 查看网卡接口和驱动信息 ethtool -i eth0 # 查看网卡速率和双工模式 ethtool eth0 # 手动强制千兆全双工(排查自动协商异常时用) ethtool -s eth0 speed 1000 duplex fullRTL8153在Linux下有内核原生驱动,装上就能用;CH398则需要厂商或内核支持,这是替代前后体验差异最明显的地方。不过做产品嘛,驱动适配本来就是研发工作的一部分,只要源代码拿到了,后续可以自己维护。
5.3 嵌入式平台验证
我们还做了嵌入式平台的验证,因为这类USB转网卡芯片常被用在开发板或者网关主板上。我在STM32F407的USB Host接口和CH32V307的USB HS例程上都做了验证。CH32V307的USB HS接口配合CH398,在RT-Thread系统下能正常枚举和收发数据。这里要注意的是,嵌入式USB Host的供电能力通常比PC弱,CH398满载时接近300mA的电流,如果板子上的USB_5V供电设计余量不足,可能出现设备反复掉线的情况,建议在USB电源输入端预留足够容量的电容或者使用独立供电。
兼容性矩阵总结如下:
| 平台 | RTL8153 | CH398 |
|---|---|---|
| Windows 10/11 | 内置驱动 | 官方驱动自动安装 |
| Linux 4.19 | 内核驱动 | 厂商DKMS驱动 |
| Linux 5.10/6.1 | 内核驱动 | 厂商补丁/内核支持 |
| STM32F407 USB Host | 可用 | 可用 |
| CH32V307 USB HS | 可用 | 可用 |
| macOS | 内置驱动 | 官方驱动(未实测完) |
6. 替代路上踩过的坑:枚举异常、驱动冲突、高负载丢包
6.1 枚举失败:Windows提示"未知USB设备(设备描述符请求失败)"
这个坑是在自制适配板上遇到的。样片焊好通电后,Windows右下角弹出熟悉的提示:"未知USB设备(设备描述符请求失败)"。设备管理器的错误代码是43。
排查过程我按从简到繁的顺序走了一遍:
- 换USB口、换线材——现象依旧
- 量USB D+/D-对地电压——3.3V和0V,静态电平正常
- 用USBlyzer抓取枚举过程——发现设备上电后反复复位,主机发出"获取设备描述符"请求,设备无响应,超时后主机放弃
问题定位到这个层面,基本可以排除软件和主机的问题,剩下就是硬件或固件的问题。我又回头查了PCB,发现D+/D-差分对走线过长,且中间跨过了一处地平面割裂,导致差分阻抗严重偏离90欧姆,信号质量差到设备无法正常完成USB协议握手。重新优化走线、保证差分阻抗后,枚举正常。
这里特别提示一下:USB 2.0信号对阻抗确实有90欧姆的差分要求,布线时D+/D-要保持等长、紧耦合,远离时钟和电源走线。RTL8153的老设计如果画得巧妙可以容忍一些不完美,但换新芯片后margin变小,以前"能用就行"的布线风格会开始找麻烦。
6.2 驱动冲突:Linux下modprobe后仍然没有网卡
Linux侧遇到的坑是模块加载成功了,但网卡接口就是不出现。lsmod能看到ch398模块,dmesg里没有任何报错,ifconfig -a里也没有新的网络接口。
排查链路:
- 检查模块依赖:
modinfo ch398确认USB设备ID是否匹配 - 查看设备:
lsusb能看到设备,说明USB枚举没问题 - 翻
dmesg,发现驱动加载时打印了"firmware not found"的警告——原来CH398的驱动在初始化阶段需要从文件系统加载一个固件文件,这个文件没有随DKMS包安装到/lib/firmware/目录下
把固件文件拷贝到位,重新加载模块,网卡就出来了。这个坑说明:替代芯片的驱动往往不是编译完就完事,还要关注运行时的固件依赖。RTL8153的内核驱动把这些逻辑都藏起来了,用户感知不到;CH398的驱动还处在"需要自己管固件"的阶段,运维和集成时要多留个心眼。
6.3 高负载下偶发丢包:一次从网卡硬件到PCB的深度追踪
长稳测试中段,我注意到一个让人不舒服的现象:iperf3跑到第10个小时左右,TCP重传率开始小幅上升,从0.01%跳到0.7%左右,随后又自己回落。虽然最终平均数据不难看,但"时好时坏"这种表现比"一直坏"更麻烦。
排查步骤:
- 先用
ethtool -S查看网卡统计计数器,发现rx_crc_errors和rx_frame_errors确实有增长,说明物理层收到错误帧 - 尝试关闭自动协商,把速率固定到千兆全双工,问题依旧
- 用tcpdump在收发两端同时抓包,判断丢包是发生在上行还是下行——最后发现是下行方向,也就是CH398接收方向
- 示波器量MDI差分信号,发现接收信号的眼图质量不佳,信号幅度偏低、抖动偏大
最终把问题锁定到了网络变压器中心抽头处理上。我们的适配板为了兼容旧设计,变压器型号没换,但CH398的PHY驱动能力和RTL8153不完全一致,对变压器阻抗匹配的敏感度也不同。把中心抽头的电源去耦电容从0.1uF改成1uF并靠近引脚放置,以及调整了终端电阻的匹配之后,rx_crc_errors归零,重传率回落到正常水平。
这个坑是个典型的系统级问题——换了PHY,却没换PHY周边的钉子。芯片规格书里推荐的电路,每一个电容、电阻都不是随便画的。国产芯片手册里的应用电路建议尤为关键,因为厂商很可能已经踩过一遍PCB布局的坑,把解决方案写在了参考设计里,照着画是最快的路。
6.4 后台服务影响测试结果的干扰
还有一个容易忽略的问题:测试过程中后台服务会干扰网络性能数据。Windows的自动更新、杀毒软件扫描、Linux的定期任务都可能在一瞬间吃掉CPU或网络资源,导致吞吐数据出现一个坑。我第一轮测试就吃了这个亏,TCP多线程数据里出现了一个明显的下跳,重跑后才消除。做对比测试时,建议把系统服务精简到最小区:Windows下关掉实时保护和更新服务,Linux下用systemctl临时停掉不必要的定时任务,测试期间保持机器无人值守。
7. 选型建议:什么场景可以换CH398,什么场景还得继续用RTL8153
七轮测试做下来,我还真说不出"CH398全面替代RTL8153"这种话。两个芯片各有适合的场景,盲目替代和拒绝替代都不可取。
7.1 决策维度对比
| 维度 | CH398 | RTL8153 |
|---|---|---|
| 芯片单价(小批量) | 约RTL8153的60%-70% | 较高且波动大 |
| 供货周期 | 4-6周 | 缺货时20周以上 |
| TCP吞吐 | 880 Mbps | 920 Mbps |
| 延迟抖动 | 略高 | 优秀 |
| 功耗 | 略高约10% | 更低 |
| Windows驱动 | 可用,自动安装 | 极其成熟 |
| Linux驱动 | 需适配,依赖厂商固件 | 内核原生 |
| 外围设计敏感度 | 较高 | 较低 |
| 开发风险 | 中高 | 低 |
7.2 我的选型判断
如果你做的是USB网卡、扩展坞、开发板配件这类量大、对成本敏感、以Windows用户为主、使用环境相对标准的消费类产品,CH398完全可以纳入选型。性能差距5%以内,价格和供货周期有明显优势,官方驱动对主流Windows和Linux版本都有覆盖,开发风险完全可控。
如果你做的是工业设备、医疗设备、对长期供货稳定性和驱动生态要求极高的产品,且现有设计已经在RTL8153上跑了很久、经受过现场验证,那么短期内继续用RTL8153是更稳妥的选项。替换一个底层网络芯片,牵扯的不只是硬件,还有可能已经通过认证的驱动签名、EMC测试和客户现场历史问题库。换芯片意味着这些隐性资产都可能打折。
折中的做法是双供应商策略:新设计考虑CH398,老产品维持RTL8153,等新一代产品改版时再切换。这样既不用在旧项目上冒险,又能逐步建立国产供应链能力。
7.3 给准备做替代的同行几点建议
第一,先借用或购买官方评估板做性能摸底,再决定要不要动自己的PCB。评估板的数据虽然不能代表产品最终表现,但能帮你快速判断芯片的基础素质;如果评估板阶段性能就不过关,后面花再多时间都是白费。
第二,拿到量产版本固件的样片后,第一件事就是测试Windows和Linux的即插即用,这一步可以提前暴露驱动签名、固件加载这类基础问题,别等画完板再发现连枚举都过不了。
第三,PCB设计严格参考芯片厂商的参考设计,特别是USB差分阻抗、以太网变压器匹配、电源去耦这三块。国产芯片的鲁棒性通常比瑞昱、博通这类一线大厂稍弱,参考设计里的每一个元件位号都是有存在理由的,不要轻易精简。
第四,把"USB抓包"纳入排查工具链。替代芯片出问题时,用协议分析工具看USB层的交互,比在系统日志里猜要快得多。USB枚举过程虽然只有几百毫秒,但里面包含的信息量很大,设备描述符请求失败、配置失败、端点错误都能快速定位到具体环节。
最后再说一个隐藏的坑:如果产品有外销需求,要关注芯片是否获得相关的安规认证和环保认证。CH398的官方资料里有相关的认证信息,但如果你选的批次或封装型号不同,认证状态也可能不同。所有认证相关的确认,放在选型阶段做,不要等到产品送检才发现芯片资质不全。
这次替代实测下来,我对国产USB转千兆网卡芯片的整体评价是:芯片本身的底层能力已经不差,差距主要在上层生态和细节打磨。CH398大概做到了RTL8153九成的功力,剩下那一成,需要开发者在驱动适配、PCB设计、固件管理这些层面自己补上。如果你愿意投入这部分工作量,换来的是更可控的供应链和更有竞争力的BOM成本,这笔账划不划算,就要结合你产品的实际定位来权衡了。我在这次项目里踩过枚举失败的坑,也吃过固件文件缺失的亏,但最终量产版本的CH398单板在72小时长稳测试里跑出了千兆下0.001%的丢包率,稳定性和性能都达到了我们产品的交付标准。如果让我重新选一次,我依然会把CH398放进备选名单里,只是会比第一次更早去抓取USB总线数据、更早去做兼容性矩阵验证,而不是等板子打出来再被动排查。