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

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

3天内不再提示

AUTOSAR通信协议栈的一些关键概念及重要机制梳理

832065824 来源:汽车电子嵌入式 2023-01-31 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

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

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

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

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

正文

1.Lin报文的发送机制

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

da97f4b6-a098-11ed-bfe3-dac502259ad0.png

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

daba90fc-a098-11ed-bfe3-dac502259ad0.png

daf4cfba-a098-11ed-bfe3-dac502259ad0.png

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

db0c7e3a-a098-11ed-bfe3-dac502259ad0.png

db350562-a098-11ed-bfe3-dac502259ad0.png

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

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

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

分析Com_TriggerTransmit函数

db4bfc72-a098-11ed-bfe3-dac502259ad0.png

db741b80-a098-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报文的发送

db8aa13e-a098-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

    文章

    2020

    浏览量

    134694
  • AUTOSAR
    +关注

    关注

    10

    文章

    389

    浏览量

    23514
  • PDU
    PDU
    +关注

    关注

    0

    文章

    99

    浏览量

    17611
  • LIN
    LIN
    +关注

    关注

    4

    文章

    232

    浏览量

    41819
  • 通信协议栈
    +关注

    关注

    0

    文章

    7

    浏览量

    6274

原文标题:AUTOSAR 通信协议栈的几个问题(一)

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Xilinx FPGA串行通信协议介绍

    Xilinx FPGA因其高性能和低延迟,常用于串行通信接口设计。本文深入分析了Aurora、PCI Express和Serial RapidIO这三种在Xilinx系统设计中关键的串行通信协议。介绍了它们的特性、优势和应用场景
    的头像 发表于 11-14 15:02 1917次阅读
    Xilinx FPGA串行<b class='flag-5'>通信协议</b>介绍

    分布式能源并网的通信协议有哪些?

    ”“工业通用协议”“国内自主标准” 三大类别,梳理主流通信协议及其应用场景: 、国际标准协议(主流且通用性强) 这类
    的头像 发表于 09-18 16:40 988次阅读
    分布式能源并网的<b class='flag-5'>通信协议</b>有哪些?

    如何实现安全的AUTOSAR通信

    随着软件定义汽车(SDV)理念的普及,车辆内部各电子控制单元(ECU)之间的通信已经突破传统的控制边界,成为支撑自动驾驶、高度互联和OTA更新的关键基础设施。在这样的背景下,通信安全的重要
    的头像 发表于 09-08 16:43 957次阅读

    哪些协议是工业通信协议?#三格电子

    通信协议
    三格电子科技
    发布于 :2025年08月27日 14:16:07

    如何选择适合自己项目的通信协议评估工具?

    骤的决策框架,结合项目关键变量(如协议类型、评估目标、资源约束等),帮助精准匹配工具: 、先明确 3 个核心决策前提:锚定选型方向 在选择工具前,需先梳理项目的基础约束,这是后续筛选
    的头像 发表于 08-27 09:19 441次阅读
    如何选择适合自己项目的<b class='flag-5'>通信协议</b>评估工具?

    详解REST API通信协议

    环。 为了实现这目标,我们采用了多种通信协议,包括MQTT、OPC UA、AMQP和REST API,它们共同构成了智能通信的坚实基础。本期内容,让我们聚焦REST API
    的头像 发表于 01-17 12:40 1614次阅读
    详解REST API<b class='flag-5'>通信协议</b>

    总线通信协议解析及应用

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

    RS232接口通信协议详解 如何测试RS232接口的性能

    RS232接口通信协议详解 RS232接口通信协议种广泛应用的串行通信协议,它规定了数据在设备之间的传输方式和格式。以下是RS232接口通信协议
    的头像 发表于 12-18 18:03 5173次阅读

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

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

    AUTOSAR通信实现中的常见问题

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

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

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

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

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

    AUTOSAR通信与CAN协议的关系

    AUTOSAR通信模型: AUTOSAR定义了个分层的软件架构,其中包括应用层、基础软件层和微控制器抽象层。在这些层中,通信模型是实现EC
    的头像 发表于 12-17 14:57 1458次阅读

    AUTOSAR通信组件介绍 AUTOSAR通信层功能分析

    实现汽车电子控制单元(ECU)的软件设计和开发。这个架构包括多个层,其中通信层是AUTOSAR架构中的关键组成部分之。 1. 通信组件概述
    的头像 发表于 12-17 14:55 2150次阅读

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

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