图解AUTOSAR_SWS_LINDriver

AUTOSAR LIN驱动详解文档

基于AUTOSAR标准的本地互联网络(LIN)驱动程序技术规范解析

目录


1. 概述

1.1 AUTOSAR LIN驱动简介

LIN驱动是AUTOSAR标准中通信模块的重要组成部分,属于微控制器抽象层(MCAL)的驱动程序。它负责实现LIN(本地互联网络)协议的底层通信功能,包括帧的发送和接收、唤醒和睡眠模式控制以及错误处理等。

LIN驱动提供了硬件无关的标准化接口,使上层软件组件能够与具体的硬件实现解耦。LIN驱动模块位于AUTOSAR通信栈的底层,通过标准化的API接口与LIN接口(LinIf)模块进行交互,同时控制底层的LIN硬件外设。

作为AUTOSAR基础软件的关键组成部分,LIN驱动需要满足以下主要功能:

  • 支持ISO 17987标准中定义的LIN 2.x协议
  • 处理LIN帧的收发
  • 管理LIN通道的睡眠和唤醒
  • 提供LIN总线错误检测和报告
  • 支持主节点和从节点两种工作模式

1.2 LIN协议基础

LIN(Local Interconnect Network,本地互联网络)是一种成本低廉的串行通信协议,主要应用于汽车电子系统中的传感器、执行器等非关键控制网络。LIN作为CAN总线的补充,适用于对通信速度要求不高但成本敏感的应用场景。

LIN协议的主要特点包括:

  • 单主多从的网络拓扑结构
  • 主节点控制所有通信,从节点仅在主节点请求时才响应
  • 最高通信速度20kbps,典型速率为19.2kbps
  • 帧格式简单,由帧头(主节点发送)和帧响应(主节点或从节点发送)组成
  • 支持睡眠和唤醒机制,适合低功耗应用
  • 支持总线错误检测,具有自动同步功能

在AUTOSAR架构中,LIN通信栈包括LIN驱动(Lin)、LIN接口(LinIf)、LIN状态管理器(LinSM)等多个模块,它们协同工作以实现完整的LIN通信功能。


2. LIN驱动架构

2.1 类图结构

在这里插入图片描述

图2.1 AUTOSAR LIN驱动类图

LIN驱动的类结构设计体现了AUTOSAR软件架构的模块化和分层思想。上图展示了LIN驱动的主要类型定义和API接口,以及与外部模块的交互关系。具体来说,该类图包含以下关键元素:

  1. 数据类型

    • Lin_ConfigType:LIN驱动的主配置结构,包含硬件相关的配置参数
    • Lin_FrameCsModelType:校验和模型枚举,包含增强型校验和(LIN_ENHANCED_CS)和经典校验和(LIN_CLASSIC_CS)
    • Lin_FrameResponseType:帧响应类型枚举,定义帧的方向(发送/接收/忽略)
    • Lin_PduType:LIN协议数据单元定义,包含PID、校验和模型、响应方向和数据长度
    • Lin_StatusType:LIN状态枚举,描述当前的通信状态和错误类型
  2. API接口

    • Lin_Init:初始化LIN驱动
    • Lin_SendFrame:发送LIN帧(仅主节点)
    • Lin_GetStatus:获取通信状态(仅主节点)
    • Lin_GoToSleep/Lin_GoToSleepInternal:进入睡眠模式
    • Lin_Wakeup/Lin_WakeupInternal:唤醒LIN通道
    • Lin_CheckWakeup:检查是否发生唤醒
    • Lin_GetVersionInfo:获取版本信息
  3. 状态机

    • Lin_StateMachine:模块状态机,管理初始化状态
    • Lin_ChannelStateMachine:通道状态机,控制通道的工作状态
  4. 外部接口

    • DET(默认错误追踪器)和DEM(诊断事件管理器)的接口,用于错误处理
    • EcuM(ECU管理器)的接口,用于唤醒事件通知
    • LIN接口(LinIf)的回调函数,用于通信事件通知

LIN驱动模块的设计遵循了AUTOSAR的接口标准化原则,通过明确定义的API与上层模块通信,通过回调函数向上层通知事件,保证了模块间的松耦合和可维护性。

2.2 状态机设计

在这里插入图片描述

图2.2 AUTOSAR LIN驱动状态机图

