大家好,我是嵌入式老林,從事嵌入式軟件開(kāi)發(fā)多年,今天分享的內(nèi)容是MCAL的CAN模塊配置介紹,希望能對(duì)你有所幫助。
一、CAN模塊配置介紹
之前也分享過(guò)Autosar的基礎(chǔ)知識(shí),不清楚且有興趣的同學(xué)可參考之前的文章。
在做車載相關(guān)的項(xiàng)目中,一般都會(huì)用CAN(或CAN FD)通信,當(dāng)然也有Lin,F(xiàn)lexRay,更高級(jí)的甚至用以太網(wǎng)。初學(xué)者對(duì)這幾個(gè)常用的車載總線不太清楚的,可以移步之前的文章。
先簡(jiǎn)單介紹一下Autosar中CAN是如何通信的,數(shù)據(jù)流,Autosar如何配置。
先來(lái)回顧一下Autosar的架構(gòu):
普通CAN報(bào)文接收流程:
CAN------CANIF------PDUR------COM
發(fā)送流程就是順序反過(guò)來(lái),從上到下
COM------PDUR------CANIF------CAN
上面這些是屬于Autosar里面的BSW模塊,除了這些需要配置,MCAL也需要進(jìn)行配置才行,也就是非Autosar架構(gòu)中的底層驅(qū)動(dòng),類似于SDK。
本文也主要分享MCAL的CAN配置需要配置哪些東西
二、CAN控制器的配置
2.1 General配置
CanBusoffProcessing :BusOff的處理方式,中斷(INTERRUPT)或者輪詢(POLLING)
CanControllerActivation :是否激活這路CAN
CanControllerId :節(jié)點(diǎn)號(hào),從0開(kāi)始增加,必須連續(xù)。
CanRxProcessing :接收到報(bào)文后的處理方式,中斷(INTERRUPT)或者輪詢(POLLING)
CanTxProcessing :成功發(fā)送報(bào)文后的處理方式。中斷(INTERRUPT)或者輪詢(POLLING)。
CanWakeupFunctionalityAPI :Can喚醒的一些API函數(shù)是否可用,只有當(dāng)支持CAN喚醒時(shí),這個(gè)選項(xiàng)才可以勾選。
CanWakeupProcessing :CAN喚醒的處理方式,中斷(INTERRUPT)或者輪詢(POLLING)
CanWakeupSupport :是否支持CAN喚醒
CanControllerDefaultBaudrate :波特率的配置
CanPeripheralBusClockRef :CAN時(shí)鐘源選擇
2.2 波特率配置
配置界面:
標(biāo)準(zhǔn)CAN的波特率配置:
CanControllerProSeg:傳播段
CanControllerSeg1:相位緩沖段1
CanControllerSeg1:相位緩沖段2
CanControllerSyncJumpWidth:同步跳轉(zhuǎn)寬度
這幾個(gè)參數(shù)的含義的話,之前調(diào)試過(guò)CAN驅(qū)動(dòng)的應(yīng)該就知道了,這里簡(jiǎn)單介紹一下,就是CAN波特率的計(jì)算方法:
波特率 =(CAN時(shí)鐘 / 波特率分頻系數(shù)) / 位時(shí)間
而 位時(shí)間 = tq + tBS1 + tBS2
CAN總線里通過(guò)對(duì)CAN 節(jié)點(diǎn)里的CANBTR寄存器的控制,來(lái)實(shí)現(xiàn)不同波特率的通信。
1)同步段 :一個(gè)位的起始位置,CAN-bus規(guī)定跳變沿為同步信號(hào),
2)傳播段 :發(fā)送節(jié)點(diǎn)發(fā)送一個(gè)位跟接收節(jié)點(diǎn)接收到這個(gè)位之間存在網(wǎng)絡(luò)傳播延遲,傳播段則是為了補(bǔ)償這段傳播延遲。
3)相位緩沖段1和相位緩沖段2 :由于采樣點(diǎn)位置在相位緩沖段1跟相位緩沖段2之間,通過(guò)設(shè)置相位緩沖段1和相位緩沖段2的值,可以調(diào)整采樣點(diǎn)位置,保證每個(gè)位采樣點(diǎn)一致。緩沖段的長(zhǎng)度調(diào)節(jié)范圍則是由
4)同步跳轉(zhuǎn)寬度(SJW) :決定了緩沖段的長(zhǎng)度調(diào)節(jié)范圍。
CAN FD的波特率配置
根據(jù)實(shí)際項(xiàng)目需求配置對(duì)應(yīng)的波特率即可
CanControllerTxBitRateSwitch:CAN波特率是否可變
三、CanHardwareObject配置
3.1 General配置
配置界面如下:
1)配置這個(gè)HOH的類型是basic CAN (多個(gè)Pdu對(duì)應(yīng)一個(gè)HardwareObject)還是Full CAN(一個(gè)Pdu對(duì)應(yīng)一個(gè)HardwareObject)
2)配置CAN 報(bào)文是標(biāo)準(zhǔn)幀還是擴(kuò)展幀。
3)配置HOH的ID號(hào),從0開(kāi)始
4)配置這個(gè)HOH是用來(lái)接收還是發(fā)送的
5)配置這個(gè)HOH屬于哪一個(gè)CAN通道
3.2 Filter配置
要接收的CANID都需要在filter中配置,CAN標(biāo)準(zhǔn)幀在StandardFilter,擴(kuò)展幀的話是在ExtendFilter中添加
每一個(gè)item就是一個(gè)filter,每個(gè)filter里面可以配置ID0,ID1,filter type。對(duì)于每個(gè)接收?qǐng)?bào)文的HOH來(lái)說(shuō),只有通過(guò)了這個(gè)filter,接收的CAN報(bào)文就會(huì)被分配到這個(gè)HOH,再往上傳遞到CANIF
Filter的類型有:
a) CAN_FILTER_ELEMENT_DISABLED :不使能filter
b) CAN_RANGE_FILTER :ID0 =< 接收ID <= ID1 則通過(guò),也就是在ID0和ID1的范圍內(nèi)都能接收到
c) CAN_CLASSIC_BIT_MASK_FILTER :接收ID & ID1 == ID0 則通過(guò),也就是這種類型的過(guò)濾,如果ID1配置為0X7FF,則只能接收到當(dāng)前配置的CAN ID。
d) CAN_DUAL_ID_FILTER :ID0和ID1都通過(guò),即只能接收ID0和ID1
ID0和ID1的配置是取決于filter type的,下面以CAN_CLASSIC_BIT_MASK_FILTER類型為例介紹ID0和ID1的配置。
原理:能通過(guò)的報(bào)文ID數(shù)量完全取決于屏蔽碼(掩碼),設(shè)得寬,則可以通過(guò)的多(所有位為0,則任意報(bào)文ID都可以通過(guò)),設(shè)得窄,則通過(guò)的少(所有位設(shè)為1,則只有一個(gè)能通過(guò))
至此,MCAL的CAN模塊就配置完成了,配置完成后,點(diǎn)擊保存,然后再右鍵選擇Verify Project,看看是否有報(bào)錯(cuò),沒(méi)報(bào)錯(cuò)就點(diǎn)擊Generate Project,生成配置代碼,然后同步到編譯整個(gè)項(xiàng)目的工程中
-
控制器
+關(guān)注
關(guān)注
112文章
16367瀏覽量
178112 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19126瀏覽量
305296 -
CAN模塊
+關(guān)注
關(guān)注
0文章
24瀏覽量
8748 -
車載總線
+關(guān)注
關(guān)注
0文章
4瀏覽量
1219
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論