<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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
    +關注

    關注

    9

    文章

    333

    瀏覽量

    21281
  • 函數
    +關注

    關注

    3

    文章

    4117

    瀏覽量

    61507
  • LIN
    LIN
    +關注

    關注

    4

    文章

    193

    瀏覽量

    39999
  • 通信協議棧
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6159
  • 報文
    +關注

    關注

    0

    文章

    31

    瀏覽量

    3991
收藏 人收藏

    評論

    相關推薦

    常見串口通信幾個問題請教?

    有關常見串口通信幾個問題請教論壇里的專家? 1、常見串口通信CAN,DP,PN,ETHER IP/TCP,ETHERCAT等,這些串口協議的終端電阻分別是多少? 2、這些終端電阻是為
    發表于 04-04 16:30

    dsp無線通信電臺的通信協議研究

    ,任何通信系統之所以能正常工作離不開通信協議的支持。本文以研制通信電臺為例,提出了種適合無線通信
    發表于 02-19 15:27

    關于通信協議的應用問題

    大家好,我想問下有關通信協議的問題;協議,在具體設計或者應用的時候,我們該如何利用協議指導我們的設計呢?比如硬件中的電路如何體現協議的作用?軟件中的程序如何體現
    發表于 01-27 18:25

    CAN通信協議

    CAN通信協議,需要的看看。
    發表于 04-19 17:11

    關于zll協議些問題

    您好,ti工程師,我想向您請教幾個關于zll協議的問題,我最近正在看ti的zll協議,我有幾個問題
    發表于 08-08 06:14

    TCP通信協議-Labview上位機

    現在用單片機進行信息采集,通過GPRS模塊上傳到PC,用Labview做上位機,TCP通信協議,想請教下,TCP通信協議和Modbus TCP通信協議有什么不同?
    發表于 12-10 08:58

    BLE協議的時間更新是什么?

    幾個問題想請教下:1. 協議中有個時間更新函數osalTimeUpdate()函數,請問更新的是什么時間?2. osalTimeUp
    發表于 03-17 09:42

    如何應用mavlink通信協議?

    如何應用mavlink通信協議?
    發表于 12-20 06:30

    ***us通信協議的相關資料推薦

    大家好,今天我發表篇關于***us通信協議的解析,剛開始作者為啥要做這個東西呢,因為作者在2019年4月21日參加了廣東舉辦的中國工程機器人大賽,做的是小型無人機,作者用的是FS-i6遙控,剛開始
    發表于 02-09 07:13

    如何實現基礎通信協議的設計?

    常見的通信協議格式是什么?如何實現基礎通信協議的設計?
    發表于 02-14 07:35

    串口通信協議的相關資料分享

    目錄、串口通信協議1、UART簡介2、 UART通信協議(1)起始位(2)數據幀(3)奇偶校驗位(4)停止位(5)下個起始位(6)波特率二、STM32的USART串口通信(中斷)3、
    發表于 02-22 07:16

    Modbus通信協議教程

    Modbus通信協議教程Modbus通信協議教程Modbus通信協議教程
    發表于 12-08 14:14 ?72次下載

    SCPI通信協議

    SCPI通信協議。
    發表于 05-04 17:54 ?177次下載

    一個簡單的基礎通信協議的設計與實現

    一個簡單的基礎通信協議的設計與實現一種常見的通信協議格式搭建串口收發環境配置STM32CubeMX添加USART部分代碼通信協議的實現不同設備之間的通信,都需要設計自己的
    發表于 12-14 18:38 ?9次下載
    一個簡單的基礎<b class='flag-5'>通信協議</b>的設計與實現

    物聯網通信協議基礎知識合集

    本文介紹了幾個可用的物聯網通信協議,它們具有不同的性能、數據速率、覆蓋范圍、功率和內存,而且每一種協議都有各自的優點和或多或少的缺點。其中一些通信協議只適合小型家用電器,而其他一些
    的頭像 發表于 03-23 14:32 ?843次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>