LIN驱动的状态机设计清晰地定义了模块和通道的状态转换逻辑,是理解LIN驱动工作流程的关键。状态机分为两个主要部分:模块状态和通道状态。

  1. 模块状态机

    • LIN_UNINIT:复位后的初始状态,模块未初始化
    • LIN_INIT:模块已初始化,可以开始通信
    • 通过调用**Lin_Init()**函数可从LIN_UNINIT状态转换到LIN_INIT状态
  2. 通道状态机

    • LIN_CH_OPERATIONAL:通道处于正常工作状态,可以进行通信
    • LIN_CH_SLEEP_PENDING:通道正在准备进入睡眠状态(仅适用于主节点)
    • LIN_CH_SLEEP:通道处于睡眠状态,只能通过唤醒操作恢复
  3. 状态转换

    • 主节点通过**Lin_GoToSleep()进入SLEEP_PENDING状态,然后通过Lin_GetStatus()**检测进入SLEEP状态
    • 所有节点都可以通过**Lin_GoToSleepInternal()**直接进入SLEEP状态
    • 从SLEEP状态可以通过Lin_Wakeup()(发送唤醒脉冲)或Lin_WakeupInternal()(不发送唤醒脉冲)返回OPERATIONAL状态
    • 初始化后所有通道默认处于SLEEP状态
  4. API可用性

    • OPERATIONAL状态下可用:Lin_SendFrame、Lin_GoToSleep/Lin_GoToSleepInternal、Lin_GetStatus
    • SLEEP状态下可用:Lin_Wakeup、Lin_WakeupInternal
    • 任何状态下都可用:Lin_Init、Lin_GetVersionInfo

状态机设计确保了LIN通信的可靠性和高效性,通过明确各状态下的行为和限制,防止了不当的API调用和潜在的通信问题。特别是在低功耗管理方面,状态机为睡眠和唤醒功能提供了坚实的基础。


3. LIN帧结构

3.1 基本帧组成

在这里插入图片描述

图3.1 LIN帧结构详解

LIN帧是LIN通信的基本单元,由主节点发送的帧头和主节点或从节点发送的响应部分组成。LIN帧结构遵循ISO 17987标准,具有明确的格式和顺序。

  1. LIN帧头部(由主节点发送)

    • 中断域(Break Field):由13-14个显性位(逻辑0)和1个隐性位(逻辑1)组成,用于通知所有从节点新帧的开始,并提供同步的起点
    • 同步域(Sync Field):固定值0x55(01010101),提供交替的01位序列,允许从节点同步位时序和校准内部波特率
    • 标识符域(PID Field):包含6位ID和2位校验位(P0和P1),标识LIN帧的类型和目的
  2. LIN响应部分(由主节点或从节点发送)

    • 数据域(Data Field):包含1-8个字节的有效负载数据,每个字节包含起始位、8位数据和停止位
    • 校验和域(Checksum Field):1字节校验和,用于验证数据传输的完整性
  3. 传输顺序

    • 按照严格的顺序依次传输:中断域→同步域→标识符域→数据域→校验和域
    • 主节点负责发送帧头,根据帧的类型,响应部分由主节点或从节点发送
  4. 校验和计算

    • 经典校验和:仅包含数据字节的校验和,用于LIN 1.x兼容性
    • 增强校验和:包含PID和数据字节的校验和,提高了错误检测能力,用于LIN 2.x
  5. 帧类型

    • ID 0x00-0x3B:常规数据帧
    • ID 0x3C-0x3F:诊断帧和保留帧
    • 根据响应方向分为:主节点发送(TX)、从节点发送(RX)或从节点间通信(IGNORE)

正确理解LIN帧结构是开发和调试LIN通信系统的基础。LIN驱动负责处理这些帧的组装和解析,确保符合协议规范。

3.2 PID结构

