0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CAN驅(qū)動(dòng)Mailbox配置過程中有哪些關(guān)鍵配置參數(shù)值得我們注意?

汽車ECU開發(fā) ? 來源:ADAS與ECU之吾見 ? 2023-09-20 09:19 ? 次閱讀

正文

CAN驅(qū)動(dòng)作為一個(gè)在日常開發(fā)項(xiàng)目中經(jīng)常接觸到的重要驅(qū)動(dòng)模塊,AUTOSAR組織對(duì)CAN Driver有著十分全面而準(zhǔn)確的實(shí)現(xiàn)要求與相關(guān)關(guān)鍵詞參數(shù)的定義。

經(jīng)常發(fā)現(xiàn)大家在開發(fā)過程中總是會(huì)忽略或者混淆這些模塊的關(guān)鍵詞的定義,導(dǎo)致最終雙方在溝通過程中存在很多的誤解,在開發(fā)過程中也會(huì)存在諸多不必要的失誤與bug的產(chǎn)生,因此本文小T將帶領(lǐng)大家一起來了解AUTOSAR框架的CAN Driver一些十分重要的關(guān)鍵詞解釋以及難以理解的基本概念,助力我們?nèi)粘9ぷ髦械腃AN驅(qū)動(dòng)開發(fā)。

CAN 驅(qū)動(dòng)關(guān)鍵詞定義

小T通過學(xué)習(xí)AUTOSAR CAN Driver標(biāo)準(zhǔn)文檔,并結(jié)合自身實(shí)戰(zhàn)經(jīng)驗(yàn),將CAN Driver模塊的關(guān)鍵詞定義整理如下表所示:

wKgaomUKSDKAZK0BAAELrAv-Xoc043.jpg

CAN 驅(qū)動(dòng)關(guān)鍵詞定義解釋#### CAN 驅(qū)動(dòng)Mailbox關(guān)鍵配置參數(shù)

在底層MCAL CAN Driver配置過程中總是會(huì)存在許多容易混淆的關(guān)鍵配置參數(shù),該類參數(shù)如果配置有誤,有些時(shí)候就會(huì)出現(xiàn)讓人費(fèi)解的問題與bug,因此為了能夠減小這類問題的出現(xiàn),小T結(jié)合自身實(shí)戰(zhàn)經(jīng)驗(yàn)一起來學(xué)習(xí)下CAN驅(qū)動(dòng)中關(guān)鍵配置參數(shù)的定義與相關(guān)注意事項(xiàng)。

Hardware Object

如上述表格中所述,一個(gè)Hardware Object就是一個(gè)CAN L-PDU的buffer,用來存儲(chǔ)僅一個(gè)CAN ID Message,你將可以將其理解為就是我們常說的Mailbox,該Mailbox就是CAN 控制器硬件上的一個(gè)物理buffer空間,用來存儲(chǔ)用于發(fā)送或者接收的一個(gè)CAN ID Message,該CAN ID Message自然就是包含CAN ID,DLC, Data三個(gè)部分

HOH,HTH,HRH三者區(qū)別與聯(lián)系

為了更好地理解HOH,HTH,HRH三者的區(qū)別,小T將三者的區(qū)別與聯(lián)系整理如下表所示:

wKgZomUKSDKAHE3WAABiScji71E239.jpg

HTH,HRH,HOH三者區(qū)別與聯(lián)系CanHwObjectCount

該參數(shù)按照AUTOSAR官方文檔中的定義,表示的就是Hardware Object中的數(shù)目,不過需要注意的是該參數(shù)面向的對(duì)象是HOH,即HRH或者HTH。

該參數(shù)表示是否為該HOH配置了FIFO機(jī)制,如果數(shù)目為1,則并沒有FIFO進(jìn)行緩存數(shù)據(jù),如果大于1,那么就是為該HOH配置了FIFO的數(shù)據(jù)緩存機(jī)制,這種緩存機(jī)制對(duì)于防止CAN接收或者發(fā)送的重要報(bào)文丟失至關(guān)重要。

如下圖所示便展示了CanHwObjectCount在HOH中的配置:

wKgZomUKSDKALjv4AAE9uUVe-GA333.jpg

1.CanHwObjectCount在HOH中的發(fā)送配置

wKgaomUKSDKAJb2fAAE4pQKu1jY039.jpg

2.CanHwObjectCount在HOH中的接收配置

如上圖1所示,可以知道該HOH為發(fā)送類型的HOH,因此就直接可以理解為HTH,那么該HTH中定義了參數(shù)CanHwObjectCount的值為1,表示不存在FIFO機(jī)制,僅是一個(gè)唯一的buffer,如果數(shù)據(jù)發(fā)送或者接收比較頻繁,意味著新數(shù)據(jù)可能來不及發(fā)送;

