其他分享
首页 > 其他分享> > AUTOSAR LIN STACK Configuration

AUTOSAR LIN STACK Configuration

作者:互联网

General

本文主要介绍如何配置LIN Stack , 对于LIN Stack的功能介绍还请参见AUTOSAR LIN Introduction

本文配置内容以VECTOR 工具为基础,不过对于其他工具也是一样的配置方法。

很多朋友可能有疑问认为很多工具都支持自动导入LIN LDF 文件,所有配置都可以自动生成,为什么还需要了解细节和手动配置这部分内容。

我是这么理解这个问题的:

  1. 理解这些属性的原理和配置底层逻辑,可以使你摆脱工具的限制,避免出现换了工具就不会了这种情况
  2. 目前AUTOSAR 整个功能对应复杂功能安全的设计并不是很完备,有时一个复杂的项目需要我们结合自身的情况做配置更改,如果过于依赖自动配置将是我们设计复杂架构方案受到局限
  3. 自动导入配置生成,过于依赖输入文件的准确性,如果输入文件存在不正确,可能需要大量时间弥补
  4. 从产品安全的角度来说,我个人认为自动导入的配置因为没有工程人员的“复核” 是不安全的,就好像是别人写的代码未经过我们review 是不可信的原因一致。当然如果我们要“复核‘也是需要知道这里面的细节的,也是需要了解底层逻辑的。
  5. 从业务角度来说,我更希望结合业务功能做自动配置生成的工具的开发,不单关心底层AUTOSAR配置生成,而是上层APP 逻辑也配套生成,这样能更加高效

Data Flow

应用报文: LIN – LINIF – PDUR – COM - APP

诊断报文: LIN – LINIF – LINTP – PDUR - CDD(DCM)

EcuC

每个非诊断LIN FRAME 都需要一个ECUC(ECUC_NORMAL) 用于映射LINIF与COM

如果有LIN 诊断报文,则需要LIN SLAVE 数量*2 个ECUC ( ECUC_TP_MASTER_XXX and ECUC_TP_SLAVE_XXX) 用于映射LINTP 与CDD(或DCM)

ComM

创建一个新的COMM映射LIN CHANNEL

ComMUser

ComMChannel

LinIf

LinIfGeneral

LinIfGlobalConfig

TimeBase: Global的时间基数,对于Frame 之间的delay 需要更能够整除Timebase

LinChannel

位置是LinIfGlobalConfig/LinChannel

Channel Ref: 引用LinDriver

ComM Network Handle Ref: 引用ComM

Goto Sleep Confirmation UI: Sleep Confirmation状态通知给哪个Upper Layer

Schedule Request Confirmation UI: Schedule Request Confirmation状态通知给哪个Upper Layer

Startup State:如果不支持LIN WAKEUP 功能选择NORMAL,反之选择SLEEP

Wakeup Confirmation UI: Sleep Confirmation状态通知给哪个Upper Layer

LinSlaves

定义所有的Slave 信息

对于这部分内容来自Lin ldf file

LinMaster

对于这部分内容来自Lin ldf file

Cluster Time Base:将决定LinIf_Mainfunction的周期

LinFrames

定义所有的LIN Frame这部分也来自Lin Ldf file

Checksum Type: 分为Classic / Enhanced

Frame Type:

UNCONDITIONAL: 无条件帧

EVENT TRIGGERD: 触发帧

SPORADIC :偶发帧

MRF: Master Diagnosis Request Frame

SRF:  Slave Diagnosis Response Frame

PID: Protected ID, 与Frame ID映射关系如下

LinPduDirection

对于Normal RX LIN FRAME ,需要选择LinIfRxPdu

Rx Indication选择PDUR

Rx Pdu Ref: 需要和COM /PDU 共同引用这个ECUC

对于Normal TX LIN FRAME ,需要选择LinIfTxPdu

User Tx UI:选择PDUR

Tx Pdu Ref: 需要和COM /PDU 共同引用这个ECUC

对于诊断报文,选择LinIfInternalPdu 即可

LinScheduleTables

创建完成Lin Frame,需要结合LIN LDF file中对于LIN Schedule Table的定义进行配置

Schedule Table Index: 从1开始,线性变化(0 作为NULL Schedule Table)

Resume Position:

