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

    文章

    1953

    浏览量

    130913
  • AUTOSAR
    +关注

    关注

    10

    文章

    363

    浏览量

    21637
  • PDU
    PDU
    +关注

    关注

    0

    文章

    94

    浏览量

    17005
  • LIN
    LIN
    +关注

    关注

    4

    文章

    216

    浏览量

    40313
  • 通信协议栈
    +关注

    关注

    0

    文章

    7

    浏览量

    6187

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

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

收藏 人收藏

    评论

    相关推荐

    总线通信协议解析及应用

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

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

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

    AUTOSAR通信实现中的常见问题

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

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

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

    AUTOSAR通信与CAN协议的关系

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

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

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

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

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

    PROFINET通信协议是什么

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

    简单认识UART通信协议

    UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)通信协议是一种常见的串行通信协议,广泛应用于计算机、嵌入式系统、传感器、无线通信
    的头像 发表于 07-25 18:07 1502次阅读

    CAN报文为什么会发送失败?

    CAN总线调试过程中出现报文发送失败。很多工程师都对此只知其一不知其二,今天我们就以CAN报文发送失败的问题来做一次探讨。在了解CAN报文
    的头像 发表于 04-12 08:25 2207次阅读
    CAN<b class='flag-5'>报文</b>为什么会<b class='flag-5'>发送</b>失败?

    UART串口通信协议是什么?

    ,广泛应用于嵌入式领域。 在UART串口通信协议中,数据以字节的形式进行传输。发送和接收端的通信流程如下: 1、通信波特率设置:发送端和接收
    的头像 发表于 03-19 17:26 1468次阅读

    AUTOSAR平台研究报告:国产基础软件+芯片全方案加快量产

    2023年12月7日,AUTOSAR组织发布了最新版本AUTOSAR R23-11标准,从功能角度方面,更新主要集中在信息安全、功能安全以及通信协议等三个方面。
    的头像 发表于 02-21 15:30 3215次阅读
    <b class='flag-5'>AUTOSAR</b>平台研究报告:国产基础软件+芯片全<b class='flag-5'>栈</b>方案加快量产

    串行通信协议的带宽是指什么?

    在SPI和I2C等串行通信协议,两者带宽不一样,这里的带宽是指什么,传输速率还是其他什么?如果要求很高的传输速率,那么要求发送端要能很快的发送数据,要有很短的上升沿下降沿时间,高低位电平也维持很短
    发表于 02-08 18:04

    PROFINET协议通信技术介绍

    PROFINET协议是PROFINET通信协议的实现基础,它由多个层次组成,每个层次都有特定的功能和作用。
    的头像 发表于 02-03 16:22 2495次阅读

    工业控制通信协议报文帧分别是什么样的?

    那样先存储起来,不知道我对同步异步通信的理解是否正确? 2、这些协议下的通信设备发送数据的格式多种多样,请问每种协议
    发表于 01-19 14:46