如上圖2所示,可以知道該HOH為接收類型的HOH,因此就直接可以理解為HRH,那么該HRH中定義了參數(shù)CanHwObjectCount的值為2,表示存在深度為2的FIFO機(jī)制,如果數(shù)據(jù)發(fā)送或者接收比較頻繁,至少存在深度為2的FIFO緩存空間來防止重要數(shù)據(jù)的丟失。

Full CAN與Basic CAN

在MCAL CAN Driver中的Full CAN與Basic CAN是用來修飾HOH的類型參數(shù),該參數(shù)可以通過CanObejctType進(jìn)行定義。

Full CAN:一般表示僅存在1個(gè)的Hardware Object與之對(duì)應(yīng),且該Full CAN類型的Hardware Object與特定的CAN ID Message綁定;

Basic CAN:一般表示存在1個(gè)或者多個(gè)的Hardware Object與之對(duì)應(yīng),且該Basic CAN類型的Hardware Object與非特定的CAN ID Message或者一定范圍內(nèi)的CAN ID Message綁定;

注意事項(xiàng):

對(duì)于Basic Can類型的HOH一般建議通過配置硬件過濾器來實(shí)現(xiàn)底層無關(guān)CAN Message的數(shù)據(jù)接收或者特定范圍內(nèi)的報(bào)文接收,減少不必要的硬件中斷,也就從某種程度上降低了CPU負(fù)載;

當(dāng)硬件資源較為充足且無需過多考慮新數(shù)據(jù)可能覆蓋老數(shù)據(jù)的場(chǎng)景,一般推薦將HOH配置成FULL CAN類型。

在HOH的配置過程中,一般情況下均需要先將FULL CAN類型的HOH統(tǒng)一配置在前,Basic CAN類型的HOH配置在后,否則容易造成生成的代碼中Maibox使用錯(cuò)亂的情況。

推薦配置方案

小T結(jié)合實(shí)戰(zhàn)經(jīng)驗(yàn),將軟件開發(fā)過程中常見的四類報(bào)文類型:應(yīng)用報(bào)文,網(wǎng)絡(luò)管理報(bào)文,診斷報(bào)文,Xcp報(bào)文的發(fā)送與接收的mailbox配置方案總結(jié)如下表所示:

wKgaomUKSDKAVKT7AACOrMSkMMA943.jpg

CAN Mailbox的四類報(bào)文推薦配置方案推薦配置方案總結(jié)如下:

診斷報(bào)文由于屬于重要報(bào)文,丟失與發(fā)送均不允許丟失且存在嚴(yán)格的時(shí)序關(guān)系,因此發(fā)送與接收均推薦Basic CAN+FIFO 來設(shè)置;

Xcp報(bào)文發(fā)送與接收都是特定ID的報(bào)文,因此發(fā)送與接收均推薦Full CAN+Buffer來設(shè)置;

應(yīng)用報(bào)文在mailbox硬件充足的前提下,發(fā)送與接收優(yōu)先采用Full CAN+Buffer來設(shè)置,如果硬件資源不夠的話,那么推薦采用Basic CAN+FIFO來配置;

網(wǎng)絡(luò)管理報(bào)文接收一般是一定范圍的報(bào)文,因此接收推薦采用Basic CAN+Buffer來配置,發(fā)送由于ID確定,因此推薦采用Full Can+Buffer來設(shè)置;

所有報(bào)文的發(fā)送與接收配置完成之后,一定要確保所有配置HOH中的CanHwObjectCount加起來的mailbox發(fā)送與接收數(shù)目分別不能超過芯片手冊(cè)規(guī)定的發(fā)送mailbox與接收mailbox硬件資源總和;

CAN 驅(qū)動(dòng)硬件Buffer類型

了解了上述CAN驅(qū)動(dòng)推薦方案之后,我們接下來需要進(jìn)一步探究下對(duì)于can controller硬件資源內(nèi)部對(duì)于用于存儲(chǔ)CAN L-PDU的buffer是如何定義的?

一般來講,現(xiàn)在市面上主流的CAN Controller對(duì)于其硬件資源按照發(fā)送與接收可以分為如下幾種類型Buffer:

發(fā)送硬件Buffer類型:Tx Buffer,Tx FIFO,Tx Queue;

接收硬件Buffer類型Rx Buffer,Rx FIFO;

接下來將針對(duì)每種硬件Buffer類型分別進(jìn)行講解:

Tx Buffer

Tx Buffer又名Dedicated Tx Buffer,該Buffer會(huì)與特定的CAN ID進(jìn)行綁定,發(fā)送優(yōu)先級(jí)是完全通過CAN ID越小,優(yōu)先級(jí)越高,高優(yōu)先級(jí)優(yōu)先發(fā)送;

