一、简介
AUTOSAR Dlt (Diagnostic Log and Trace) 模块主要用来接收来自DET、DEM、SW-Cs的日志信息(log information)或者来自RTE的跟踪信息(trace information)。Dlt模块通过通信总线传输这些数据,使这些日志和trace信息在ECU外部可见。
为此,Dlt模块会定义了用于在如何在通信总线上发送和接收这些专用的日志/跟踪信息的API。
此外也可以通过NvM模块来永久保存Dlt模块的更新过滤器设置。这使得ECU能够以期望的级别传输日志/跟踪信息,而不需要在每次ECU启动时从通信总线(通过日志工具)发出明确的设置请求。
Dlt模块位于PduR模块和RTE模块之间。
请注意:
Dlt消息格式、可用的Dlt命令和Dlt协议(用于与外部日志和跟踪工具通信)会定义在另一个单独的文档中[1]。更多信息请参考Dlt协议规范。
术语和定义
二、使用场景
下面内容会对ECU如何使用Dlt的场景进行分类的描述
虽然Dlt协议与总线无关,但建议使用通信具有更高带宽的总线,如以太网。尽管如此,Dlt的协议并不局限于以太网的使用。
使用Dlt进行常规日志记录(General logging with Dlt)
- 应用程序 / SW-C生成一条日志消息。
- Log Message发送给Dlt模块。
- Dlt模块将日志消息发送到通信总线
- 外部Dlt客户端记录日志消息
VFB的跟踪(Tracing of VFB)
- RTE调用Dlt提供的宏,Dlt调用Dlt API接口生成跟踪的消息。
- Dlt模块将生成的跟踪消息发送到实现了Dlt通信模块接口。
- Dlt通信模块将跟踪消息转发到网络。
- 外部客户端接收并存储跟踪消息。
**运行时配置Dlt(Runtime configuration of Dlt)**
- 外部Dlt客户端设置日志和跟踪级别,并将更改发送给Dlt模块。
- Dlt模块相应地调整其过滤器设置的配置。
- Dlt模块通知应用程序新的日志级别。
非冗长模式(Non-verbose mode)
可以通过不发送通信总线上的变量的元数据减少总线上的流量。此时可以使用外部FIBEX文件保存如何解析有效负载(payload)内容的信息。外部Dlt客户端将这些FIBEX文件中定义的元数据与接收到的数据合并并保存。
- 调用Dlt模块以非冗长模式进行传输Dlt消息。
- Dlt模块过滤并生成Dlt消息。
- Dlt模块将Dlt消息发送到通信总线。
- 外部Dlt客户端从外部FIBEX文件中获取元信息。
- 合并后的信息由外部Dlt客户端存储。
三、协议规范(Protocol specification)
消息格式
对于调试数据和控制信息,只需使用相同的Dlt消息格式。它由一个标准报头、一个可选的扩展报头和一个有效复杂段组成。
标准报头(Standard Header)
Dlt标准报头应由以下字段组成,顺序如下:
扩展报头(Extended Header)
如果标准报头的UEH位设置为' 1 ',则传输在Dlt扩展报头格式中定义的附加信息。Dlt扩展报头直接附加在Dlt标准报头字段之后。
Dlt扩展报头格式应由以下字段按以下顺序组成:
正文格式(Body/Payload format)
Dlt正文数据紧跟着Dlt头或者Dlt扩展头(如果使用的话)。Dlt正文数据包含被Log或Trace的参数,或者包含控制信息。
四、依赖的模块
RTE
RTE(包括VFB和BSW调度器),主要用于与SW-Cs交互,生成日志和跟踪消息,并循环调用Dlt模块的Tx函数。
PDU Router
为了在通信总线上传输Dlt消息,Dlt模块会与PDU Router进行交互。
NvM
为了加载和存储相关的配置,如过滤器设置和日志通道分配。NvM模块并不是必须,可以选用。
GPT
为了获得一个时间戳,GPT模块可以用于此目的。
StbM
为了以标准/扩展格式获取同步时间值。本地时间基数(Local Time Base)派生于全局时间基数(Global Time Base),StbM模块可用于此目的。
DET
为了能够报告默认错误并将DET错误转发给通信总线,Dlt模块必须与DET模块进行交互。然而,与DET的交互并不是必须,可以选用。
DEM
为了能够报告开发错误并在通信总线上传输DEM事件,Dlt模块必须与DEM模块进行交互。然而,与DEM的交互并不是必须,可以选用。
五、文件结构
六、功能定义
下面的内容会描述Dlt模块在与SW-Cs、PduR和外部日志设备(External client)交互时,需要的AUTOSAR特定数据和控制路径。
Dlt命令 (Dlt commands)
Dlt协议指定由唯一的Service id标识的各种Dlt命令。Dlt命令用于在运行时修改Dlt模块的行为,例如,获取关于当前Dlt配置的信息或更改过滤器设置。(PRS\_Dlt\_00635)
Dlt与软件组件的交互
Dlt模块为SW-C提供了可用于发送日志和跟踪消息的接口。
可选地,SW-C可以为日志级别阈值(log level threshold)和跟踪状态变更通知提供一个Port口。这些端口由Dlt模块提供,分别为了不同ApplicationId / ContextId的每个元组而定义。这些通知可以用来避免影响SW-C已经生成的日志和跟踪消息,而不是让它们稍后被Dlt模块过滤掉。
由于Dlt模块支持SW-C的多个实例,它们使用相同的ApplicationId/ContextId元组,一个额外的SessionId参数允许区分来自相同SW-C的不同实例的日志/跟踪消息。
分离那些互相SW-Cs技术,避免SW-Cs必须使用独特的SessionId调用SendLogMessage / SendTraceMessage(细节,见下一章节),Dlt模块提供了一个专用P-Port每SW-C配置(参见配置参数DltSwc) SessionId作为port-defined-argument管理。
如果已配置的SW-C被标记为对日志级别的通知和跟踪状态更改感兴趣,Dlt模块还提供相应的R-Port来通知相应的SW-C。
由SW-C负责ApplicationId/ContextId元组的信息,在运行时分别通过调用RegisterContext和UnregisterContext为SW-C配置和/或更新。
Dlt模块会为每个配置的SW-C提供一个接口DltService类型的P-Port。P-Port接口包含SessionId作为端口定义的参数。Dlt模块也会为每个配置的SW-C提供一个R-Port类型的接口LogTraceSessionControl(见第8章),其中配置参数DltSwcSupportLogLevelChangeNotification会被设置为TRUE。SW-C需要负责的ApplicationId / ContextId元组,因此在日志级别或跟踪状态更改时需要通知该元组,可以从配置参数DltSwcContext取得。
—END—
作者: 米多papa
来源: https://mp.weixin.qq.com/s/p6Z0cqSvZGOHAQqhF6AdGw
微信公众号:
推荐阅读:
更多汽车电子干货请关注汽车电子与软件专栏。