
按照我個人經驗,學習AUTOSAR架構下的一個功能模塊一般會經過以下幾個通用的步驟:
1)如果這個模塊是硬件驅動模塊,首先深入學習硬件原理 -- 學習硬件原理。
2)然后理解AUTOSAR架構下模塊的抽象概念以及配置參數與硬件原理的對應關系 -- 理解抽象概念和配置參數。
3)上板測試模塊的核心功能,比如模塊的狀態切換,數據的收發鏈路 -- 上板實踐。
4)根據實際工程問題理解模塊的異常處理機制,積累問題分析經驗 -- 問題處理經驗積累。
如果模塊是一個純軟件模塊,一般只需上面2-4步的學習。對于EthIf模塊我們在《》一文中詳細介紹過了其詳細設計,在本文將繼續介紹EthIf模塊的關鍵配置然后上板調試實踐。
Eth系列文章:
【車載以太網】Eth Stack Bringup
【車載以太網】AUTOSAR架構下EthTrcv實戰詳解
【車載以太網】AUTOSAR架構下TC3xx芯片是如何將一幀ETH報文發送出去的
【車載以太網】AUTOSAR架構下TC3xx芯片是如何將一幀ETH報文接收上來的
英飛凌Aurix2G TC3XX GETH模塊詳解
以太網PHY自學筆記
轉載|車載以太網自學筆記
車載以太網PHY,MAC,MII,switch簡介
一文入門車載以太網,吐血整理! 不看可惜!
車載以太網網絡管理之UdpNm
雪嶺 · 車載以太網硬件方案(萬字概覽)
Classic Autosar下的以太網通訊架構概覽
英飛凌Aurix? TC4x 以太網GETH模塊詳解
AUTOSAR BSW: Vector Davinci
MCAL: EB Infineon
HW Platform: TC3xx
Debug Tool: UDE

1)Physical Eth Controller和Eth TransceiverEthIfControlle綁定底層Eth模塊和EthTrcv模塊,這是最關鍵且必須的配置。
2)Enable VLAN和Eth Switch Port Group以及VLAN Id配置EthIf VLAN功能,只有充當交換機(Switch,有access和trunk)的ECU節點才需要配置VLAN,對于終端節點一般不需要配置VLAN.
3)Ctrl Mtu配置最大發送數據字節數,如果是帶VLAN Tag的數據包,最大發送1500 - 4 = 1496字節數據,因為VLAN Tag占用4字節數據。
注意:關于VLAN的詳細介紹這里不再展開,我在DeepSeek問了以下幾個問題就能得到滿意的答案。
問題1:詳細介紹以太網幀頭格式(有圖),特別是VLAN字段?
問題2:VLAN用來干嘛,或者說為什么要設計VLAN?
問題3:你說到的VALN 10和VLAN 20是怎么區分的,協議字段上怎么區分VLAN 10和VLAN 20?
問題4:Access端口 vs Trunk端口什么意思?
問題5:終端設備的access端口收到不帶標簽的報文,終端設備怎么知道這是VLAN報文?
問題6:也就是說,常規情況下只有交換機里面的程序或者網卡驅動才支持VLAN驅動以及VLAN協議?


在《【車載以太網】AUTOSAR架構下TC3xx芯片是如何將一幀ETH報文接收上來的》一文我們知道Eth Controller模塊收到一幀以太網報文后最終會調用EthIf_RxIndication上傳給EthIf模塊,EthIf_RxIndication就會根據FrameType參數查找EthIfFrameOwnerConfig中的配置表,如果是0x0806 ARP包就調用EthIfIndicationConfig配置中的IpV4_Arp_RxIndication傳遞給TcpIP模塊的ARP相關函數處理,如果是0x0800 IpV4包就調用EthIfIndicationConfig配置中的IpV4_Ip_RxIndication傳遞給TcpIP模塊的IpV4相關函數處理。

EthIf模塊會周期性的輪詢EthTrcv的LinkState(這是一個硬件狀態,參考《【車載以太網】AUTOSAR架構下EthTrcv實戰詳解》一文),并將LinkState通過EthSM_TrcvLinkStateChg傳遞給EthSM模塊。

