【AUTOSAR】【Lin通信】LinIf
目录
一、概述
1.1 架构
1.2 功能
二、限制说明
三、功能说明
3.1 帧传输
3.1.1 帧类型
3.1.2 帧接收
3.1.3 帧发送
3.2 调度
3.3 主函数
3.4 网络管理
3.4.1 节点管理
3.4.2 进入睡眠过程
3.4.3 唤醒过程
3.5 错误分类
3.5.1 开发错误
3.5.2 运行时错误
四、API接口
4.1 API定义
4.2 通知函数
4.3 调度函数
一、概述
该文档规定了AUTOSAR基本软件模块LIN接口(LinIf)和LIN传输协议(LIN TP、LinTp)的功能、API和配置。LIN TP是LIN接口的一部分。LIN接口被设计为是硬件独立的。与上部(PDU路由器)和下部(LIN驱动器)模块的接口定义良好。LIN接口可以处理多个LIN驱动程序。一个LIN驱动程序可以支持多个通道。这意味着LIN驱动程序可以处理一个或多个LIN通道。
1.1 架构
1.2 功能
LIN接口负责提供ISO 17987的LIN功能。
- 作为主节点(发送报头和发送/接收响应)所连接的每个LIN总线的当前选择的计划执行。
- 在上层请求时,切换主节点的调度表。
- 接受帧传输来自上层的请求,并在适当的LIN帧内作为响应传输数据。
- 当在适当的帧内接收到相应的响应时,为上层提供帧接收通知。
- Go-to-sleep 和 wake-up 服务。
- 错误处理。
- 诊断传输层服务。
- 从属节点的节点配置和标识服务。
二、限制说明
LIN接口模块可以用作LIN集群中的LIN主节点或LIN从节点。在每个ECU中只有一个LIN接口的实例。如果底层的LIN驱动程序支持多个通道,则LIN接口将作用于多个集群。
三、功能说明
LIN接口应支持ISO 17987规范中的主接口和从接口的行为。
【规范】LIN接口应支持ISO 17987规范中的主接口和从接口的行为。
【规范】LIN接口应实现LIN行为,使现有的LIN节点能够被重用。
【规范】LIN接口应能够处理一个或多个LIN通道。
3.1 帧传输
使用了ISO 17987规范中的协议规范的所有功能。规范的某些部分需要一些澄清和额外的要求来设置LIN接口。
3.1.1 帧类型
- 无条件帧:这是在LIN集群中使用的普通帧类型。总线上传输严格按照进度表进行。
- 事件触发帧:事件触发的帧用于启用来自从属服务器的零星传输。这种类型的帧的正常使用是非时间关键函数。
- 零星帧:仅适用于LIN主节点。从LIN从属的角度来看,接收到的零星帧与接收到的无条件帧没有区别。
- 诊断帧MRF和SRF:主请求帧(MRF)和从属响应帧(SRF)是具有固定ID的帧,用于传输ISO 17987节点配置服务和TP消息
- 保留帧
3.1.2 帧接收
(1)LIN主节点控制调度,因此启动总线上的所有帧。
【规范】当帧接收的新时间表输入到期时,LIN接口应调用LIN驱动程序模块的功能Lin_SendFrame。
在报头传输后,LIN驱动程序将自动设置为接收状态。
【规范】LIN接口应通过在最大帧长之后最早和在下一个计划项到期时最早调用功能Lin_GetStatus来确定LIN驱动程序模块的状态。
(2)从节点接收
LIN从程序不知道LIN主节点的调度,它只对LIN驱动程序报告的接收到的LIN头进行响应,并使用头指示回调函数LinIf_HeaderIndication。
每个响应接收的完成将通知LIN接口。LIN驱动程序指示使用响应指示回调函数LinIf_RxIndication成功接收到对LIN接口的响应,以及使用错误指示回调函数LinIf_LinErrorIndication接收到的不成功响应。
【规范】如果对接收报头的PID进行评估并属于配置的接收帧,在从回调LinIf_HeaderIndication返回之前,LIN接口应将PduPtr->Cs和PduPtr->Dl设置为配置的值,并将PduPtr->Drc设置为LIN_FRAMERESPONSE_RX。
【规范】如果调用LinIf_RxIndication函数,则LIN接口将使用接收到的数据和有效载荷长度调用
3.1.3 帧发送
(1)主节点
当一个新的计划条目到期时,一个LIN帧在LinIf_MainFunction_通道中传输。
【规范】LIN接口应使用包含数据缓冲区(SduDataPtr)和缓冲区长度(秒长度)的ptr指针调用函数,以获取帧的数据部分(LIN帧响应中的数据)。
【规范】在获得帧的数据部分后(当函数返回E_OK时),LIN接口应调用LIN驱动程序模块的函数Lin_SendFrame,为LIN驱动程序提供一个指向数据部分的指针。
【规范】当函数返回E_NOT_OK时,LIN接口不得传输请求数据的零星或无条件帧
(2)从节点
LIN从程序不知道调度,它只对LIN驱动程序接收到的LIN头报告的头指示回调函数LinIf_HeaderIndication作出反应。
【规范】如果LinIf_HeaderIndication调用和PID评估和确定为传输帧,接口应当调用函数PduInfoPtr->SduDataPtr设置缓冲提供PduPtr->SduPtr和PduInfoPtr->长度设置为配置长度获得数据部分帧(数据林帧响应)。
【规范】在获取帧的数据部分后(当函数返回E_OK或SRF数据由节点配置处理程序或传输协议提供时),在从回调LinIf_HeaderIndication返回之前,LIN接口应将PduPtr->Cs和PduPtr->Dl设置为配置值,并将PduPtr->Drc设置为LIN_FRAMERESPONSE_TX。
【规范】当函数返回E_NOT_OK时,LIN接口应在从回调LinIf_HeaderIndication返回之前将PduPtr->Drc设置为LIN_FRAMERESPONSE_IGNORE。
每个响应传输的完成将通知LIN接口。LIN驱动程序用响应确认回调函数LinIf_TxConfirmation确认对LIN接口的成功传输响应,用错误指示回调函数LinIf_LinErrorIndication确认一个不成功的响应。
【规范】如果函数LinIf_TxConfirmation被调用,LIN接口将用结果E_OK发出一个回调。
【规范】如果调用函数LinIf_TxConfirmation,且传输帧包含响应错误信号,则LIN接口应清除响应错误信号。
3.2 调度
调度表是操作LIN集群中所有通信的基础。因为LIN接口总是作为LIN主节点操作,所以它必须处理调度表。每个通道都可能有单独的调度表集。帧开始之间的时间(延迟)是特定集群的时间基的倍数。
【规范】处理两帧之间的延迟应为由配置参数线主功能周期给出的周期的倍数。
【规范】LIN接口应提供每个通道预定义的时间表表(名为NULL_SCHEDULE)。
【规范】进度表NULL_SCHEDULE应不包含任何条目。
LIN接口的调度表管理器支持两种类型的调度表: RUN_CONTINUOUS和RUN_ONCE。
3.3 主函数
LinIf_MainFunction_是LIN接口中的中央处理功能。它必须定期被调用。
- 对于LIN主节点,函数LinIf_MainFunction_>是用来轮询调度表管理器,启动帧传输和接收,并与上层和下层进行交互。
- 对于LIN从节点,函数LinIf_MainFunction_>是为了监督不同的时间。由实现者来决定帧处理和与上下层的交互是在任务级上处理,还是在LIN接口回调函数内部处理。
3.4 网络管理
除了唤醒请求和休眠命令外,网络管理还通过节点管理扩展了。节点管理比ISO 17987规范更精确地描述了节点如何操作。
3.4.1 节点管理
LIN接口应作为状态机运行。连接到LIN接口的每个物理通道都在一个子状态机中运行。
主节点状态机如下:
从节点状态机:
3.4.2 进入睡眠过程
向睡眠模式的转换在主节点和从节点之间存在显著差异。
- 当上层请求时,LIN主节点发送一个进入休眠的命令,将总线上的所有从节点设置为休眠模式。
- LIN从节点通过接收一个进入休眠的命令或通过检测总线不活动来进入休眠模式。
3.4.3 唤醒过程
唤醒一个LIN频道有不同的可能性。
- 上层通过LinIf_Wakeup调用请求唤醒,或检测到总线唤醒。
- 如果检测到总线唤醒,则在通过LinIf_CheckWakeup函数进行成功验证后,当上层进入FULL_COM模式时,也会调用LinIf_Wakeup。
3.5 错误分类
3.5.1 开发错误
3.5.2 运行时错误
四、API接口
4.1 API定义
- LinIf_Init
- LinIf_GetVersionInfo
- LinIf_Transmit ——请求传输一个PDU。
- LinIf_ScheduleRequest ——请求一个要执行的计划表。仅用于LIN主节点。
- LinIf_GotoSleep
- LinIf_Wakeup ——启动唤醒进程
- LinIf_SetTrcvMode
- LinIf_GetTrcvMode
- LinIf_GetTrcvWakeupReason
- LinIf_SetTrcvWakeupMode
- LinIf_GetPIDTable ——检索所有已分配的PID值。该顺序与LIN帧索引相一致。
- LinIf_SetPIDTable ——设置所有已分配的PID值。该顺序与LIN帧索引相一致。
- LinIf_GetConfiguredNAD ——报告当前已配置的NAD。仅适用于LIN从属节点。
- LinIf_SetConfiguredNAD ——设置当前已配置的NAD。仅适用于LIN从属节点。
- LinTp_Init ——初始化LIN传输层。
- LinTp_Transmit
- LinTp_GetVersionInfo
- LinTp_Shutdown ——关闭LIN TP。
- LinTp_ChangeParameter ——请求更改特定的传输协议参数(例如,块大小)。
- LinIf_CheckWakeup
- LinIf_EnableBusMirroring ——启用或禁用LIN通道的镜像
4.2 通知函数
- LinIf_WakeupConfirmation ——LIN驱动程序或LIN收发器驱动程序在检查唤醒期间或总线通电后,将调用此功能以报告唤醒源。
- LinIf_HeaderIndication ——LIN驱动程序将调用此函数来报告已接收到的LIN报头。
- LinIf_RxIndication ——LIN驱动程序将调用此函数来报告成功接收到的响应,并将接收数据提供给LIN接口。
- LinIf_TxConfirmation ——LIN驱动程序将调用此函数来报告已成功传输的响应。
- LinIf_LinErrorIndication ——LIN驱动程序将调用此函数,以在报头或响应处理过程中报告检测到的错误事件。
4.3 调度函数
- LinIf_MainFunction_ ——LIN接口的主要处理功能。