0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AUTOSAR LIN通信协议栈怎么保证NM报文先发送的?

汽车ECU开发 ? 来源:汽车电子嵌入式 ? 2023-02-02 10:19 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

最近在研究AUTOSAR通信协议栈的时候产生了以下几个问题:

(1)Lin数据由linif的调度表触发发送的话,com怎么控制Lin类型的PDU停止和发送了?

(2)怎么保证NM报文先发送的?

本文先梳理一遍通信协议栈的一些关键概念及重要机制,然后回答这些问题。

正文

1.Lin报文的发送机制

Lin报文的发送机制在<<Can/Lin报文的触发发送(Trigger Transmit) >>一文中已经详细讲解过,这里再简单回顾下。

16824096-a29a-11ed-bfe3-dac502259ad0.png

Lin报文的周期发送是通过调度表实现的,而Lin调度表存在于LinIf模块,LinIf模块在周期调用调度表的时候通过callback的方式实现IPDU的trigger transmit,也就是向上获取到sdu数据,然后调用Lin_SendFrame发送报文。调度表中的报文都是需要周期发送处理的报文,对于偶发sporadic frame的发送,COM --> PDUR -->CanIf_Transmit中设置发送flag,实现偶发帧发送。我们这里主要讨论Lin周期报文的发送机制。

1693418e-a29a-11ed-bfe3-dac502259ad0.png

16b34ed4-a29a-11ed-bfe3-dac502259ad0.png

LinIf模块实现Lin调度表中报文的周期发送,且所有报文都是通过调用pdur模块的PduR_TriggerTransmit的callback函数完成sdu数据的获取。

16c5e59e-a29a-11ed-bfe3-dac502259ad0.png

16e314e8-a29a-11ed-bfe3-dac502259ad0.png

LinIf模块调用PduR_LinIfTriggerTransmit函数来获取PDU数据,如果获取数据成功,则调用LinIf_SendFrame往LinDriver发送数据,如果获取数据失败则不会发送Lin报文。

那也就是说,如果找到PduR_LinIfTriggerTransmit返回失败的原因也就找到了LinIf停止发送报文的原因。

继续往下分析PduR_LinIfTriggerTransmit函数,PduR_LinIfTriggerTransmit --> Com_TriggerTransmit

分析Com_TriggerTransmit函数

16f2a282-a29a-11ed-bfe3-dac502259ad0.png

17044910-a29a-11ed-bfe3-dac502259ad0.png

Com_TriggerTransmit函数会首先会检查PDU所在的PduGroup是否Started了,如果没有Started,则Com_TriggerTransmit函数返回E_NOT_OK。、

也就是说如果PDU所在的PduGroup没有Started则Com_TriggerTransmit返回E_NOT_OK,PduR_LinIfTriggerTransmit返回失败,则LinIf_ManiFunction_<>不会往LinDriver发送数据。

2.NM报文和App报文的发送

171a1ae2-a29a-11ed-bfe3-dac502259ad0.png

如果我们使用Can网络管理的话,那么Can网络管理报文由CanNm模块控制发送,而应用报文的发送是由Com模块和ComM模块协同管理发送的,那么问题就来了:

NM报文由CanNm模块控制发送,App报文由Com/ComM模块控制发送,那么我们怎么保证每次上电/Reset后NM报文首先发送到总线上去了

AUTOSAR标准里面没有规定NM报文和APP报文谁先发送出去的配置。但是NM模块提供了一个

Std_ReturnType Nm_GetState(

NetworkHandleType nmNetworkHandle,

Nm_StateType* nmStatePtr,

Nm_ModeType* nmModePtr

)

接口可以获取当前NM模式和状态,如果我们在请求ComM到FullCom前先确包NM模式进入到Network状态的话,那么NM报文一定会在APP报文之前发送出去。

Example:

Nm_StateType NmCurrentState;


Nm_ModeType NmCurrentMode; Nm_GetState(ComMConf_ComMChannel_ComMChannel_Can_Network_0,&NmCurrentState,&NmCurrentMode);


if(( NM_MODE_SYNCHRONIZE == NmCurrentMode )||( NM_MODE_NETWORK == NmCurrentMode ))


{


    ComM_RequestComMode(ComMConf_ComMUser_ComMUser_Can_Network_0,COMM_FULL_COMMUNICATION);


    ComM_RequestComMode(ComMConf_ComMUser_ComMUser_Can_Network_1,COMM_FULL_COMMUNICATION);


}

3.问题回答

问题1:Lin数据由Linif的调度表触发发送的话,com怎么控制所有Lin报文所在的PDU的停止和发送了?

:LinIf通过LinIf_MainFunction --> PduR_LinIfTriggerTransmit --> Com_TriggerTransmit获取Lin报文的PDU数据,如果获取失败则不会调用LinIf_SendFrame发送报文。而Com_TriggerTransmit函数在获取PDU数据时首先会检查PDU所在的PduGroup是否Started,如果没有Started则Com_TriggerTransmit返回E_NOT_OK,最终LinIf_MainFunction停止往驱动发送报文,也就停发Lin报文。也就是说,我们通过BswM调用Com模块提供的Com_IpduGroupStart,Com_IpduGroupStop同样能控制Lin报文的停止和发送

问题2:怎么保证NM报文先发送的?