如果EthIf采用輪詢方式發送報文,那么EthIf發送報文后會周期調用EthIf_TxConfirmation查詢ETH報文是否發送成功,如果發送成功后會調用IpV4_Ip_TxConfirmation通知給TcpIp模塊。

EthIfGeneral重要的配置參數就是Eth相關MainFunction的調度周期以及是否使用中斷方式收發報文,其他根據需要勾選即可。
調試一個模塊總結起來就看幾個點:
按照Vector的代碼風格,配置參數和狀態變量都定義在xxx_Lcfg.c文件中,比如EthIf_Lcfg.c.
配置參數 | 描述 |
EthIf_EthDrvApi | 配置EthIf需要使用的Eth Driver接口,比如: Eth_30_Tc3xx_GetControllerMode Eth_30_Tc3xx_GetPhysAddr Eth_30_Tc3xx_SetControllerMode Eth_30_Tc3xx_SetPhysAddr Eth_30_Tc3xx_Transmit Eth_30_Tc3xx_TxConfirmation Eth_30_Tc3xx_UpdatePhysAddrFilter Eth_30_Tc3xx_VTransmit |
EthIf_EthIfCtrl | 對應EthIfController配置容器中的MTU配置值以及VlanID配置。 |
EthIf_EthTrcvDrvApi | 配置EthIf需要使用的Eth Trcv接口,比如: EthTrcv_30_Ethmii_GetDuplexMode EthTrcv_30_Ethmii_GetLinkState EthTrcv_30_Ethmii_GetPhySignalQuality EthTrcv_30_Ethmii_GetTransceiverMode EthTrcv_30_Ethmii_SetPhyTxMode EthTrcv_30_Ethmii_SetTransceiverMode EthTrcv_30_Ethmii_StartAutoNegotiation EthTrcv_30_Ethmii_TransceiverInit |
EthIf_RxIndications | 對應EthIfRxIndicationConfg配置內容: IpV4_Arp_RxIndication IpV4_Ip_RxIndication |
EthIf_TxConfirmations | 對應EthIfTxConfirmationConfig配置內容: IpV4_Ip_TxConfirmation |
EthIf_User | 對應EthIfFrameOwnerConfig配置內容: 0x0800u 0x0806u |
狀態變量 | 描述 |
EthIf_EthIfCtrlInitState | EthIf是否初始化 |
EthIf_EthIfCtrlLinkState | 對應EthTrcv的link狀態: typedef enum EthIf_EthIfCtrlLinkStateEnum { ETHIF_ETHIFCTRL_LINK_STATE_NO_LINK = 0, /**< EthIf controller has no link */ ETHIF_ETHIFCTRL_LINK_STATE_LINK_CHANGE_DOWN = 1, /**< EthIf controller has a link change from up to down */ ETHIF_ETHIFCTRL_LINK_STATE_LINK_CHANGE_UP = 2, /**< EthIf controller has a link change from down to up */ ETHIF_ETHIFCTRL_LINK_STATE_LINK = 3 /**< EthIf controller has link */ } EthIf_EthIfCtrlLinkStateType; |
EthIf_EthIfCtrlLinkCount | EthTrcv的Link次數 |
EthIf_EthIfCtrlMode | Down或者Active模式: # define ETH_MODE_DOWN (0x00u) # define ETH_MODE_ACTIVE (0x01u) |
EthIf_EthIfCtrlRxStats | 存放EthIf Controller接收的packets數和bytes數。 |
EthIf_EthIfCtrlTxStats | 存放EthIf Controller發送的packets數和bytes數。 |
EthIf_SrcMacAddrBuffer | 存放最近發送的以太網包中的Source MAC地址。 |
EthIf_TxContext | 存放以太網驅動程序可以提供的每個傳輸緩沖區的上下文信息。 |
EthIf正常工作下的狀態信息如下所示:

