2. 物理层优化:CAN总线速率选择、CAN FD的优势、以太网DoIP的应用

聊完了刷写流程,咱们得把目光往下放一放,看看最底层的物理层。你想想看,再好的刷写策略,再牛的压缩算法,如果物理层传输速率上不去,那都是白搭。这就好比高速公路修得再直,你开个拖拉机上去,也跑不出法拉利的速度。

这一节,我重点聊聊三个方向:传统CAN总线的速率怎么选、CAN FD到底香在哪、以及以太网DoIP什么时候该上。说白了,就是帮你选对路,跑得快。

2.1 CAN总线速率选择:别被“1Mbps”忽悠了

很多工程师一上来就说:“CAN总线最高1Mbps,我直接拉满不就行了?” 嗯,我以前也这么干过,结果吃了大亏。

CAN总线的速率,不是你想设多少就设多少。它跟总线长度、节点数量、收发器型号都强相关。我给大家一个经验公式:

总线长度(米) × 速率(Mbps) ≤ 40 ~ 60

举个例子:1Mbps下,总线长度最好别超过40米。如果车上有十几个ECU,线束绕来绕去,实际长度可能远超你的想象。

我个人习惯,在做刷写性能优化时,会先确认两个事:

  • 总线负载率:刷写期间,CAN总线负载率别超过60%。超过这个值,错误帧会急剧增加,重传机制反而拖慢速度。
  • 实际可用带宽:别只看理论值。CAN协议本身有开销,比如帧起始、仲裁场、CRC等。实际有效数据带宽,大概只有理论值的60%-70%。

我在项目中遇到过,某款车用500kbps刷写,总感觉速度上不去。一抓波形发现,总线负载率飙到了85%,大量错误帧重传。后来我把速率降到250kbps,虽然单帧慢了,但重传少了,整体刷写时间反而缩短了15%。

我的建议: 如果总线节点多、线束长,别盲目追求高速。250kbps或500kbps往往是刷写场景下的“甜点速率”。

2.2 CAN FD的优势:不只是“快”那么简单

CAN FD(Flexible Data-rate)出来这么多年了,很多朋友还停留在“它比CAN快”的认知上。其实,CAN FD的优势远不止于此。

第一,数据场长度翻倍。 传统CAN一帧最多8字节,CAN FD可以到64字节。你想想看,刷写一个2MB的固件,传统CAN要发26万帧,CAN FD只要3.2万帧。帧数少了,总线仲裁次数也少了,效率自然高。

第二,速率动态切换。 CAN FD在仲裁段用标准速率(比如500kbps),在数据段切换到高速率(比如2Mbps甚至5Mbps)。这个设计很聪明,既保证了总线仲裁的可靠性,又提升了数据传输效率。

我给大家看一个实际对比数据:

参数 传统CAN(500kbps) CAN FD(2Mbps数据段) 提升比例
单帧最大数据 8字节 64字节 8倍
刷写2MB固件帧数 约26万帧 约3.2万帧 减少88%
理论传输时间 约33秒 约5秒 快6倍

当然,CAN FD也有坑。我曾经在一个项目里,发现CAN FD在数据段用5Mbps时,线束稍微长一点,信号质量就急剧下降。后来我们老老实实降到2Mbps,配合高质量的屏蔽双绞线,才稳定下来。

注意: CAN FD对收发器和线束要求更高。如果车上用的是老式CAN收发器,或者线束屏蔽没做好,高速率下很容易出现位错误。我建议先做信号质量测试,再定速率。

2.3 以太网DoIP的应用:什么时候该上“高速”

说到DoIP(Diagnostic over Internet Protocol),很多人的第一反应是:“这玩意儿太复杂,用不上。” 其实不然。当刷写数据量超过几十MB,或者你需要在几分钟内完成刷写时,CAN和CAN FD就有点力不从心了。

DoIP的优势很明显:

  • 带宽大:100Mbps甚至1000Mbps,跟CAN不在一个量级。
  • 传输距离远:用网线可以轻松到100米,适合产线或售后场景。
  • 支持并行刷写:通过TCP/IP协议,可以同时给多个ECU刷写,互不干扰。

我参与过一个项目,整车有30多个ECU需要刷写,总数据量超过500MB。如果用CAN FD,算下来要刷40多分钟。后来我们上了DoIP,配合并行刷写策略,整个流程压缩到了8分钟以内。客户当场就竖了大拇指。

不过,DoIP也不是万能的。它需要ECU支持以太网硬件,成本比CAN高不少。而且,DoIP的协议栈比较复杂,从物理层到应用层,每一层都可能出问题。

我的经验: 什么时候用DoIP?三个条件满足任意两个,就值得上:

  1. 单ECU刷写数据量超过100MB
  2. 整车刷写时间要求小于15分钟
  3. ECU数量超过10个

另外,DoIP的速率选择也有讲究。100Mbps够用吗?说实话,对于刷写场景,100Mbps基本够用。因为瓶颈往往不在网络带宽,而在ECU端的Flash写入速度。你想想看,网络再快,ECU的Flash写入速度只有几MB/s,那也白搭。

避坑指南: 我曾经遇到一个案例,DoIP刷写时速率上不去,抓包发现是TCP窗口太小,导致发送端一直在等待ACK。后来调整了TCP窗口大小和Nagle算法,速率直接翻倍。嗯,这里要注意,DoIP优化不只是物理层的事,传输层也得调。

总结一下这一节的核心:

  • CAN总线:别盲目追求高速,250k-500k是刷写甜点。
  • CAN FD:数据场64字节是最大优势,但要注意线束质量。
  • DoIP:大容量刷写的终极方案,但成本和复杂度也高。

下一节,咱们聊聊传输层的优化,比如如何调整块大小(BlockSize)和间隔时间(STmin)来进一步提升刷写速率。敬请期待。