一般該Tx Buffer會(huì)配置HOH的CanObejctType類型為Full CAN模式。

Tx FIFO

上文中說的FIFO機(jī)制實(shí)際上在硬件底層可以分為兩種,一種是Tx FIFO,另外一種就是Tx Queue,因?yàn)閮煞N本身都是一種緩存空間。

Tx FIFO顧名思義就是按照“先進(jìn)先出”的方式來進(jìn)行發(fā)送,忽略CAN ID優(yōu)先級(jí),一般為了防止出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象,不建議使用FIFO模式。

Tx Queue

Tx Queue 作為FIFO機(jī)制的一種,與Tx FIFO本身有所不同的是放置新的Message發(fā)送請(qǐng)求時(shí)按照先后順序來放置,但是發(fā)送時(shí)則與Tx Buffer機(jī)制一樣,按照高優(yōu)先級(jí)優(yōu)先發(fā)送原則,即CAN ID越小,優(yōu)先級(jí)越高,如果存在多個(gè)同樣CAN ID的報(bào)文需要發(fā)送,那么數(shù)字小的Buffer ID號(hào)先發(fā)送。

除了上述單一的發(fā)送模式之外,絕大多數(shù)情況可能存在上述組合模式,組合模式下特別需要注意的是外發(fā)報(bào)文優(yōu)先級(jí)的判定:

Tx Buffer + Tx FIFO模式

wKgaomUKSDKAM-8gAABkggmFit4970.jpg

如上圖可知,每次發(fā)送優(yōu)先級(jí)按照如下方式進(jìn)行判定:

取出Dedicated Tx Buffer中的最小CAN ID發(fā)送請(qǐng)求;

取出Tx FIFO中最老的CAN ID發(fā)送請(qǐng)求;

比較上述Tx Buffer與Tx FIFO分別取出的CAN ID發(fā)送請(qǐng)求,兩者之間的CAN ID越小的發(fā)送請(qǐng)求優(yōu)先發(fā)送。

Tx Buffer + Tx Queue模式

wKgZomUKSDKAdZUdAABhF7c-3Ss911.jpg

如上圖可知,每次發(fā)送優(yōu)先級(jí)按照如下方式進(jìn)行判定:

取出Dedicated Tx Buffer中的最小CAN ID發(fā)送請(qǐng)求;

取出Tx Queue中最小CAN ID發(fā)送請(qǐng)求;

比較上述Tx Buffer與Tx Queue分別取出的CAN ID發(fā)送請(qǐng)求,兩者之間的CAN ID越小的發(fā)送請(qǐng)求優(yōu)先發(fā)送。

Rx Buffer

Rx Buffer與Tx Buffer同理, 一般都是與特定的CAN ID進(jìn)行綁定,一般該Rx Buffer均會(huì)配置HOH的CanObejctType類型為Full CAN模式,如果此時(shí)老的數(shù)據(jù)CPU還沒有處理完,新的數(shù)據(jù)將不會(huì)得到處理。

Rx FIFO

Rx FIFO典型的就是按照“先進(jìn)先出”的方式進(jìn)行CAN報(bào)文的接收處理,一般而言,Rx FIFO都會(huì)存在兩個(gè),一個(gè)是Rx FIFO0,另外一個(gè)是Rx FIFO1,這個(gè)根據(jù)實(shí)際情況進(jìn)行選擇。

同時(shí)Rx FIFO如果存在Full的情況,那么有如下兩種處理方式:

Blocking Mode:表示如果FIFO已經(jīng)滿了,只有等到數(shù)據(jù)處理完成之后才可以放入新的數(shù)據(jù),一般推薦使用該方式;

Overwrite Mode:表示如果FIFO已經(jīng)滿了,新來的數(shù)據(jù)可以覆蓋掉最老的數(shù)據(jù),如果采用OverWrite方式,需要確保獲取數(shù)據(jù)時(shí)與接收數(shù)據(jù)時(shí)不會(huì)存在數(shù)據(jù)一致性問題;






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16129

    瀏覽量

    177137
  • 接收機(jī)
    +關(guān)注

    關(guān)注

    8

    文章

    1179

    瀏覽量

    53380
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    349

    瀏覽量

    21447
  • CAN驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    6866
  • FIFO存儲(chǔ)
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    5955

原文標(biāo)題:CAN驅(qū)動(dòng)Mailbox配置技術(shù)要點(diǎn)全解析

