8.AUTOSAR 诊断栈分析(一)

目录

1.错误分级分类

2.错误上报方法

[2.1 API上报](#2.1 API上报)

[2.2 预定义的Callout上报](#2.2 预定义的Callout上报)

[2.3 DET(Default Error Tracer)相关Hook或者Callout上报](#2.3 DET(Default Error Tracer)相关Hook或者Callout上报)

[2.4 DEM相关错误处理](#2.4 DEM相关错误处理)

[2.5 DLT相关错误处理](#2.5 DLT相关错误处理)

3.小结


终于来到了整个ECU的核心:诊断Dianostic。

为了更加系统地了解诊断,我将从错误分级分类、错误上报方法、诊断模块几个方面进行分析。

1.错误分级分类

根据AUTOSAR相关简介,在ECU系统级别的错误等级如下四类:

  • 开发错误(Development Errors)

这种错误类型很常见,在开发期间用来定位软件bug;

例如某些模块没初始就开始使用、错误的数据长度等;

随着ECU的量产上车该类错误的检测机制需要关闭。

  • 运行时错误(Runtime Errors)

该类错误属于比较严重的系统级软件错误,但是也是需要根据实际情况记录。

例如在运行过程中,收到的CAN报文突然丢掉了(Buffer里没数据了)。

  • 瞬态故障错误(Transient Faults)

瞬态故障错误一般发生在硬件,这个我暂时还没有看到过。

  • 产品错误(Production Errors)

这个很好理解了,就是定义的某些DTC,用于量产车日常的维修诊断使用。

那么上述错误从类型来看,又分为:

  • 硬件失效/错误

例如Flash模拟EEPROM失效,不能写入等

  • 软件错误

例如调用NvM_Write时输入了错误的地址信息等

  • 系统错误

这个就不太好分辨,例如某报文接收超时,无法判断是软件还是硬件错误;故定义成系统错误,需要进一步处理。

2.错误上报方法

AUTOSAR定义了如下几种方法进行错误上报。

2.1 API上报

该方法是通过读取调用某个API后的返回值获得该API操作是否成功。这么说起来比较绕,还是具体示例:

cpp 复制代码
Std_ReturnType Dem_ClearDTC (uint8 ClientId)

如上,Std_ReturnType有两种返回值E_OK和E_NOT_OK,用于表示当前清除DTC的操作是否成功,用户根据返回接口去做对应的代码逻辑。

注意,这里要与我们调用DEM相关API设置DTC状态不一样的,下面会讲到。

2.2 预定义的Callout上报

当某个操作出现错误时设计一个callout,例如CAN报文接收timeout,此时通过callout上报。

2.3 DET(Default Error Tracer)相关Hook或者Callout上报

DET主要是上报开发错误和运行时错误。

这意味着,在开发阶段DET用于上报开发错误,量产阶段DET根据情况上报系统错误。所以以前我们常说上车后DET是需要关闭的这种说法不是非常准确。

该方式常见的机制有:

  • 将错误信息写入ring buffer
  • 将错误信息通过串口输出到外部logger
  • 死循环等

提供的接口有:

cpp 复制代码
Det_ReportError(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId)

ModuleID:一般指AUTOSAR定义的基础软件模块ID

IntanceID:该模块的示例ID,例如CAN0\1\2

ApiID:对应模块的API ID

ErrorID:对应错误ID

2.4 DEM相关错误处理

DEM错误上报,就是大家平时接触的最多的错误处理地方时,用于上报主机厂定义的错误,通常是通过将错误事件写进memory、禁用某些ECU功能(FIM:Function Inhibition Manager)或者通知某些SW-C。

该模块提供的接口如下:

cpp 复制代码
Dem_SetEventStatus(EventId, EventStatus)

这块的事件管理会在后面详细说明。

2.5 DLT相关错误处理

DLT(Diagnostic Log and Trace)用于收集错误信息并转为标准格式,然后将数据传给PduR,经由PduR通过不同总线传输到PC或者记录仪。

该模块有如下功能:

  • 提供标准接口用于记录SW-Cs、Det、Dem等模块提供的错误信息
  • 结合RTE使用Trace
  • 可以单独对log、trace信息进行使能
  • Dlt在开发和量产阶段均可以使用

需要重点关注的是,量产阶段DLT的log和trace信息必须要信息安全机制保证。

常用API为:

cpp 复制代码
Dlt_SendLogMessage(Dlt_SessionIDType session_id, 
Dlt_MessageLogInfoType log_info, 
uint8 *log_data, 
uint16 log_data_length)

DLT常见的使用方法如下:

  1. SW-C生成一个log信息,并调用DLT标准接口将信息发送给DLT
  2. DLT模块通过DLT协议将数据转为标准格式;
  3. 通过PduR将数据传给目标总线
  4. 编码后的数据传给目标PC。

3.小结

通过上面简介,我们主要了解了在ECU层级下的错误分级分类、错误上报机制。

对故障处理,大家可能首先就想到了DEM和DET;

对于API这类虽说也在用,但是还没有上升到故障这种想法;

DLT就更不用说了,以前大家有打印log的习惯,但是没有一个统一的标准。

下面我们将详细聊DEM、DCM,有机会在聊聊DLT吧。

相关推荐
Amd7944 天前
Nuxt3 的生命周期和钩子函数(七)
生命周期·nuxt3·错误处理·钩子函数·模块导入·预渲染·构建优化
up up day6 天前
OBD诊断(ISO15031) 02服务
诊断·obd
汽车电子嵌入式19 天前
【OS基础】符合AUTOSAR标准的RTAOS-Alarms详解
autosar·os·alarm
车载诊断技术1 个月前
车载电子电器架构 —— 智能座舱标准化意义
网络·架构·网络拓扑·autosar·电子电器架构
地理遥感生态网1 个月前
DEM、DSM和DTM之间的区别及5米高程数据获取
dem·地理信息数据·地理遥感生态网平台
疯狂的机器人1 个月前
【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)
python·自动化·can·诊断·uds·bootloader·刷写
GIS思维1 个月前
ArcGIS提取含有计曲线的等高线
arcgis·dem·等高线·arcgis计曲线
疯狂的机器人1 个月前
【Python搞定车载自动化测试】——Python基于Pytest框架实现UDS诊断自动化(含Python源码)
python·自动化·pytest·can·诊断·allure·uds
逸埃2 个月前
[AutoSar]BSW_Diagnostic_002 DCM模块介绍
autosar·uds·dcm
Amd7942 个月前
深入理解Python多进程:从基础到实战
性能优化·并发编程·错误处理·异步编程·资源调度·python并发库·多进程管理