2、TSN核心标准族概览:IEEE 802.1Qbv、802.1Qbu、802.1CB、802.1AS

各位好,我们接着聊TSN。

上一章我们讲了域控制器为什么需要TSN。说白了,就是车内数据太乱了,以太网虽然带宽大,但天生不靠谱——它不保证延迟。你想想看,一个紧急制动指令和一个娱乐视频包在同一个网络里抢路,谁先走?传统以太网看运气,TSN则用一套标准来管秩序。

这一章,我带大家快速过一遍TSN的四个核心标准。嗯,它们就像交通规则里的红绿灯、应急车道、备用路线和统一时钟。我个人的经验是,把这四个标准搞明白,TSN就算入门了。

2.1 802.1Qbv:时间感知整形(Time-Aware Shaper)

这个标准,我愿称之为TSN的「灵魂」。它的作用很简单:让高优先级的数据在特定时间窗口内独占带宽。

怎么做到的?它把时间切成一个个小周期,每个周期里再划分成多个时间片。不同的数据流只能在属于自己的时间片里发送。比如,控制指令在时间片A发,视频流在时间片B发,两者互不干扰。

我在项目中遇到过一个典型场景:ADAS域控制器需要每1ms发送一次雷达点云数据,同时娱乐域在播放4K视频。如果没有Qbv,视频流量一拥而上,点云数据可能被堵上几百微秒。这在功能安全里是绝对不允许的。

配置Qbv时,你需要定义两个关键参数:

  • 周期长度(Cycle Time):比如1ms,所有时间片加起来正好等于这个值。
  • 门控列表(Gate Control List, GCL):每个时间片里,哪些队列的门是开的,哪些是关的。

举个简单的例子,假设一个周期1ms,分成两个时间片:

时间片0(0-500μs):队列7(控制流)开门,其他队列关门
时间片1(500-1000μs):队列4(视频流)开门,其他队列关门

这样,控制流永远在固定的时间窗口内发送,延迟是确定的。

核心要点:Qbv的本质是用时间换取确定性。它牺牲了一点带宽利用率(因为时间片空闲时也不能被其他流占用),但换来了可预测的延迟。

我的建议:刚开始配置Qbv时,别把时间片切得太碎。我见过有人把1ms切成16个时间片,结果调试起来非常痛苦。一般来说,3-5个时间片就够用了。

2.2 802.1Qbu:帧抢占(Frame Preemption)

Qbv虽然好,但它有个问题:如果低优先级的帧正在发送,高优先级的帧来了怎么办?Qbv只能等当前帧发完,再切换时间片。这就会引入额外的延迟。

帧抢占就是来解决这个问题的。它允许一个正在发送的低优先级帧被「打断」,先让高优先级帧插队发送,等发完了再继续传剩下的部分。

我曾经在一个项目中测试过,没有帧抢占时,一个1500字节的大视频帧可能会阻塞控制帧长达12μs。有了帧抢占,这个延迟可以降到1μs以内。

帧抢占的工作原理是这样的:

  • 发送端把低优先级帧切成一个个小片段(称为「可抢占片段」)。
  • 当高优先级帧需要发送时,发送端在当前片段结束后暂停,插入高优先级帧。
  • 高优先级帧发完后,继续发送剩余的低优先级片段。

注意:帧抢占需要硬件支持。不是所有以太网PHY和MAC都支持这个功能。选型时一定要确认芯片手册里有没有写「支持802.1Qbu」或「支持帧抢占」。

另外,帧抢占和Qbv是配合使用的。Qbv负责宏观的时间规划,帧抢占负责微观的紧急插队。两者结合,效果最好。

2.3 802.1CB:冗余(Frame Replication and Elimination)

说到冗余,做车载的工程师应该不陌生。功能安全要求系统在单点故障下仍能正常工作。802.1CB就是为网络层提供冗余的。

它的思路很简单:发送方把同一个数据包复制两份(或更多),通过不同的路径发送到接收方。接收方收到后,只保留第一个到达的包,丢弃重复的。

你可能会问:「这不就是双链路冗余吗?有什么特别的?」

嗯,特别之处在于它是标准化的。以前做冗余,各家有各家的做法,互不兼容。802.1CB统一了数据包的标记方式(Sequence Number)和去重逻辑,让不同厂商的设备可以协同工作。

配置802.1CB时,你需要关注两个角色:

  • 冗余端点(Redundancy Endpoint):负责复制和消除数据包。
  • 冗余标签(R-TAG):每个数据包头上加一个序列号,用于去重。

举个例子:

发送端:原始数据包 → 复制两份 → 分别走路径A和路径B
接收端:收到路径A的包(序列号100)→ 保留
        收到路径B的包(序列号100)→ 丢弃(因为已经收到过100号包了)

避坑指南:我曾经在一个项目中,因为忘记配置冗余标签的序列号范围,导致接收端把正常的数据包当成了重复包丢弃。嗯,那天的调试过程,不提也罢。记住,序列号空间要足够大,避免回绕时产生误判。

2.4 802.1AS:时钟同步(Timing and Synchronization)

最后这个标准,是所有TSN功能的基础。没有精确的时钟同步,Qbv的时间片会错位,帧抢占的时序会乱套,冗余包的序列号也可能对不上。

802.1AS,说白了就是车载版的IEEE 1588(精确时间协议)。它通过在主从设备之间交换时间戳报文,让所有节点的时钟保持一致。

它的精度能做到多少?在千兆以太网下,通常可以达到亚微秒级(<1μs)。对于车载应用来说,这已经足够了。

时钟同步的过程大致是这样的:

  1. 主时钟(Grandmaster)定期发送同步报文(Sync),并记录发送时间。
  2. 从时钟收到Sync后,记录接收时间。
  3. 主时钟再发送一个Follow_Up报文,告诉从时钟「我刚才的Sync是在这个时间点发的」。
  4. 从时钟根据发送和接收的时间差,计算出链路延迟,并调整自己的本地时钟。

这个过程会不断重复,以补偿时钟漂移。

我的经验:802.1AS的精度受网络拓扑影响很大。如果中间经过的交换机太多,或者链路不对称(比如光纤和铜线混用),同步精度会下降。我建议在域控制器内部,尽量用直连拓扑,减少中间跳数。

小结

好了,四个核心标准我们过了一遍。我帮你总结一下:

标准 作用 类比
802.1Qbv 时间片调度,保证确定性延迟 红绿灯,规定谁在什么时间走
802.1Qbu 帧抢占,紧急数据插队 应急车道,让救护车先过
802.1CB 数据包冗余,防丢包 备用路线,一条路堵了走另一条
802.1AS 时钟同步,统一时间基准 对表,大家用同一个时间

这四个标准不是孤立的。在实际的域控制器设计中,它们需要协同工作。下一章,我会讲它们如何在一个具体的架构里落地。到时候,我会拿一个真实的项目案例来拆解。

今天就到这里。有什么问题,欢迎交流。