文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于DWC2的USB驅(qū)動(dòng)開發(fā)-0x07 DWC2 USB2.0 IP 配置參數(shù)

    本問轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 微信公眾平臺(tái) (qq.com) 前言 本IP是一個(gè)靈活的可配置的IP,有很多參數(shù)可以配置以滿足不同的需求,這里的配置參數(shù)值
    的頭像 發(fā)表于 05-17 09:49 ?2141次閱讀

    為什么CAN通信速率無法到達(dá)配置值?CAN配置時(shí)有什么注意點(diǎn)?

    在工程里面配置CAN通信速率為500Kbit/s,但是實(shí)際測(cè)試下來只能勉強(qiáng)達(dá)到125Kbit/s的水平,這個(gè)測(cè)試結(jié)果差距太大了,大家有測(cè)試過配置后的實(shí)際CAN通信速率嗎?還是
    發(fā)表于 02-23 06:41

    FPGA開發(fā)過程中配置全局時(shí)鐘需要注意哪些問題

    在FPGA開發(fā)過程中,配置全局時(shí)鐘是一個(gè)至關(guān)重要的步驟,它直接影響到整個(gè)系統(tǒng)的時(shí)序和性能。以下是配置全局時(shí)鐘時(shí)需要注意的一些關(guān)鍵問題: 時(shí)鐘
    發(fā)表于 04-28 09:43

    為什么配置文件中的參數(shù)值突然全部變成0

    程序中需要用到很多參數(shù),每次調(diào)用前從配置文件(.ini)讀取參數(shù),需要修改這些參數(shù)時(shí),再用寫.ini文件函數(shù)寫入。程序大部分時(shí)間沒有問題,有時(shí)會(huì)突然出現(xiàn)
    發(fā)表于 11-29 09:53

    IGBT封裝過程中有哪些關(guān)鍵點(diǎn)?

    IGBT封裝過程中有哪些關(guān)鍵點(diǎn)?
    發(fā)表于 08-26 16:20

    如何配置CAN和RFID的驅(qū)動(dòng)

      本文檔介紹如何配置CAN和RFID的驅(qū)動(dòng)?! 〗貓D界面使用的是4418開發(fā)板的menuconfig界面,4412和6818的配置方法和路徑也是一模一樣的。由于在這三種開發(fā)板中,
    發(fā)表于 12-30 06:15

    在使用伺服電機(jī)的過程中有哪些事項(xiàng)需要注意?

    在使用伺服電機(jī)的過程中有哪些注意事項(xiàng)?
    發(fā)表于 06-28 08:48

    對(duì)STM32 CAN進(jìn)行配置

    STM32 CAN 通信(一)STM32 CAN 配置STM32 CAN 控制器需要配置參數(shù)
    發(fā)表于 08-19 07:32

    電機(jī)參數(shù)在電機(jī)運(yùn)行的過程中有何影響

    電機(jī)參數(shù)在電機(jī)運(yùn)行的過程中有何影響?
    發(fā)表于 10-11 06:42

    請(qǐng)問CAN通信參數(shù)具體該怎么配置

    在做一個(gè)項(xiàng)目是CAN通信及基于CAN通信的應(yīng)用,Linux使用Socket CAN機(jī)制 ,請(qǐng)問CAN 通信參數(shù)
    發(fā)表于 01-10 07:24

    請(qǐng)問CAN通信參數(shù)具體該怎么配置

    在做一個(gè)項(xiàng)目是CAN通信及基于CAN通信的應(yīng)用,Linux使用Socket CAN機(jī)制 ,請(qǐng)問CAN 通信參數(shù)
    發(fā)表于 01-13 08:03

    PCB在設(shè)計(jì)過程中需要注意的哪些坑

     PCB設(shè)計(jì)是一項(xiàng)非常精細(xì)的工作,在設(shè)計(jì)過程中有很多的細(xì)節(jié)需要大家注意,否則,一不小心就會(huì)掉“坑”里。
    的頭像 發(fā)表于 03-23 11:52 ?2210次閱讀

    理解i.MX RT中FlexSPI外設(shè)lookupTable里配置訪問行列混合尋址Memory的參數(shù)值

    理解i.MX RT中FlexSPI外設(shè)lookupTable里配置訪問行列混合尋址Memory的參數(shù)值
    的頭像 發(fā)表于 10-30 17:23 ?474次閱讀
    理解i.MX RT中FlexSPI外設(shè)lookupTable里<b class='flag-5'>配置</b>訪問行列混合尋址Memory的<b class='flag-5'>參數(shù)值</b>

    使用FSP配置RA的CAN模塊(上)

    使用FSP配置RA的CAN模塊
    的頭像 發(fā)表于 08-05 08:08 ?548次閱讀
    使用FSP<b class='flag-5'>配置</b>RA的<b class='flag-5'>CAN</b>模塊(上)

    使用FSP配置RA的CAN模塊(下)

    使用FSP配置RA的CAN模塊
    的頭像 發(fā)表于 08-05 08:08 ?424次閱讀
    使用FSP<b class='flag-5'>配置</b>RA的<b class='flag-5'>CAN</b>模塊(下)