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

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

3天内不再提示

AUTOSAR通信协议栈的几个问题(一)

832065824 来源:汽车电子嵌入式 2023-01-31 09:23 次阅读

前言

最近在研究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状态。

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

    关注

    10

    文章

    350

    浏览量

    21465
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • LIN
    LIN
    +关注

    关注

    4

    文章

    216

    浏览量

    40235
  • 通信协议栈
    +关注

    关注

    0

    文章

    7

    浏览量

    6167
  • 报文
    +关注

    关注

    0

    文章

    38

    浏览量

    4017
收藏 人收藏

    评论

    相关推荐

    如何实现基础通信协议的设计?

    常见的通信协议格式是什么?如何实现基础通信协议的设计?
    发表于 02-14 07:35

    EPA通信协议设计中的关键技术研究

    在EPA 通信协议设计中,内存管理和定时器队列管理是影响协议性能的重要方面。本文针对嵌入式系统下EPA 网络的特点,提出了分类链式内存队列的动态内存管理方法和简单
    发表于 08-26 15:05 11次下载

    基于ARM的EPA通信协议优化技术的研究与实现

    本文叙述基于ARM的EPA通信协议优化技术的研究与实现的案例分析。
    发表于 10-13 16:48 32次下载
    基于ARM的EPA<b class='flag-5'>通信协议</b><b class='flag-5'>栈</b>优化技术的研究与实现

    基于嵌入式的实时通信协议研究与设计

    传统的TCP/IP协议重点在于保证数据传输的可靠性及流量控制,而在实时性要求相对较高的嵌入式领域, 其实时性方面的性能显得不足。为此,对基于TCP/IP协议的嵌入式通信协议进行了
    发表于 09-23 17:55 27次下载

    Modbus通信协议教程

    Modbus通信协议教程Modbus通信协议教程Modbus通信协议教程
    发表于 12-08 14:14 75次下载

    在FPGA中实现嵌入式TCP/IP通信协议

    研究了嵌入式TCP/IP通信协议在Xilinx FPGA上的实现,介绍了其软硬件的系统组成和原理,提出种实时操作系统上TCP/IP协议
    发表于 11-17 17:05 8021次阅读
    在FPGA中实现嵌入式TCP/IP<b class='flag-5'>通信协议</b><b class='flag-5'>栈</b>

    个简单的基础通信协议的设计与实现

    个简单的基础通信协议的设计与实现种常见的通信协议格式搭建串口收发环境配置STM32CubeMX添加USART部分代码通信协议的实现不同设
    发表于 12-14 18:38 10次下载
    <b class='flag-5'>一</b>个简单的基础<b class='flag-5'>通信协议</b>的设计与实现

    物联网通信协议基础知识合集

    本文介绍了几个可用的物联网通信协议,它们具有不同的性能、数据速率、覆盖范围、功率和内存,而且每协议都有各自的优点和或多或少的缺点。其中
    的头像 发表于 03-23 14:32 1132次阅读

    嵌入式开发常见通信协议

    本文介绍了几个可用的物联网通信协议,它们具有不同的性能、数据速率、覆盖范围、功率和内存,而且每协议都有各自的优点和或多或少的缺点。其中
    的头像 发表于 02-28 17:03 1245次阅读
    嵌入式开发常见<b class='flag-5'>通信协议</b>

    AUTOSAR通信协议配置详解

    通讯协议几乎是CP AUTOSAR中最庞杂的块。由于其涉及的模块比较多(仅实现CAN信号的收发就需要ECUC/CAN/CANIF/CANTP/PDUR/COM/XCP这么多模块的协
    的头像 发表于 09-21 10:02 5271次阅读
    <b class='flag-5'>AUTOSAR</b>中<b class='flag-5'>通信协议</b><b class='flag-5'>栈</b>配置详解

    AUTOSAR实战教程-通信协议介绍

    不同的DBC属性决定不同功能的报文, 般实际项目中涉及的报文为4类:应用报文,诊断报文,网络管理报文,XCP报文。不同作用的报文其在协议中的信号流路径是不同的。
    的头像 发表于 10-07 14:15 3019次阅读
    <b class='flag-5'>AUTOSAR</b>实战教程-<b class='flag-5'>通信协议</b><b class='flag-5'>栈</b>介绍

    CAN协议与LIN协议介绍

    CAN协议 汽车CAN协议种软件组件,用于实现汽车电子系统中的CAN总线通信功能。它包含
    的头像 发表于 10-27 16:16 2967次阅读
    CAN<b class='flag-5'>协议</b><b class='flag-5'>栈</b>与LIN<b class='flag-5'>协议</b><b class='flag-5'>栈</b>介绍

    PROFINET协议通信技术介绍

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

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

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

    PROFINET通信协议是什么

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