1 位置和作用
如圖1所示,CAN接口模塊(下文簡“CanIf”)位于底層CAN驅動(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅動程序服務接口。
圖1 CanIf的位置
CanIf提供了獨特的接口來管理不同CAN硬件,如CAN控制器和CAN收發(fā)器。同時,基于物理CAN通道相關的CAN狀態(tài)管理器模塊(CanSm)可以控制多個底層內(nèi)部和外部的CAN控制器或CAN收發(fā)器。
CanIf由與CAN硬件無關的任務組成,屬于ECU CAN通信驅動程序。CanIf滿足PduR和AUTOSAR COM棧上層通信模塊的控制流和數(shù)據(jù)流要求:發(fā)送請求處理、發(fā)送確認、接收指示、錯誤通知和CAN控制器的啟動/停止,從而喚醒或參與網(wǎng)絡。它的數(shù)據(jù)處理和通知API基于CAN L-SDU,用于控制和模式處理的API提供了CAN控制器相關的視圖。
圖2 CanIf模塊和其他模塊的關系
在發(fā)送請求時,CanIf用相應的參數(shù)完成L-PDU的傳輸,并通過對應CanDrv將CAN L-PDU轉發(fā)給CAN控制器。在接收端,CanIf將接收到的I-PDU作為I-SDU分發(fā)到上層模塊。接收L-SDU和上層之間的分配是靜態(tài)配置的。在傳輸確認時,CanIf負責向上層發(fā)送傳輸成功的信息。
CanIf提供對CAN驅動程序的通信抽象訪問和CAN收發(fā)驅動程序服務,用于對CAN網(wǎng)絡的控制和監(jiān)視。CAN接口將CAN狀態(tài)管理器的狀態(tài)向下轉發(fā)到底層CAN驅動程序,向上CAN接口模塊將CAN驅動程序或 CAN收發(fā)器驅動程序傳遞到相應的NM模塊。
2 上下層關系
上層
AUTOSAR BSW分層架構中,CanIf的上層可以是PduR,可以是CanNm,可以CanTp,可以CanSm,EcuM或復雜的驅動模塊CDD,普遍標定協(xié)議模塊XCP,全局時間同步模塊CanTSyn ,J1939傳輸層模塊 J1939Tp和J1939網(wǎng)絡管理模塊 J1939Nm。
CanIf使用的API由通知服務組成,它們將CAN相關數(shù)據(jù)傳輸?shù)侥繕松蠈印_@些服務的調(diào)用參數(shù)指向CanDrv中的緩沖信息,或者直接指向CAN硬件。另外,CanIf支持對總線鏡像模塊的調(diào)出,來報告接收和傳輸幀的內(nèi)容。EcuM會初始化CanIf。
下層
CanIf的下層模塊主要是CAN驅動程序CanDrv。由于CanIf在AUTOSAR BSW架構中的地位,它與CanDrv有著密切的關系。CanDrv只提供對CAN控制器的硬件抽象訪問,但是CanDrv會檢測和處理CAN控制器的事件,并將這些事件通知到CanIf。CanIf將CanSm的操作模式請求傳遞給相應的底層CAN控制器。
CanDrv提供了標準化的L-PDU,以確保CanIf的硬件獨立性。指向這個規(guī)范化的L-PDU的指針要么指向一個臨時緩沖區(qū),要么指向依賴于CAN硬件的CanDrv。CanDrv調(diào)用的回調(diào)服務是在CanIf中聲明和實現(xiàn)的。由CanIf調(diào)用的回調(diào)服務被聲明并放置在對應的上層通信服務層中,如PduR、CanNm、CanTp。
配置的CAN控制器的數(shù)量不一定是使用的CAN收發(fā)器的數(shù)量。如果多個不同類型的CAN控制器在同一個CAN網(wǎng)絡上運行,一個CAN收發(fā)器是足夠的,但是根據(jù)CAN控制器設備的類型,需要一個或兩個不同的CanDrv。
第二個可用的底層CAN設備驅動程序是CAN收發(fā)器CanTrcv。
每個CanTrcv對CAN收發(fā)器進行操作模式的控制。CanIf只是將幾個底層CanTrcv的API映射到一個惟一的API,因此,CanSm能夠觸發(fā)相應CAN收發(fā)模式的轉換。CanIf中不執(zhí)行屬于CanTrcv所控制的功能。
CanIf將所有底層CanTrcv的下列服務映射到一個惟一的接口:
- 唯一的CanTrcv模式請求和讀取服務來管理每個底層CAN收發(fā)設備的操作模式;
- 為CAN收發(fā)器讀取服務,喚醒原因支持;
- 模式請求服務啟用、禁用、清除喚醒事件狀態(tài)使用的每個CAN收發(fā)器(CanIf_SetTrcvMode)。
3 配置
CanIf的設計經(jīng)過優(yōu)化,以管理CAN協(xié)議的特定功能和用于底層CAN控制器的處理。
CanIf不需要重構就可以更改CAN配置。函數(shù)CanIf_Init()從配置容器和參數(shù)中獲取所需的CAN配置信息。
可以獲取到的信息包括:
- CAN控制器的數(shù)量。CAN控制器的數(shù)量對于發(fā)送和接收I-PDU的調(diào)度以及對可用CAN驅動程序狀態(tài)的控制是非常必要的,如下圖CanIfCtrlDrvCfg。
- 硬件對象句柄的數(shù)目。為了監(jiān)督發(fā)送請求,CAN接口需要知道HTH的數(shù)量以及每個HTH與相應的CAN控制器之間的分配,如下圖CanIfHthCanCtrlIdRef和CanIfHthIdSymRef。
- 通過每個硬件對象的過濾器所接收到的CAN ID的范圍。CAN接口使用HRH和L-PDU之間的固定分配,在相應的硬件對象中接收,進行搜索算法,見下圖CanIfHrhSoftwareFilter,CanIfHrhCanCtrlIdRef和 CanIfHrhIdSymRef。
CanIf需要所有已使用的上層通信服務層和L-SDU的信息來分配。為了在AUTOSAR COM棧中集成CanIf,必須在配置時設置以下信息:
- 傳遞上層模塊,并為每個傳輸L-SDU傳輸I-PDU,用于發(fā)送確認服務的調(diào)度,參見CanIfTxPduId。
- 接收上層模塊并為每個L-SDU接收I-PDU。用于接收指示期間的L-SDU調(diào)度,參見 CanIfRxPduId。
ECU連接到一個或多個CAN網(wǎng)絡,CanIf需要控制器和ECU的描述。因此,以下信息是從AUTOSAR系統(tǒng)配置的一部分CAN通信矩陣中獲取得到,見CanIfTxPduCfg和CanIfRxPduCfg:
- ECU物理通道上接收的所有I-PDU,用于軟件過濾和接收L-SDU調(diào)度;
- 所有I-SDU應由ECU上的每個物理通道傳遞,用于發(fā)送請求和發(fā)送L-PDU調(diào)度;
- L-PDU的屬性,包括ID和數(shù)據(jù)長度,用于軟件濾波,接收指示服務,數(shù)據(jù)長度檢查;
- 傳輸L-SDU的傳遞模塊,即PduR、CanNm和CanTp,用于發(fā)送確認服務;
- 接收L-SDU的接收器,即PduR、CanNm和CanTp,用于L-PDU的調(diào)度;
- L-PDU和L-SDU名稱,用于表示Rx/Tx數(shù)據(jù)緩沖區(qū)的地址;
4 功能服務
CanIf的服務可以分為以下幾個主要內(nèi)容:
- 初始化
- 發(fā)送請求服務
- 發(fā)送確認服務
- 接待指示服務
- 控制器模式控制服務
- PDU模式控制服務
CanIf的應用模式:
- 中斷模式:
CanDrv處理由CAN控制器觸發(fā)的中斷。CanIf在事件發(fā)生時得到觸發(fā),在這種情況下,在CanDrv中相應的ISR中調(diào)用相關的CanIf服務。
- 輪詢模式:
由SchM觸發(fā)CanDrv,并執(zhí)行后續(xù)進程。在這種情況下,必須在定義的時間間隔內(nèi),調(diào)用下列函數(shù):
- Can_MainFunction_Write
- Can_MainFunction_Read
- Can_MainFunction_BusOff
- Can_MainFunction_Wakeup
- Can_MainFunction_Transceiver
CanIf由CanDrv通知事件接收、發(fā)送、BusOff和超時),這些事件發(fā)生在一個CAN控制器中等同于中斷驅動操作。CanDrv更新屬于CAN控制器中發(fā)生事件的相應信息,如接收L-PDU。
- 混合模式:
中斷和輪詢驅動CanDrv。根據(jù)所使用的CAN控制器,該功能可以分為中斷驅動和輪詢驅動兩種操作模式。比如,輪詢驅動的FullCAN接收和中斷驅動的基本CAN接收,輪詢驅動的傳輸和中斷驅動的接收等。
AUTOSAR提供了獨特的接口,對三種類型的操作模式都有效。無論是在中斷、輪詢還是混合處理事件時,CanIf都以相同的方式工作,區(qū)別是調(diào)用內(nèi)容不同,還有通知中斷的方式:搶占式或協(xié)作式。所有服務都是按照配置執(zhí)行的。
初始化
EcuM調(diào)用CanIf的函數(shù)CanIf_Init()來初始化整個CanIf。在初始化過程,將對所有全局變量和數(shù)據(jù)結構初始化,包括標示和緩沖區(qū)。EcuM分別通過調(diào)用相應的初始化服務來執(zhí)行CanDrv和CanTrcv的初始化。
在初始化完成后,CAN控制器保持在啟動復位后的停止模式。在這種模式下,CanIf和CanDrv既不能發(fā)送也不能接收L-PDU。
如果在運行期間需要重新初始化整個CAN模塊,EcuM會調(diào)用CanSm,通過調(diào)用CAN接口模塊的API服務CanIf_SetControllerMode()來啟動CAN控制器所需的狀態(tài)轉換,具體過程后續(xù)介紹CAN狀態(tài)管理時會展開。CanIf將來自CanSm的調(diào)用映射到Candrv的調(diào)用上。
-
收發(fā)器
+關注
關注
10文章
3454瀏覽量
106250 -
CAN
+關注
關注
57文章
2770瀏覽量
464394 -
路由器
+關注
關注
22文章
3745瀏覽量
114490 -
PDU
+關注
關注
0文章
94瀏覽量
17033
發(fā)布評論請先 登錄
相關推薦
AUTOSAR MCAL MCU模塊的相關資料分享
AUTOSAR的相關資料推薦
AUTOSAR_MCAL_CAN_IM.pdf提示找不到 config/CanIf.xdm怎么解決?
AUTOSAR通信之CanIf模塊簡介2
![<b class='flag-5'>AUTOSAR</b><b class='flag-5'>通信</b><b class='flag-5'>之</b><b class='flag-5'>CanIf</b><b class='flag-5'>模塊</b><b class='flag-5'>簡介</b>2](https://file.elecfans.com/web2/M00/90/DC/pYYBAGPp2ACAG_qfAAEC7bYxm3A803.jpg)
AUTOSAR通信之CanIf模塊簡介3
![<b class='flag-5'>AUTOSAR</b><b class='flag-5'>通信</b><b class='flag-5'>之</b><b class='flag-5'>CanIf</b><b class='flag-5'>模塊</b><b class='flag-5'>簡介</b>3](https://file.elecfans.com/web2/M00/90/DC/pYYBAGPp2ACALlivAAEA_avR2lM454.jpg)
Autosar之BSWM配置簡介
![<b class='flag-5'>Autosar</b><b class='flag-5'>之</b>BSWM配置<b class='flag-5'>簡介</b>](https://file1.elecfans.com/web2/M00/88/B7/wKgaomRwJFWAT6A5AADA51N9cNU419.jpg)
AUTOSAR中通信協(xié)議棧配置詳解
![<b class='flag-5'>AUTOSAR</b>中<b class='flag-5'>通信</b>協(xié)議棧配置詳解](https://file1.elecfans.com/web2/M00/A5/78/wKgaomULpOaADT-JAABBj_CzukI661.png)
AUTOSAR軟件開發(fā)流程簡介
![<b class='flag-5'>AUTOSAR</b>軟件開發(fā)流程<b class='flag-5'>簡介</b>](https://file1.elecfans.com/web2/M00/AC/8A/wKgZomU7amOAWDEoAAK_ouFbbDs400.jpg)
評論