写在开篇
今晚有点晚,来不及学多少了,但还得来凑点字数。
DoIP+UDS的35篇笔记,终于边学边写,搞完了。
从第21篇到第35篇,说实话,学得并不轻松。
有些地方到现在还是迷迷糊糊的------比如27服务那几级权限,我写的时候觉得自己懂了,过两天再看又有点懵。还有刷固件那十六步,顺序到现在都没完全背下来。
但不管怎么说,一路火花带闪电,好歹是走完了。
然后我就开始琢磨------
DoIP是给车看病的,那车正常跑的时候呢?车里那么多ECU、域控制器,它们之间是怎么聊天的?
摄像头怎么告诉域控制器"我看到人了"?座舱怎么告诉音响"放首歌"?BMS怎么告诉整车"我电量不多了"?
这些,DoIP不管。
那谁管?
江湖上有个大名鼎鼎的协议,叫SOME/IP。
我没学过,但听说过。
就像小时候听大人们聊"降龙十八掌",知道很厉害,但具体怎么打,不知道。
这不,刚学完DoIP,心里痒痒的,就想碰碰这个SOME/IP。
有点像练武的人刚学会了一套拳,就想去挑战隔壁门派的大弟子。越级碰瓷,自不量力,但忍不住。
一、先搞清楚SOME/IP是干啥的
我翻了翻资料,大概弄明白了一件事:
DoIP是"诊"------车坏了才用。
SOME/IP是"聊"------车正常开着的时候,各个模块之间互相通信。
举个不太恰当的例子:
-
DoIP = 你去医院看病。医生问你"哪儿不舒服",你说"头疼",医生给你开药。一问一答,有来有回。
-
SOME/IP = 你身体里各个器官自己聊天。心脏跟肺说"我要血",肺说"我给你氧气"。不用你去指挥,它们自己协调。
黄蓉(如果我笔下真有黄蓉的话)肯定会说:"哦~~DoIP是看病,SOME/IP是养生!"
差不多就是这个意思。
二、传统方式 vs SOME/IP
车载通信的老祖宗是CAN总线。
CAN总线的特点是:广播。
不管哪个节点发消息,全车都能收到。不管你需不需要,都得听。
就像你在小区楼下喊了一嗓子"今天吃饺子",全楼的人都听见了。想听的听见了,不想听的也听见了。浪费带宽,还吵。
SOME/IP不一样。 它是面向服务的------谁需要谁调用,不需要的不打扰。
比如座舱域控制器想放个音乐,它只需要跟音响说一声就行。BMS、VCU、ADAS这些模块,根本不需要知道有人在放歌。
这就叫服务调用。
更厉害的是,SOME/IP还支持服务发现。
音响启动后,会在网络上喊一嗓子:"我支持放音乐服务!"座舱域控制器听到了,记在小本本上:"哦,音响会放音乐,以后找它。"
不用提前配IP、配端口,动态发现,即插即用。
这点比DoIP灵活多了------DoIP都要提前约好逻辑地址,SOME/IP是自动找。
三、SOME/IP的四种"说话方式"
我翻了翻资料,SOME/IP主要有四种通信模式:
| 模式 | 怎么玩 | 举个栗子 |
|---|---|---|
| Request-Response | 你问一句,它答一句 | 座舱问"当前车速多少",VCU答"80km/h" |
| Fire&Forget | 你喊一声,不管它回不回 | 座舱喊"开窗",BCM收到就开,不回话 |
| Event | 出事了自己往外喊 | BMS检测到电压异常,主动报"我要炸了" |
| Field | 订阅某个状态,变了就通知 | 座舱订阅"车门状态",门一开就收到通知 |
这不就跟UDS有点像?UDS是请求/响应,SOME/IP是请求/响应+事件+订阅。
但UDS是给人看病,SOME/IP是给机器聊天。目标不一样,手段也不一样。
四、SOME/IP和DoIP到底啥关系
我试着总结了一下:
| 对比维度 | DoIP | SOME/IP |
|---|---|---|
| 全称 | Diagnostic over IP | Scalable Service-Oriented MiddlewarE over IP |
| 我的理解 | 给车看病 | 车里模块自己聊天 |
| 啥时候用 | 车坏了、刷固件 | 车正常跑的时候 |
| 谁说话 | 诊断仪 ↔ ECU | ECU之间、域控制器之间 |
| 通信模式 | 请求/响应 | 请求/响应 + 事件 + 订阅/发布 |
| 端口 | 13400 | 30490(常见配置) |
| 底层 | 都是UDP/TCP,都是车载以太网 | 都是UDP/TCP,都是车载以太网 |
所以它们不是谁替代谁,而是分工不同:
-
DoIP负责"保健":车出问题了,去修。刷固件、读故障码、清DTC。
-
SOME/IP负责"干活":车正常开,所有模块互相配合。摄像头传数据、座舱调音量、BMS汇报电量。
一个管"生病",一个管"生活"。
五、我为什么想碰SOME/IP
学完DoIP,总感觉车载以太网这块还有一大片空白。
DoIP只是冰山一角,而且是"应急用"的那一角。
真正的车载以太网,每天都在跑着大量的SOME/IP消息------座舱和音响聊天,ADAS和摄像头聊天,BMS和VCU聊天......
这些消息长什么样?怎么抓包?怎么解析?
我不知道。
但我想知道。
就像练武的人,学会了一套拳法,总想知道下一套是什么。
虽然现在的我刚摸到门,离精通还差十万八千里。虽然学DoIP的时候,很多地方还在迷迷糊糊。
但不去碰,永远不知道。
六、写在最后
这篇番外,不算技术笔记。
更像是一个初学者的一点碎碎念------
DoIP刚学完,还没捂热,就想去碰SOME/IP。
明知越级,但还是忍不住。
不指望一篇番外就能搞懂SOME/IP,只是想给自己挖个坑,先记下来"有这么一个东西",以后慢慢填。
毕竟,降龙十八掌也不是一天练成的。
DoIP写完了,SOME/IP......再说吧。
打完收工,886。