:需要手写代码或者通过BswM模式控制和仲裁实现。具体就是在请求APP报文所在Network进入到FullCom之前确保NM模式已经进入了NetWork状态。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN总线
    +关注

    关注

    145

    文章

    1995

    浏览量

    133362
  • AUTOSAR
    +关注

    关注

    10

    文章

    382

    浏览量

    22873
  • PDU
    PDU
    +关注

    关注

    0

    文章

    97

    浏览量

    17405
  • LIN
    LIN
    +关注

    关注

    4

    文章

    225

    浏览量

    41313
  • 通信协议栈
    +关注

    关注

    0

    文章

    7

    浏览量

    6250

原文标题:AUTOSAR LIN通信协议栈问题总结

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Modbus 转 Profinet:工业通信协议的桥梁

    1. 引言 在工业自动化领域,Modbus 和 Profinet 是两种广泛使用的通信协议。Modbus 是一种串行通信协议,常用于连接工业电子设备,而 Profinet 是一种基于以太网的工业
    的头像 发表于 02-24 11:11 ?432次阅读
    Modbus 转 Profinet:工业<b class='flag-5'>通信协议</b>的桥梁

    PROFINET通讯协议报文解析

    PROFINET是一种广泛应用于工业自动化领域的通信协议,由PROFIBUS国际组织开发,基于以太网技术,支持工业控制系统和设备(如传感器、执行器和其他控制器)之间的通信。本文将对PROFINET
    的头像 发表于 02-03 14:29 ?4325次阅读

    ADS1278通过SPI通信协议读取转换数据时遇到的疑问求解

    我用的是TI的ADS1278进行六通道电压同步采样,工作在SPI的TDM,离散数据模式。在通过SPI通信协议读取转换数据时,采用了下面的读取方法: 通过DSP处理器SPI接口MISO读取
    发表于 01-14 06:31

    总线通信协议解析及应用

    在现代计算机系统中,总线通信协议扮演着至关重要的角色。它们定义了数据如何在处理器、内存、输入/输出设备等组件之间传输。 总线通信协议的基本概念 总线通信协议是一组规则,它规定了数据在系统总线上的传输
    的头像 发表于 12-31 10:07 ?1268次阅读

    常见串口通信协议 如何设置串口参数

    串口通信是一种常见的通信方式,广泛应用于计算机、嵌入式系统和各种电子设备之间。串口通信协议主要是指在串行通信中,数据传输的格式和规则。 常见串口通信
    的头像 发表于 12-27 09:51 ?3760次阅读

    AUTOSAR通信对自动驾驶的影响 AUTOSAR通信与嵌入式系统设计

    AUTOSAR通信与嵌入式系统设计紧密相连,共同推动着自动驾驶技术的发展。 AUTOSAR通信对自动驾驶的影响 提高通信效率和可靠性
    的头像 发表于 12-17 15:09 ?843次阅读

    AUTOSAR通信实现中的常见问题

    AUTOSAR(Automotive Open System Architecture)汽车开放系统架构旨在实现汽车电子的软硬件分离,降低ECU软件开发的复杂度,提高软件可重用性。 一、通信协议
    的头像 发表于 12-17 15:03 ?1310次阅读

    AUTOSAR通信堆栈的配置 AUTOSAR通信模块测试方法

    )的开发和生产。通信堆栈是AUTOSAR架构中的关键组成部分,负责处理ECU之间的通信AUTOSAR通信堆栈的配置
    的头像 发表于 12-17 15:01 ?1130次阅读

    AUTOSAR通信框架的优势 AUTOSAR通信实例与应用场景

    的一些主要优势: 标准化 :AUTOSAR通信框架提供了一套标准化的接口和协议,这有助于不同供应商之间的软件组件
    的头像 发表于 12-17 14:58 ?1203次阅读

    AUTOSAR通信与CAN协议的关系

    的概念,允许应用层组件(如软件组件和ECU抽象层)通过定义良好的接口进行通信。 1. 通信服务: AUTOSAR提供了一系列通信服务,包括复杂驱动
    的头像 发表于 12-17 14:57 ?1128次阅读

    AUTOSAR通信协议解析 如何实现AUTOSAR通信

    通信协议是一个复杂的系统,它涵盖了多种通信方式和模块,以实现车内ECU之间的高效、可靠的数据交换。以下是对AUTOSAR通信协议的解析及实
    的头像 发表于 12-17 14:54 ?3210次阅读

    串口通信协议解析 串口通信应用实例

    串口通信协议解析 串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。以下是串口通信协议的介绍: 基本概念
    的头像 发表于 11-21 17:03 ?2391次阅读

    如何使用CAN通信如何实现对变频器的控制?

    ,优先级越高,但是这个帧ID怎么和MODBUS报文联系?结合发送的数据。 和MODBUS 485通信协议报文对比一下这两者有什么区别,该如何去发送
    发表于 11-14 18:33

    PLC控制系统的通信协议解析

    在现代工业自动化中,PLC控制系统扮演着至关重要的角色。它们不仅需要处理复杂的逻辑控制任务,还需要与其他系统和设备进行通信。为了实现这一目标,PLC系统必须遵循一系列的通信协议。 PLC通信协议
    的头像 发表于 11-08 09:46 ?2857次阅读

    PROFINET通信协议是什么

    PROFINET通信协议是一种专为工业自动化领域设计的基于以太网的实时通信协议。以下是对PROFINET通信协议的详细解析,包括其定义、特点、体系结构、工作原理、通信方式、应用领域以及
    的头像 发表于 09-25 18:13 ?5573次阅读