Schedule Table(RunMode = Continuous)回复执行时可以选择从头重新执行或者从被打断的地方继续执行, 对于无条件帧(RunMode = Once)和MRF / SRF 都会打断Schedule Table(RunMode = Continuous)运行

Run Mode:

如果RunMode = Continuous, 那么所关联的Schedule Table 一旦被请求将会被周期的执行

如果当前Schedule Table(RunMode = Continuous,如果其他Schedule Table (RunMode = Continuous)被请求, 则需要等待当前Schedule Table 本轮调度完成(包含的所有Entry都运行完成 )才可以执行下一个Schedule Table的请求

如果RunMode = Once, 那么所关联的Schedule Table 只会执行一次

如果当前Schedule Table(RunMode = Continuous)正在运行时,如果其他Schedule Table (RunMode = ONCE)被请求, 则立刻会打断当前正在运行的Schedule Table,执行这个Schedule Table(RunMode = ONCE)的请求, 当新的Schedule Table(RunMode = ONCE)执行完成之后,如果没有新的Schedule Table(RunMode = ONCE)被请求,则会继续执行上个被打断的Schedule Table(RunMode = Continuous),执行的策略需要参考resume Position属性

如果RunMode = Once, 所关联的Schedule Table正在运行时,如果其他Schedule Table (RunMode = Once)被请求, 则需要等待当前Schedule Table调度完成(才可以执行下一个Schedule Table的请求

Schedule Mode :

LINTP_APPLICATIVE_SHEDULE: 对于非诊断Schedule Table 可以选择这个

LINTP_DIAGREQUEST: Master 诊断报文选择

LINTP_DIAGRESPONSE: SALVE 诊断回复选择

LinIfEntry

每一个schedule Table包含若干个Lin Frame, 如下内容定义在LDF file中

按照以上内容,完成LinIfEntry的配置

Delay: 紧临的LinIfEntry 之间的发送delay

Frame Ref: 所关联的LIN Frame

Collision Resolving Ref: 对于事件帧如果产生冲突所引用的Schedule Table

Entry Index: 从0开始,线性变化

LinSM

LinSMGeneral

Main Processing Period: LINSM_Mainfunction的调度周期

LinSMChannel

位置是LinSMConfigSet/LinSMChannel

Transceiver Passive Mode : Selects STANDBY (true) or SLEEP (false) transceiver mode when entering LINSM_NO_COM.

LinSMSchedules

这里定义所有供APP 请求的Schedule

Schedule Index: 从1开始,线性变化(0 作为NULL Schedule Table)

Schedule Index Ref: 引用LINIF 中定义的schedule Table

LinTp

LinTpGlobalConfig

Max Number of Resp Pending Frame: 最大返回PENDING 次数

P2 Max: Pending Frame 返回的时间间隔

LinTpRxNSdus

针对我们的例子我们有4个SLAVE, Master 要分别和这4个Slave进行诊断通信

DL: 最小Data Length

Rx NSdu Channel Ref:  引用LinIfChannel

Rx NSdu Pdu Ref: 引用ECUC_TP_SLAVE_XXX,用于连接Lintp和 与Cdd

Rx NSdu Id:从0开始,线性变化

Rx NSdu Nad: Slave Nad

LinTpTxNSdus

Tx NSdu Nad: 与master 通信的Slave NAD

Tx NSdu Id:从0开始,线性变化

Rx NSdu Pdu Ref: 引用ECUC_TP_MASTER_XXX,用于连接Lintp和 与Cdd

PduR

正如在前面Data Flow中介绍的一样LINTP/LINIF 和CDD/COM 交互需要通过PduR,且LINTP/LINIF 属于Lower Layer, CDD 属于Upper Layer

PduRBswModules

PduRRoutingTable

Note:详细介绍见AUTOSAR PDUR Introduction 一文

Com

当LIN Frame通过PduR 传递给COM Layer 我们需要将LIN frame中的内容映射到COM

LIN FRAME -> COM.PDU

LIN SIGNAL -> COM.SIGNAL

在这里不做COM Layer更多的配置介绍

标签:AUTOSAR,Schedule,LIN,RunMode,Table,Configuration,COM,Frame
来源: https://blog.csdn.net/tiankefeng19850520/article/details/122784220