AUTOSAR入门-基于以太网诊断
原创 thatway 那路谈OS与SoC嵌入式软件 2022-03-17 18:06
AUTOSAR入门-基于以太网诊断
人生病比如
发烧
了要看病,医生通过各种手段比如把脉
、拍片等了解病情,然后对症下药。汽车也一样,当一个零部件ECU出现故障的时候一般会在
仪表盘
上显示出来,重大故障可能车都开不了,一些小的故障参数也会记录存储到汽车的内存里面,然后利用诊断仪器
连接汽车读取出来,就知道汽车啥毛病了。
下面一步一步深入,快速了解诊断
功能
和AS中对应的代码
,给你提供
无上心法
,直通
最高境界
。
- 诊断框架
直观-》模型框架-》代码
上图是不是很熟悉,你到4S店做保养,肯定有这个流程。
直观
上看师傅手里拿的就是诊断仪器
,通过物理线
连接到汽车上就可以知道车是否有毛病。
上面介绍了4S店过程,现在先上升到
模型角度
,再描述下这个过程。上图中:
黄色箭头
:当汽车出现故障的时候,DEM会
收到故障
信息,然后
存储
在NVRAM内存中
绿色箭头
:记录故障后,如果故障影响其他功能,则FIM会禁用其他功能
蓝色箭头
:诊断仪器连接汽车,经过
硬件、协议栈层层软件到达DCM
,然后去DEM
读取故障信息
。
DCM:
Diagnostic Communication Manager
,诊断通信管理。实现诊断通信协议,我们通常说的
UDS协议
(即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准,比如读取故障码应该向ecu发什么指令,读数据流又是发什么指令),就是在这里配置的DEM:
Diagnostic Event Manager
,诊断事件管理。就是用来记录和存储诊断事件的DTC
(诊断故障码),下面连接NVRAM Manager,就是将这些诊断事件记录到EEP或者Flash中FIM:
Function Inhibition Manager
,功能禁止管理。也就是当一些error出现的时候,禁止一些功能。比如当检测到控制器过电流的时候,关闭MOS或IGBT,防止炸管。就是说有一部分SWC是需要使能条件的,这些条件取决于故障内容(就是来源于下面的DEM中),而FIM负责根据故障内容关闭一些SWC或执行一些SWC。
2. 基于以太网诊断架构
为什么诊断这么重要?
**做AUTOSAR或者汽车相关的工作,总是跟诊断有很大的关系,我感觉诊断是汽车跟外界打通的 第一条路,用来检查车辆故障用。但是其他的功能一看已经有了一条路,比如OTA升级,就没必要自己开辟一条路了,直接复用这条路就可以跟汽车通信,广义的诊断其实就是汽车跟外界的通信通道**。
为什么需要网络诊断?
传统的诊断是基于CAN总线的,就是上面说的去4S店,师傅用诊断仪器通过**CAN连接线**
连接到汽车上导出数据。很明显需要线,这有点过时了,如果像家里的无线路由器一样,通过wifi
就可以诊断,或者汽车5G联网
后,在任何地方都可以诊断,4S店都不用去了。这些通过以太网都可以实现。
为什么需要DoIP?
**UDS**
只负责诊断业务,要实现网络上传输的秘密在DoIP
(Diagnostic communication over Internet Protocol)。DoIP把跟网络相关的任务
都揽过去了,比如DHCP分配IP的过程,网络会话管理、网络路由等。DoIP模块解析完DoIP报文后,剥离出来UDS报文再给Dcm处理。
DoIP协议格式是什么?
计算机网络中四层网络协议栈如下:
对应网络协议栈如下图:
DoIP Data
是应用层协议报文。
DoIP协议报文如下(参考ISO13400
规范,可以关注公众号,回复ISO获取):
可以看到
应用层是可以嵌套的,这里就是DoIP协议之上还有UDS协议
。
Protocol Version
:版本号
Inverse version
:Protocol version的取反的值
Data Type
: 业务类型--重点
DataLength
:数据长度
Source Address
:源地址
Target Address
:目的地址
UDS
:UDS报文(参考ISO14229
规范,可以关注公众号,回复ISO获取)
3. 诊断实操
最新的代码我添加了一个发送诊断报文的socket工具
,可以git pull更新
git clone https://github.com/thatway1989/as.git
cd as
git pull
./autorun.sh
cd as/socket_tool
make
./send_client.sh
上图中可以看到,发出去了两条DoIP报文
,十六进制显示的,解析见下面wireshar抓包
中比较清晰。下面先来看下DoIP的过程:
激活线激活
:AS代码用的虚拟机,不需要
DHCP过程
:AS中直接配置死的IP 172.18.0.200
,这里不需要,见代码
com/as.application/common/config/SoAd_Cfg.c中
{ /* for DCM */
.SocketId = 0,
.SocketLocalIpAddress = "172.18.0.200",
.SocketLocalPort = 13400,
.SocketProtocol = SOAD_SOCKET_PROT_TCP,
.AutosarConnectorType = SOAD_AUTOSAR_CONNECTOR_DOIP,
},
车辆识别
:AS虚拟机中可以先省略不做这个过程,后续再研究。
路由激活
:基于TCP协议,我们发送的DoIP协议报文如下:
02 fd
00 05
00 00 00 07
be ef
da 00 00 00 00
利用wireshark工具在ubuntu上对tap0端口(qemu虚拟出来的)抓包对应报文如下:
可以看到这条DoIP报文基于TCP,目的端口是13400,从172.18.0.1发给172.18.0.200,功能是
0x0005
路由激活
,
源地址
是0xbeef 激活类型是0xda
诊断请求
:基于TCP协议,我们发送的DoIP协议报文如下:
02 fd
80 01
00 00 00 06
be ef
fe ed
11
01
可以看到这条报文是DoIP报文的基础上又封装了
UDS报文
。
DoIP报文的功能类型是
0x8001
诊断请求
,
源地址
是0xbeef,目的地址是0xfeed,这些地址都是在AS代码里面规定好的,见代码com/as.application/common/config/SoAd_Cfg.c里面。
另外UDS报文里面服务id是
0x11
ECU复位
,类型是0x01硬复位。
4. 代码实操
这里先说下**AUTOSAR规范**
,因为这个规范非常详细,甚至繁琐。把某个模块里面有哪些函数,哪些变量名字参数
都定义好了,跟代码息息相关。这里以DoIP为例,我们找DoIP的规范:https://www.autosar.org/nc/document-search/?tx_sysgsearch_pi1%5Bquery%5D=&tx_sysgsearch_pi1%5Bcategory%5D%5B64%5D=64
打开后,如下图,点击
“Specification of Diagnostic over IP
”
下载AUTOSAR_SWS_DiagnosticOverIP.pdf
打开发现全英文
,不过这是一手的参考资料,我也是把这个pdf看了几遍的,能看英文就看吧。查看DoIP sws规范的第一章可以看到这么一个图:
图里面的箭头就是我们发包工具的包在AUTOSAR框架里面走的路:
网卡驱动-》网络接口-》网络协议栈-》SoAd模块-》DoIP模块-》PduR模块-》Dcm模块
。这个pdf其他部分,讲到具体模块了再详细展开说明。这里我们先串一下代码,查看qemu运行起来telnet中的打印:
这个是Pci网卡驱动打印的,代码在:com/as.infrastructure/communication/Pci/pci_asnet.c
网络协议栈Arccore代码里面用的LWIP,在as/release/download/lwip/src/netif/etharp.c
中的ethernet_input-》ip_input-》tcp_input-》tcp_receive里面自己加打印
SoAd模块的打印,代码在com/as.infrastructure/communication/SoAd/SoAd.c
DoIP模块的打印,代码在com/as.infrastructure/communication/DoIP/DoIP.c
Dcm模块的打印,代码在
com/as.infrastructure/diagnostic/Dcm/*.c
中
另外发包工具as/socket_tool文件夹下
client.c
和
send_client.sh
,了解socket编程
就可以看懂,比较简单,这里不说明了。
后记:
无上秘籍
这篇文章里面就有,就看你
资质
如何能吸收多少了。笔者也是看AUTOSAR官网文档、Arccore源码、AS源码、csdn
等研究了小半年一点一点摸索出来的,这个文章都串起来了,
冰山一角
已经为你打开,
星辰大海
等你来
探索
。
后续为围绕数据报文走的路:**网卡驱动-》网络接口-》LWIP网络协议栈-》SoAd模块-》DoIP模块-》PduR模块-》Dcm模块**
,一个一个模块的代码结合AUTOSAR规范和ISO规范进行介绍。
Talk is cheap,show methe code!
后续会继续更新,纯
干货
分享,无广告,不打赏,欢迎
转载
,欢迎
评论交流
!
往期回顾:
AUTOSAR入门-AS开源代码运行环境搭建