函數 | 描述 |
EthIf_MainFunctionTx EthIf_MainFunctionRx EthIf_MainFunctionState | 周期調度的MainFunction是否被周期調用 |
EthIf_ProvideTxBuffer EthIf_VTransmit EthIf_Transmit EthIf_TxConfirmation | EthIf調用EthIf_Transmit或者EthIf_VTransmit發送報文,在發送報文前先調用EthIf_ProvideTxBuffer讓Eth Controller準備好buffer. 發送報文后中斷函數或者EthIf_MainFunctionTx調用EthIf_TxConfirmation通知上傳完成報文發送。 |
EthIf_RxIndication | 接收報文中斷中Eth Driver調用EthIf_RxIndication傳遞數據包給EthIf模塊,然后EthIf模塊根據FrameType分發報文。 |
EthIf接收到ARP報文后的響應過程:

EthIf接收到ICMP報文后的響應過程:

本文較為詳細的介紹了EthIf模塊的關鍵配置、調試變量、關鍵函數,也就是理論聯系實際完成了前言學習經驗中的第2,3步。學習EthIf模塊只是本文的基本目的,更希望本文能起到一個拋磚引玉的作用幫助大家更好的學習AUTOSAR架構下的各個模塊。
End
「汽車電子嵌入式在CSDN上同步推出AUTOSAR精進之路專欄,本專欄每個模塊完全按實際項目中開發及維護過程來詳細介紹。模塊核心概念介紹、實際需求描述、實際工程配置、特殊需求介紹及背后原理、實際工程使用經驗總結。 目的是讓讀者看完每一個章節后能理解原理后根據需求完成一個模塊的配置或者解決一個問題。」
點擊文章最后左下角的閱讀原文可以獲取更多信息
或者復制如下鏈接到瀏覽器獲取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
文末福利
2.為便于技術交流,創建了汽車電子嵌入式技術交流群,可盡情探討AP,CP,DDS,SOME/IP等前沿熱點話題,后臺回復“加群”即可加入;
注:本文引用了一些第三方工具和文檔,若有侵權,請聯系作者刪除!
推薦閱讀
汽車電子嵌入式精彩文章匯總第一期:20210530-20230703
汽車電子嵌入式精彩文章匯總第2期
汽車電子嵌入式精彩文章匯總第3期
汽車電子嵌入式精彩文章匯總第4期
AUTOSAR項目實戰(9) -CanTrcv模塊配置實踐
AUTOSAR架構下Multi-Core Com配置實戰
TC3xx芯片看門狗復位的默認行為分析
AUTOSAR架構下TC3xx芯片是如何進行模式切換的
AUTOSAR架構下NvM_ReadAll時間優化的實用方案(上)
AUTOSAR架構下NvM_ReadAll無法退出問題分析
TC3xx芯片RAM監控機制的補充
TC3xx芯片RAM ECC錯誤軟件調試
TC3xx芯片ROM ECC錯誤軟件調試
內存分區設計及鏈接文件實現
AUTOSAR項目實戰(10)-Alignment Error異常問題分析
AUTOSAR項目實戰(11)-AUTOSAR OS MPU配置及調試
TC3xx芯片[Class 4, TIN 3] trap原因分享
CanSM何時設置BusOffDTC及常見BusOff內部原因總結
AUTOSAR架構下如何測試NvM的使用率
AUTOSAR架構下如何測量Task的周期和運行時間
EVADC功能安全需求及一些軟硬件設計注意事項
AUTOSAR項目實戰(12)-Can Driver模塊配置使用實踐
NvM實車問題分析-看基礎扎實老司機如何快速定位問題
TC3xx芯片SMU FSP自檢原理和實現
【功能安全】ESM[SW]:SMU:ALIVE_ALARM_TEST原理及具體實現
【功能安全】ESM[SW]:SYS:MCU_FW_CHECK原理及注意實現
LIN收發器TJA1021功耗過高問題分析
【功能安全】英飛凌TC3xx芯片LBIST實現原理
【車載以太網】Eth Stack Bringup
【車載以太網】AUTOSAR架構下EthTrcv實戰詳解
【車載以太網】AUTOSAR架構下TC3xx芯片是如何將一幀ETH報文發送出去的
【車載以太網】AUTOSAR架構下TC3xx芯片是如何將一幀ETH報文接收上來的
End
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,都是我最大的動力!
汽車電子嵌入式
微信掃描二維碼,關注我的公眾號