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