PID(Protected Identifier)是LIN帧的关键组成部分,用于标识帧类型并保护传输。PID由6位ID和2位校验位组成:

  1. ID位(ID0-ID5):6位,定义帧的类型和目的,范围从0x00到0x3F(0-63)

    • ID 0x00-0x3B:应用数据帧
    • ID 0x3C:主节点请求帧(MRF)
    • ID 0x3D:从节点响应帧(SRF)
    • ID 0x3E-0x3F:保留帧
  2. 校验位(P0-P1):2位,用于检测ID传输错误

    • P0(偶校验):P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
    • P1(奇校验):P1 = ~(ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
  3. PID计算步骤

    • 确定6位ID值
    • 根据上述公式计算P0和P1
    • 组合ID和校验位形成完整的PID

PID的校验机制能够检测出单比特错误和相邻位的多比特错误,提高了LIN通信的可靠性。LIN驱动在处理帧时会自动验证接收的PID校验位,确保标识符的完整性。


4. LIN驱动配置

4.1 主要配置参数

在这里插入图片描述

图4.1 AUTOSAR LIN驱动配置结构

LIN驱动的配置是AUTOSAR标准中预编译和链接时配置的一部分。合理的配置对于LIN驱动功能的正确实现至关重要。LIN驱动配置包含以下主要部分:

  1. LinGeneral:全局配置参数

    • LinDevErrorDetect:是否启用开发错误检测(布尔类型)
    • LinVersionInfoApi:是否启用版本信息API(布尔类型)
    • LinIndex:模块索引
    • LinTimeoutDuration:硬件超时时间(0-65535)
  2. LinChannel:通道特定配置

    • LinChannelId:通道唯一标识符(0-65535)
    • LinChannelBaudRate:通道波特率(1000-20000 bps)
    • LinNodeType:节点类型(MASTER/SLAVE)
    • LinChannelWakeupSupport:是否支持唤醒功能(布尔类型)
  3. LinDemEventParameterRefs:诊断事件参数引用

    • LIN_E_TIMEOUT:超时错误的DEM事件ID引用

4.2 配置结构

LIN驱动的配置具有分层结构,便于组织和管理:

  1. 配置层次

    • Lin(根容器)包含所有LIN驱动配置
    • LinGeneral包含全局配置参数
    • LinGlobalConfig包含所有通道的配置
    • LinChannel是通道特定配置的容器
    • LinDemEventParameterRefs定义诊断事件参数引用
  2. 外部模块依赖

    • EcuM:通过EcuMWakeupSource引用唤醒源
    • MCU:通过McuClockReferencePoint引用时钟
    • EcucPartition:通过EcucPartition引用分区
  3. 配置生成

    • 配置由AUTOSAR工具链生成
    • 由预编译时配置和链接时配置组成
    • 生成的配置结构传递给Lin_Init()函数

正确配置LIN驱动是确保通信可靠性的重要前提。尤其是波特率、节点类型和唤醒支持等参数,需要与网络中其他节点的配置保持一致。此外,超时设置和错误处理策略直接影响系统的稳定性和诊断能力。


5. LIN通信流程

5.1 LIN主节点通信

在这里插入图片描述

图5.1 LIN主节点通信序列图

LIN主节点是LIN总线通信的控制者,负责发起所有帧传输并控制总线的时序。主节点通信的主要流程如下:

  1. 初始化流程

    • LIN接口调用**Lin_Init(Config)**初始化LIN驱动
    • 初始化后,所有通道默认处于LIN_CH_SLEEP状态
  2. 帧发送流程

    • LIN接口调用**Lin_SendFrame(Channel, PduInfoPtr)**请求发送帧
    • 根据PduInfoPtr->Drc(方向控制)参数,有三种情况:
      • LIN_FRAMERESPONSE_TX:主节点发送帧头和响应
      • LIN_FRAMERESPONSE_RX:主节点发送帧头,从节点发送响应
      • LIN_FRAMERESPONSE_IGNORE:主节点发送帧头,从节点间通信,主节点忽略响应
  3. 状态查询

    • LIN接口循环调用**Lin_GetStatus(Channel, &Lin_SduPtr)**查询通信状态
    • 可能的返回状态:
      • LIN_TX_OK:帧发送成功
      • LIN_RX_OK:帧接收成功,同时返回接收的数据
      • LIN_TX_BUSY/LIN_RX_BUSY:正在发送/接收
      • LIN_TX_ERROR/LIN_RX_ERROR/LIN_TX_HEADER_ERROR:发送/接收错误
      • LIN_RX_NO_RESPONSE:无响应
  4. 睡眠和唤醒

    • 进入睡眠:
      • LIN接口调用**Lin_GoToSleep(Channel)**请求进入睡眠
      • LIN驱动发送go-to-sleep命令,进入LIN_CH_SLEEP_PENDING状态
      • 通过Lin_GetStatus确认进入LIN_CH_SLEEP状态
    • 唤醒:
      • LIN接口调用**Lin_Wakeup(Channel)**请求唤醒
      • LIN驱动发送唤醒脉冲,进入LIN_CH_OPERATIONAL状态

主节点通信的特点是主动发起所有通信,并需要通过轮询状态来确认通信结果。主节点还负责管理总线的睡眠和唤醒过程,确保网络的低功耗运行。

5.2 LIN从节点通信

在这里插入图片描述

图5.2 LIN从节点通信序列图

LIN从节点只能响应主节点的请求,不能主动发起通信。从节点通信主要基于中断和回调机制,其主要流程如下:

  1. 初始化流程

    • LIN接口调用**Lin_Init(Config)**初始化LIN驱动
    • 初始化后,通道处于LIN_CH_SLEEP状态,等待唤醒或帧头
  2. 帧头接收

    • 从节点检测到LIN总线上的帧头(Break + Sync + PID)
    • LIN驱动调用**LinIf_HeaderIndication(PduPtr)**回调通知上层
  3. 响应处理

    • 根据上层确定的响应类型,有三种情况:
      • LIN_FRAMERESPONSE_TX:从节点需要发送响应
        • 从节点准备数据并发送到总线
        • 发送完成后调用**LinIf_TxConfirmation()**通知上层
      • LIN_FRAMERESPONSE_RX:从节点需要接收响应
        • 从节点接收总线上的数据
        • 接收完成后调用**LinIf_RxIndication(Lin_SduPtr)**通知上层并传递数据
      • LIN_FRAMERESPONSE_IGNORE:从节点忽略响应
        • 不处理总线上的响应数据
  4. 错误处理

    • 检测到帧错误时,调用**LinIf_LinErrorIndication(Error)**通知上层
    • 错误类型包括:帧头错误、位错误、停止位错误、校验和错误等
  5. 睡眠和唤醒

    • 进入睡眠:
      • LIN接口调用**Lin_GoToSleepInternal(Channel)**请求进入睡眠
      • 从节点直接进入LIN_CH_SLEEP状态,不发送go-to-sleep命令
    • 唤醒处理:
      • 总线唤醒:从节点检测到唤醒脉冲,调用**LinIf_WakeupConfirmation()**通知上层
      • 内部唤醒:LIN接口调用Lin_WakeupInternal(Channel),从节点进入LIN_CH_OPERATIONAL状态

从节点通信的特点是被动响应,依赖中断和回调机制处理通信事件。这种设计减轻了从节点的处理负担,简化了实现复杂度,同时保证了通信的及时性和可靠性。


6. 总结

6.1 应用场景

AUTOSAR LIN驱动适用于多种汽车电子系统应用场景:

  1. 车身电子控制

    • 电动车窗、车门锁控制
    • 座椅调节与记忆功能
    • 灯光控制系统
    • 雨刮器控制
  2. 舒适系统

    • 空调控制面板
    • 方向盘按键控制
    • 车内照明系统
    • 后视镜调节
  3. 传感器网络

    • 温度、湿度、气压传感器
    • 光线传感器
    • 简单的位置传感器
  4. 低成本执行器系统

    • 简单的电机控制
    • 风扇控制
    • 阀门控制单元

LIN尤其适合那些对通信速度要求不高(20kbps以下),但对成本敏感且需要简化布线的应用场景。

6.2 优势与局限

优势

  • 标准化接口:符合AUTOSAR标准,提供统一的API接口
  • 硬件抽象:与具体硬件实现解耦,提高软件可移植性
  • 灵活配置:支持主节点和从节点配置,适应不同应用需求
  • 低功耗支持:完善的睡眠和唤醒机制,适合电池供电系统
  • 错误处理:提供全面的错误检测和报告机制

局限

  • 通信速率低:最高20kbps,不适合高速数据传输
  • 总线负载有限:单主节点架构限制了总线利用率
  • 实时性不强:与CAN等协议相比,确定性较弱
  • 网络规模小:通常支持的节点数较少(典型为16个以内)
  • 功能有限:不支持复杂的网络管理和诊断功能

总体而言,AUTOSAR LIN驱动为汽车电子系统提供了一种标准化、成本效益高的通信解决方案。它适用于需要低成本、低功耗、可靠性适中的简单通信应用,是CAN总线的理想补充。

autosar_sws_timesyncovercan是AUTOSAR标准中定义的基于CAN总线的时间同步服务。 在汽车电子系统中,不同的控制单元(ECU)需要按照统一的时间基准进行操作,以确保各个控制单元之间的协调和同步。autosar_sws_timesyncovercan就是为了满足这个需求而被定义的。 autosar_sws_timesyncovercan使用了CAN总线作为通信的介质,通过CAN总线将时间同步消息发送到各个控制单元。通过时间同步消息,各个控制单元可以获取精确的时间信息,并根据这个时间信息进行各种操作,例如数据传输、事件触发等。 autosar_sws_timesyncovercan实现了基于Master-Slave架构的时间同步机制。其中,Master节点负责发送时间同步消息,而Slave节点则负责接收并进行时间同步。Master-Slave架构确保了整个系统中所有控制单元之间的时间保持一致。 autosar_sws_timesyncovercan定义了不同的时间同步模式,包括周期同步模式和非周期同步模式。周期同步模式适用于需要周期性执行任务的应用场景,而非周期同步模式适用于一次性任务的应用场景。 autosar_sws_timesyncovercan还规定了时间同步消息的格式和传输方式,确保消息的可靠性和准确性。同时,还定义了时间同步相关的接口和API,方便控制单元的开发和集成。 总之,autosar_sws_timesyncovercan是一种以CAN总线为基础的时间同步服务,通过统一的时间基准来协调和同步汽车电子系统中的各个控制单元,实现系统的高效运行和协作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值