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总线
    +关注

    关注

    146

    文章

    2051

    浏览量

    135547
  • AUTOSAR
    +关注

    关注

    11

    文章

    409

    浏览量

    23762
  • PDU
    PDU
    +关注

    关注

    0

    文章

    102

    浏览量

    17843
  • LIN
    LIN
    +关注

    关注

    4

    文章

    234

    浏览量

    42133
  • 通信协议栈
    +关注

    关注

    0

    文章

    8

    浏览量

    6287

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    三格电子13年老厂家,专注工业通讯#通信协议

    通信协议
    jf_68793483
    发布于 :2026年03月05日 09:32:44

    松下A6伺服通信协议介绍

    松下A6伺服通信协议是工业自动化领域中广泛使用的一种高性能通信标准,其设计旨在实现伺服驱动器与控制器之间的高效数据交互。该协议基于松下自主开发的通信架构,支持多种
    的头像 发表于 03-02 17:16 887次阅读
    松下A6伺服<b class='flag-5'>通信协议</b>介绍

    机器人通信协议EtherCAT和CAN如何选择

    当下,虽然行业中存在许多通信协议,但业内人士普遍认为,EtherCAT和CAN两大协议,是机器人行业未来最重要的两大协议
    的头像 发表于 01-27 15:54 4468次阅读

    车载以太网通信协议如何测?UT和SP联手!

    引言在汽车以太网的通信测试中,面对复杂的协议分层与交互,一个核心挑战在于:如何高效、直接地对ECU内部的网络层、传输层等协议实现进行验证?仅仅通过外部网络接口
    的头像 发表于 01-21 10:04 1861次阅读
    车载以太网<b class='flag-5'>通信协议</b><b class='flag-5'>栈</b>如何测?UT和SP联手!

    LIN总线相关知识

    可以连接16个节点,无需仲裁。 (2)对硬件要求简单,仅需UART/SCI 接口,辅以简单驱动程序便可实现 LIN 协议。 (3)LIN的一大优点是成本低,最大传输速率为20Kbps。建议的
    发表于 12-10 08:14

    LIN协议电平以及帧结构

    范围来保证数据传输的稳定性。 (3)发送信号电压必须满足隐形电平>Vbat80%,发送信号电压必须满足显性电平Vbat60%,发送信号电压必须满足显性电平
    发表于 12-10 07:05

    通信协议IIC与SPI最全对比分析

    )通信协议,这意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写从设备时,它首先拉低从设备对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号
    发表于 12-10 06:04

    Xilinx FPGA串行通信协议介绍

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

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

    在分布式能源(如光伏、储能、微电网)并网场景中,通信协议需满足 设备互联、数据传输、远程控制、调度协同 等核心需求,不同协议因设计目标不同,适用于从设备层到调度层的不同层级。以下按 “国际标准协议
    的头像 发表于 09-18 16:40 2042次阅读
    分布式能源并网的<b class='flag-5'>通信协议</b>有哪些?

    如何实现安全的AUTOSAR通信

    。未经保护的通信链路可能面临数据篡改、重放攻击及冒充攻击等风险,危及车辆功能的正确性和用户安全。因此,在AUTOSAR架构中建立完备的通信安全机制,已成为行业共识与技术刚需。
    的头像 发表于 09-08 16:43 1465次阅读

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

    通信协议
    三格电子科技
    发布于 :2025年08月28日 10:35:26

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

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

    如何在保证数据安全的前提下优化通信协议

    产品实拍图 在保证数据安全的前提下优化通信协议,核心是 **“安全机制轻量化、安全与效率协同设计、按需适配场景风险”**—— 既不因过度安全(如复杂加密、冗余校验)牺牲传输效率,也不因追求效率(如
    的头像 发表于 08-27 09:55 960次阅读
    如何在<b class='flag-5'>保证</b>数据安全的前提下优化<b class='flag-5'>通信协议</b>?

    用于各种设备协议间做报文转换的网关是什么

    用于各种设备协议间做报文转换的网关通常被称为协议转换网关,也常被称为工业协议网关(在工业场景中)或多协议网关。它是一种专门用于解决不同设备、
    的头像 发表于 08-11 14:08 1254次阅读
    用于各种设备<b class='flag-5'>协议</b>间做<b class='flag-5'>报文</b>转换的网关是什么

    LIN协议:汽车电子中的隐形功臣

    在汽车电子通信领域,CAN/CANFD和车载以太网常被提及,但有一个低调却不可或缺的协议LIN,正默默支撑着车窗、车灯等车身系统的智能化控制。LIN
    的头像 发表于 07-01 11:40 2123次阅读
    <b class='flag-5'>LIN</b><b class='flag-5'>协议</b>:汽车电子中的隐形功臣