400-821-6015
行(xíng)業(yè)資訊
您當前的(de)位置:首頁 » 行(xíng)業(yè)資訊 » 行(xíng)業(yè)資訊
內(nèi)部資訊行(xíng)業(yè)資訊

AUTOSAR CAN驅動Mailbox配置技(jì)術(shù)要(y≈≠₹☆ào)點全解析

發布日(rì)期:2023-10-24

前言

      首先,請(qǐng)問(wèn) ≠大(dà)家(jiā)幾個(gè)小(xiǎ©δ→o)小(xiǎo)問(wèn)題,你(nφ→ǐ)清楚:

        - AUTOSAR框架下(xià)的(de)CAN驅動✘λ☆¥關鍵詞定義嗎(ma)?是(shì)不(bù)是(shì)有(yǒu)些(xiπ₩ē)總是(shì)傻傻分(fēn)不(bù)清楚呢(ne)?

       - CAN☆π↑驅動Mailbox配置過程中有(yǒu)哪些(xiē)關鍵配置參數(shù)值得(d↔φ"★e)我們注意,防止出現(xiàn)低(dī)級錯(cuò)誤?

      &nbβπ™sp;- CAN驅動Mailbox的(de)三種類型Tx Buffer,Tx FIFO,Tα"↕x Queue的(de)區(qū)别嗎(ma)?

      &nbs←<p;今天,我們來(lái)一(yī)起探索并回答(dá)這(zhè)些(xiē)問(wèn≈®±)題。為(wèi)了(le)便于大(dà)家®←φ(jiā)理(lǐ)解,以下(xià)是(shì)本文(wén)的(de)主題大(dà)≤"♠綱:

圖片

正文(wén)

      CAN驅動作(γ€ ∞zuò)為(wèi)一(yī)個(gè)在日(rì)常開(kāi)發¶α項目中經常接觸到(dào)的(de)重要(yào)驅動模塊,AUTOSAR組織對βγ↔<(duì)CAN Driver有(yǒu)著(zhe)十分(fēn)全面而準确的(<¥♠÷de)實現(xiàn)要(yào)求與相(xiàng)關關鍵詞參數(shù)的(de)€®♣€定義。

      經常®β™發現(xiàn)大(dà)家(jiā)在開(kāi)發過程中總是(shì)會(huì)忽略或者✔↕混淆這(zhè)些(xiē)模塊的(de)關鍵詞的(de)定義,導緻最終雙方在<♣溝通(tōng)過程中存在很(hěn)多(duō)的(↑₹✘de)誤解,在開(kāi)發過程中也(yě)會¥λ(huì)存在諸多(duō)不(bù)必要(y→ασ¶ào)的(de)失誤與bug的(de)産生(shēng),因此本文(wén)小(xiǎo)T将帶領大(dà)家(jiā)一(yī)起來(¶↕"lái)了(le)解AUTOSAR框架的(&←φde)CAN Driver一(yī)些(xiē)十分(fēn)重要>$(yào)的(de)關鍵詞解釋以及難以理(lǐ)解的(de)基本概念,助力我們日(rì)常工(g♦ ōng)作(zuò)中的(de)CAN驅動開(kāi)發。

      &nbs φ•™p;小(xiǎo)T未來(lái)會(huì)繼續更新該A•©₽UTOSAR詞典專欄,該詞典将會(huì)講♣↕解有(yǒu)關AUTOSAR框架下(xià)難以理(lǐ)解或者容易混✔‍ 淆的(de)基本概念與相(xiàng)關重要(yào)知(z£‍hī)識點,像“百科(kē)詞典”一(yī)樣幫助大(d δλ♦à)家(jiā)查漏補缺,助力大(dà)家(jiā)高(g←δγ>āo)效完成基于AUTOSAR的(de)軟件(jiàn)開(kāi)發,歡迎大(dà)家(jiā)多(duō)多(duō)關注與β≠₽轉發該專欄。

CAN 驅動關鍵詞定義

       小(xiǎo)T通(tōng) £δ過學習(xí)AUTOSAR CAN Driver标準文(wén)β&"檔,并結合自(zì)身(shēn)實戰經驗,将♣∑≈CAN Driver模塊的(de)關鍵詞定義整理(lǐ)如(rú)下(xià)表所示:

圖片
CAN 驅動關鍵詞定義解釋

CAN 驅動Mailbox關鍵配置參數(shù)

      在底層MCAL CAN Driver配置過程中總是(shì÷‌ ↑)會(huì)存在許多(duō)容易混淆的(de)關鍵配置參數(shù),該類參數✘α≠Ω(shù)如(rú)果配置有(yǒu)誤,有(yǒu)些(xiē)時(shí)©≥‍候就(jiù)會(huì)出現(xiàn)讓人(rén)費(fèi)解的(de)問(wèn)題與b>∞Ωug,因此為(wèi)了(le)能(néng)夠減小(xiǎo)這(zhè)類問(wèn)題的(dα←×e)出現(xiàn),小(xiǎo)T結合自(zì)身(shēn)實戰經驗一(yī)起來(l÷↑ái)學習(xí)下(xià)CAN驅動中關鍵配 ™≈‍置參數(shù)的(de)定義與相(xiàngβ"β∞)關注意事(shì)項。


Hardware Object

      如(rú§✔>)上(shàng)述表格中所述, 一(yī)個(gè)Hardware Object就(jiù)是(shì)一(yī)個(gè)Cβ↑AN L-PDU的(de)buffer,用(yòng)來(lái)存儲僅一(yī)個(gè)CΩ←→ AN ID Message,你(nǐ)将可(kě)以将其理(lǐ)解為(wèi)就(jiù)是(s'€™hì)我們常說(shuō)的(de)Mailbox,該Mailb∏ ¶ox就(jiù)是(shì)CAN 控制♦σ$(zhì)器(qì)硬件(jiàn)上(shàng)的(de)一(yī)個(gè)物(wù)理(l≈®ǐ)buffer空(kōng)間(jiān),用(yòng¶ )來(lái)存儲用(yòng)于發送或者接收的(de)一(yī)個(gè)CAN♦∏ π ID Message,該CAN ID Message自(zì)然就(jiù)是(shì)包含≥ •CAN ID,DLC, Data三個(gè)部分 "©π(fēn)


HOH,HTH,HRH三者區(qū)别與聯≥γσ→系

      為(wèi)了(le)更好(hǎo)地(dì≤✔)理(lǐ)解HOH,HTH,HRH三者的(de)區(qū)别,小(xiǎo)T将三者•£₹的(de)區(qū)别與聯系整理(lǐ)如(rú§λφ↓)下(xià)表所示:

圖片
HTH,HRH,HOH三者區↓•>★(qū)别與聯系


CanHwObjectCount

      該參數(shù)按照(zhào)AUTOSAR官方文(wén)檔中的(•ε±de)定義,表示的(de)就(jiù)是(shì)Ha∏©↓±rdware Object中的(de)數(shù)目,不(bù)過需要(yào)注意的(d÷π♣e)是(shì)該參數(shù)面向的(de)對(duì)象是(shì)H☆​↔≈OH,即HRH或者HTH。

      該參數(shù)表示是₩&(shì)否為(wèi)該HOH配置了(le)FI↔✔↓FO機(jī)制(zhì),如(rú)果數(shù)目為(wèi)1<&♦,則并沒有(yǒu)FIFO進行(xíng)緩存數(shù)據,如(rú)✘"∞α果大(dà)于1,那(nà)麽就(jiù)是(shλ÷ì)為(wèi)該HOH配置了(le)FIFO的(de) ÷©≤數(shù)據緩存機(jī)制(zhì),這(zhè)種緩存機(jī)制(zhì)對​±ε≠(duì)于防止CAN接收或者發送的(d←§e)重要(yào)報(bào)文(wén)丢失至關重要(yào)λ£‍×。

      如(rú)下(xià)圖所示便展示了(le)CanHwOΩ< ®bjectCount在HOH中的(de)配置:

圖片
      1.CanHwObjectCount在♠γ€HOH中的(de)發送配置
圖片

      2.CanHwObjectCount在HOH中的(de)接收配置

      - ≥ε∑ 如(rú)上(shàng)圖1所示,可(kě)↓×₽‍以知(zhī)道(dào)該HOH為(wèi)發送類型的(de)HOH,因此就(jiù)直接可(kě)以理(lǐ)σ>解為(wèi)HTH,那(nà)麽該HTH中定義了(le)參數(shù)∞γ÷CanHwObjectCount的(de)值為(wèi)1,表示不(bù)存在FIFO機(jī)制(zh©≈‍★ì),僅是(shì)一(yī)個(gè)唯一(yī)的(de)buffer,如(rú)果數(shù)據發送或者接收比較頻(pín)繁,意味著(zhe)新數(shù)據可(kě)能(néng) δ✘☆來(lái)不(bù)及發送;

      - 如(rú)上(shàng)圖2所示,可≥¥ε©(kě)以知(zhī)道(dào)該HOH為(wèi)接收類型的(de)HOH,因此就(jiù)直接可(kě)以理β∞↑ (lǐ)解為(wèi)HRH,那(nà)麽該HRH中定義了(le)參數(shù)CanHwObjectCount的(de)值為(wèi)2,表示存在深度為(w§•≈>èi)2的(de)FIFO機(jī)制(zhì),如(rú)果數ε׶σ(shù)據發送或者接收比較頻(pín)繁,至少(shǎo)存在深度‌®λ為(wèi)2的(de)FIFO緩存空(€λ✘¥kōng)間(jiān)來(lái)防止重要(yào)數(shù)據的(d☆≈e)丢失。


Full CAN與Basic CAN

     在MCAL CAN Dri£€©εver中的(de)Full CAN與Basi∏ c CAN是(shì)用(yòng)來(lái)修飾HOH的(de)♦$‌δ類型參數(shù),該參數(shù)可(kě)以通(tōng)過CanObejctType進行(xíng)定義。

      Full C₩ε₹AN:一(yī)般表示僅存在1個(gè)的(de)Hardware Obj ≈∞•ect與之對(duì)應,且該Full CAN類型的(de)Hardwar♦δ€e Object與特定的(de)CAN ID Message綁定;

      Basic CAN:一(yī)般表示存在1個₩φ (gè)或者多(duō)個(gè)的(de)Hardware Object與之對(duì)應φ×,且該Basic CAN類型的(de)Hardware Obje∏>φ≥ct與非特定的(de)CAN ID Message或者一(yī)•≈"定範圍內(nèi)的(de)CAN ID Messδ ≥∏age綁定;

注意事(shì)項:

        - 對(duì)于Basic Can類型的(de)HOH 一(yī)般建議(yì)通(tōng)過配置硬件(jiàn)過濾器(qì)來(lái)實現(x♥πiàn)底層無關CAN Message的(de)數(shù)據接收或者特定範圍內(nèi)的(d™‍>↓e)報(bào)文(wén)接收,減少(shǎo)☆§©↑不(bù)必要(yào)的(de)硬件(jiàn)中斷,也(yě)就(jiù)從(cóng)某種程度上(shàng)降低(dī)了(¶σle)CPU負載;

       -πγ 當硬件(jiàn)資源較為(wèi)充足且無需過↑ 多(duō)考慮新數(shù)據可(kě)能(néng)覆蓋老(lǎo)數(shù)據的≤≈(de)場(chǎng)景,一(yī)般推薦将HOH配置成FULL CA ✔∑N類型。

      &nΩ✔bsp;- 在HOH的(de)配置過程中,一(yī)般®✘™情況下(xià)均需要(yào)先将FULL CAN類型的(de)HOH統一(yī)配置在前,Basic CAN類型的λ©&(de)HOH配置在後,否則容易造成生(shēng)成的(de)代碼中Maibox使用(y ♠òng)錯(cuò)亂的(de)情況。


推薦配置方案

       小(xiǎoβ₽↑)T結合實戰經驗,将軟件(jiàn)開(kāi)發過程中常見(jiàn) φ的(de)四類報(bào)文(wén)類型:"↕₹₽應用(yòng)報(bào)文(wén),網™"₩≤絡管理(lǐ)報(bào)文(wén),診斷報(bàλγo)文(wén),Xcp報(bào)文(wén)的(de)發送與接收的(de)mailbox配置方案總結如(rú)下(xià)表所示:

圖片
CAN Mailbox的(de)四類報(bào)文(wén)推薦配¥®置方案


推薦配置方案總結如(rú)下(xià):

       - ↓♥∑診斷報(bào)文(wén)由于屬于重要(yào)報(bào)文(wén),丢失與發送均不™↕≥γ(bù)允許丢失且存在嚴格的(de)時(shí)序關系,因此發送‌₩₩與接收均推薦Basic CAN+FIFO 來(∏✔ ¥lái)設置;

      - Xcp報(bào)文(wén)發送<§與接收都(dōu)是(shì)特定ID的(de)報(bào)文(wδ∞én),因此發送與接收均推薦Full CAN+Buffer來(lái)設置;

      - 應用(yòng)報(bào)文(wén)在mail☆∑®¶box硬件(jiàn)充足的(de)前提下(xià),發送與接收優先采→®¥用(yòng)Full CAN+Buffer來(lái&★)設置,如(rú)果硬件(jiàn)資源不(bù)夠的(de)話(huà),$ ÷那(nà)麽推薦采用(yòng)Basic CAN+FIFO來(lái•§∑♣)配置;

      - 網絡管理(lǐ)報(bào×♦♠♦)文(wén)接收一(yī)般是(shì)一(yī)定範圍的(de)報(bào)文(w↑£σén),因此接收推薦采用(yòng)Basic CAN+£"​™Buffer來(lái)配置,發送由于I↕ ™≥D确定,因此推薦采用(yòng)Full C∞©₽©an+Buffer來(lái)設置;

      - 所有(yǒu)報(bào)文(wén)的§₽♥σ(de)發送與接收配置完成之後,一(yī)定要(₽​yào)确保所有(yǒu)配置HOH中的(de)Ca‍ ≥nHwObjectCount加起來(lá©÷i)的(de)mailbox發送與接收數(shù)目分(fēn)别不(bù)§✔能(néng)超過芯片手冊規定的(de)發送mailbo₽•£x與接收mailbox硬件(jiàn)資源總和(h✘££é)。

CAN 驅動硬件(jiàn)Buffer類型

      了(le)解了(le)上(shàn₩ ©g)述CAN驅動推薦方案之後,我們接下(×÷↓xià)來(lái)需要(yào)進一(yī)步探究下(xià)對(duì)于can co∞λntroller硬件(jiàn)資源內(nèi)部對(du♣≠δ↓ì)于用(yòng)于存儲CAN L-PDU的✘∞↓λ(de)buffer是(shì)如(rú)何定義的(de)?

      Ω ÷一(yī)般來(lái)講,現(xiàn)在市(shì)面上(shàng)主流✔↕α 的(de)CAN Controller對(duì)于其硬件(jiàn)∞±資源按照(zhào)發送與接收可(kě)以分(fēn)為(wèi)如(rú)下(xià)∏✔σ₹幾種類型Buffer:

       - 發送硬件(jiàn)Buffer類型:Tx Buffer,Tx >♠β‌FIFO,Tx Queue;

      - 接收硬件(jiàn)Buffer類型Rx B‌"∞uffer,Rx FIFO;


      接下(xià)來(lái)将針對(£↓φduì)每種硬件(jiàn)Buffer類型分(fēn)别進行(xíng)講解:

       Tx Buffer

      Tx Buff♦α®↕er又(yòu)名Dedicated Tx♥ε Buffer,該Buffer會(huì)與特定的(de)CAN ID進行(xíng)綁定,發送優♦×±先級是(shì)完全通(tōng)過CAN ID越小(xiβ♦∑ǎo),優先級越高(gāo),高(gāo↓ ♦♦)優先級優先發送;

         ♦;一(yī)般該Tx Buffer會(huì)配置HOH的(de)→α✘CanObejctType類型為(wèi)Full CAN模< ↔✔式。


        T∑↑•x FIFO

       上(shàng)文(wén)中說(shuōΩ¥↑×)的(de)FIFO機(jī)制(zhì)⮀φ實際上(shàng)在硬件(jiàn)底層可(kě)以分(fēn)為(wèi∑♦®∏)兩種,一(yī)種是(shì)Tx FIFO,另外(wài)一(yī)種就(jiù)是±'✘♣(shì)Tx Queue,因為(wèi)兩種本身(shē♥φ✘n)都(dōu)是(shì)一(yī)種緩存空(kōng)間(jiāβ<​n)。

       ®δTx FIFO顧名思義就(jiù)是(shì)按照®↑β(zhào)“先進先出”的(de)方式來(lái)進行(xíng ¥)發送,忽略CAN ID優先級,一(yī)般為(wèi)了(lπ±α✔e)防止出現(xiàn)優先級反轉現(xi<‌÷ àn)象,不(bù)建議(yì)使用(yòng)FIFO模式。


       ←σ€≤;  Tx Queue

       Tx Queue 作(zuò)為(wσ↓èi)FIFO機(jī)制(zhì)的(de׶)一(yī)種,與Tx FIFO本身(shēn)有(yǒu)所不(bù)同的(de)是(shì)放(fàng)✔←置新的(de)Message發送請(qǐng)求時(shí)按照(zhà×☆o)先後順序來(lái)放(fàng)置,但(dàn)是(shì)發送時(₹  shí)則與Tx Buffer機(jī)制(α± zhì)一(yī)樣,按照(zhào)高(gāo)優先級優先發送©∏原則,即CAN ID越小(xiǎo),優先級越高(gāo),如(rú)果存在多(d♠≠₩uō)個(gè)同樣CAN ID的(de)報(b¥₩ào)文(wén)需要(yào)發送,那(nà)麽數(shù)字↑™&∏小(xiǎo)的(de)Buffer ID号先發送。

       除了( ↕le)上(shàng)述單一(yī)的(de)發送模式§©←☆之外(wài),絕大(dà)多(duō)數(shù)情況可(↔©<™kě)能(néng)存在上(shàng)述組合模∞‌式,組合模式下(xià)特别需要(yào)注意的(de)是(shì)外(wàiα‌)發報(bào)文(wén)優先級的(de)判定:

       ♠‌  

         Tx Buffer + Tx®π✔ FIFO模式

圖片

      如(rú)上(shàng)圖可(kě)知(zhī)♠×φ,每次發送優先級按照(zhào)如(rú)下(xià)方式進行(xíng)判定:

       -  ↔‌₩;取出Dedicated Tx Buffer中的(de)最小(xiǎo÷‌♣‌)CAN ID發送請(qǐng)求;

      - 取出Tx FIFO中最老(lǎo)的(de)CAN&→ π ID發送請(qǐng)求;

      - 比較上(shàng)述Tx Buffer與Tx FIφΩ γFO分(fēn)别取出的(de)CAN ID發送請(qǐn♥←φπg)求,兩者之間(jiān)的(de)CAN ID≈∏越小(xiǎo)的(de)發送請(qǐng)求優先發送。


       Tx Buffer + Tx Que≤™§ue模式

圖片

     如(rú)上(shàng)圖可(kě)知(zhī),每次發送優先級按照(zhà✔Ω≈o)如(rú)下(xià)方式進行(xíng)判定:

      - 取出Dedicated Tx Buffer中的(de)✔≠最小(xiǎo)CAN ID發送請(qǐng)求;

     - 取出Tx Que©↓÷βue中最小(xiǎo)CAN ID發送請(qǐng)求;

     - 比較上(shàng)述Tx Buffer與Tx¶®• Queue分(fēn)别取出的(de)CAN ID發送請(qǐn±δg)求,兩者之間(jiān)的(de)CAN ID越小(xiǎo)的(de)發✔σ送請(qǐng)求優先發送。


Rx Buffer

     Ω÷  Rx Buffer與Tx Buffer同理(lǐ),  一(yī∏ε)般都(dōu)是(shì)與特定的(de)CAN ID進← ελ行(xíng)綁定,一(yī)般該Rx Buffer均會(hu$§£ì)配置HOH的(de)CanObejctType類型為(wèi)Full CAα₽ N模式,如(rú)果此時(shí)老(lǎo)的(de)數(shù)據CPU還(hái)沒有(→δ♦yǒu)處理(lǐ)完,新的(de)數(shù)據将不(bù)會(huì)得(¥π÷λde)到(dào)處理(lǐ)。


Rx FIFO

      Rx FIΩ₩σFO典型的(de)就(jiù)是(shì)按照(zhào)“先進'↔♥δ先出”的(de)方式進行(xíng)CAN報(bào)≤ε↑文(wén)的(de)接收處理(lǐ),一(yī)般而言,Rx FIFO都(dōu)會(""huì)存在兩個(gè),一(yī)個(gè)是(shì)Rx FIFO0,另外♥<‌®(wài)一(yī)個(gè)是(shì)Rx FIFO1,這(zhè)個(♥$©"gè)根據實際情況進行(xíng)選擇。

      同時≈‌↓(shí)Rx FIFO如(rú)果存在Full的(de™​→)情況,那(nà)麽有(yǒu)如(rú)下(xià)兩種處理(lǐ)方式:

       - Blocking Mode:表示如(rú)果FIFO已經滿了(le), α隻有(yǒu)等到(dào)數(shù)據處理(lǐ)完成之後才可(↑☆kě)以放(fàng)入新的(de)數(shù)據,一(yī)般✘✘₹推薦使用(yòng)該方式;

      - Overwr•αite Mode:表示如(rú)果FIFO已經滿了(le),新來(lái)的(•≥₽de)數(shù)據可(kě)以覆蓋掉最老(lǎo<≈)的(de)數(shù)據,如(rú)果采用(yòng)OverWrite方式,需要(yà♠±"o)确保獲取數(shù)據時(shí)與接收數ε♣₽(shù)據時(shí)不(bù)會(huì)存在&÷™數(shù)據一(yī)緻性問(wèn)題。


轉自(zì)汽車(chē)電(diàn)子(zǐ)與軟件(jiàn)

北京德智尚車聯科技有限公司版權所有(yǒu) 京ICP證000000号   技(jì)術(shù)支持:網站(zhàn)建設