Autosar Dcm模块之Vector Configurator Pro配置(DSP子模块)
背景
?
之前簡單介紹了Autosar Dcm模塊,接下來我們直接切入主題,如何通過Vector Configurator Pro工具配置DSD子模塊,并實現客戶的需求。
DSP子模塊配置
1.DSP子模塊整體配置
Dsp配置可以說是Dcm的核心,大部分的需求開發都是在這個子模塊中進行。
DcmDspDidLookUpFilterEnabled:是否支持外部DID查找過濾。若支持,Dcm可以調用應用函數。
DcmDspDDDidCheckConditionReadPerSourceDid:Dcm在接收到0xF200-0xF3FF范圍內的0x22和0x2A服務時會調用“CheckConditionRead”接口。
DcmDspDDDidCheckPerSourceDid:Dcm在接收到0xF200-0xF3FF范圍內的0x22和0x2A服務時會執行DIDs和內存塊檢查等預條件檢查。
DcmDspDDDidClearOnStateChange:Dcm在改變會話/安全權限改變時清除DID狀態,條件不滿足時不允許訪問。
DcmDspMaxDidToRead: 在單個22服務中允許讀取的最大DID數量。若讀取的DID數量大于該值,發送否定響應。
DcmDspMaxPeriodicDidToRead: 在單個2A服務中允許讀取的最大DID數量。若讀取的DID數量大于該值,發送否定響應。
DcmDspPowerDownTime:指定在下點過程中待機的最短時間。若該值存在,在11 04服務肯定響應時回復該值;反之,在11 04服務肯定響應時回復0xFF。
DcmDspReadDIDReportsNODIByte:在讀取OBD DID(0xF801-0xF8FF)時報告OBD VID的NODI字節。若該值存在,Dcm將完全鏡像 OBD2 VID數據;反之,Dcm將省略NODI字節
DcmDspReadPagedDataPageSize:讀操作時每頁Buffer的大小
DcmDspRidLookUpFilterEnabled:是否支持外部RID查找過濾。若支持,Dcm可以調用應用函數
DcmDspRteImplicitComEnabled:建立一個專門的Buffer,用來拷貝RTE的數據。
2. DcmDspDataInfos
這個容器包含一個Data的配置
DcmDspDataFixedLength:如果設置為TRUE,Dcm 將直接從配置中使用數據長度參數值。一般都會勾上。
DcmDspDataScalingInfoSize:數據伸縮信息的長度。Dcm接收到0x24請求時輸出該值。
3. DcmDspDatas
這個容器包含屬于DID的Data的配置。
DcmDspDataBlockIdRef:DCM直接訪問Nvm block。
DcmDspDataConditionCheckReadFnc:Did讀取檢測條件的函數名。若不為空,DCM接收到Did的讀取會調用該函數;反之則不檢測。
DcmDspDataConditionCheckReadFncUsed:決定是否使用條件檢測
DcmDspDataEcuSignal:指定 Dcm 對某個 ECU 信號的控制訪問的函數名稱
DcmDspDataEndianness:定義DID的字節序
DcmDspDataFreezeCurrentStateFnc:指定Dcm凍結當前IO狀態的函數名。一般用于0x2F服務(IOControlByDataIdentifier)。
DcmDspDataGetScalingInfoFnc:指定Dcm讀取縮放信息的函數名。一般用于0x24服務(ReadScalingDataByIdentifier)。
DcmDspDataInfoRef:對DcmDspDataInfo的引用
DcmDspDataReadDataLengthFnc:指定Dcm讀取DID數據的長度的函數名
DcmDspDataReadEcuSignal:指定Dcm讀取某個ECU 信號的函數名
DcmDspDataReadFnc:指定Dcm讀取數據內容的函數名
DcmDspDataResetToDefaultFnc:指定Dcm復位當前IO默認狀態的函數名
DcmDspDataReturnControlToEcuFnc:指定Dcm返回IO狀態給APP的函數名
DcmDspDataShortTermAdjustmentFnc:指定Dcm調整IO狀態的函數名
DcmDspDataSize:DID數據的長度。若數據長度可變,該參數就是最大的數據長度
DcmDspDataSystemTemplateDiagnosticDataElementRef:定義被DcmDspData引用的診斷數據
DcmDspDataType:指定數據類型
DcmDspDataUsePort:訪問數據的接口類型。
'USE_DATA_ASYNCH_CLIENT_SERVER' or 'USE_DATA_SYNCH_CLIENT_SERVER':Dcm調用RTE接口;
'USE_DATA_SYNCH_FNC' or 'USE_DATA_ASYNCH_FNC':Dcm會調用專用的接口(自己實現的接口)
DcmDspDataWriteFnc:指定Dcm寫數據內容的函數名
4.DcmDspDidInfos
這個容器包含DID的Info的配置,是配置DID的會話、解鎖等級。
DcmDspDidReadModeRuleRef:配置DID讀取模式規則。
DcmDspDidReadSecurityLevelRef: 配置DID讀寫的安全解鎖等級。一個服務允許多個引用。
DcmDspDidReadSeesionLevelRef: 配置DID讀寫的會話等級。一個服務允許多個引用。
5.DcmDspDids
這個容器包含DID的配置
DcmDspDidIdentifier:配置DID的ID號。
DcmDspDidInfoRef:指定DID的配置信息
DcmDspDidRef:
DcmDspDidRoeQueueEnabled:
DcmDspDidSystemTemplateDiagnosticDataIdentifierRef:
DcmDspDidUsePort:DID 的信號組合成一個 struct 數據類型。
USE_DATA_ELEMENT_SPECIFIC_INTERFACES:根據DspData配置,創建單獨的Port。
USE_ATOMIC_SENDER_RECEIVER_INTERFACE:
USE_ATOMIC_NV_DATA_INTERFACE:
DcmDspDidUsed: 配置是否激活DID的使用,項目開發階段可以使用,不用重復添加刪除DID。
以上在配置Diagnostic->Diagnostic Data Identifiers時都會自動對應生成,所以在配置一個DID的時候關注最外層的配置界面即可。
6.DcmDspRoutineInfos
這個容器包含RID的Info的配置,與DID配置不同,配置RID例程沒有最外層的配置界面,只能在Basic Editor中進行配置。
DcmDspRoutineAuthorization:例程權限設置,設置規則、安全訪問等級、會話權限。
DcmDspStartRoutineIn:啟動例程的參數輸入容器
DcmDspStartRoutineOut:啟動例程的參數輸出容器
DcmDspRoutineStopIn:結束例程的參數輸入容器
DcmDspRoutineStopOut:結束例程的參數輸出容器
DcmDspRoutineRequestRspIn:請求例程結果的參數輸入容器
DcmDspRoutineRequestRspOut:請求例程結果的參數輸出容器
DcmDspRoutineSignalEndianness:例程信號的字節序
DcmDspRoutineSignalLength:例程信號數據的長度(bit)
DcmDspRoutineSignalPos:例程信號數據的位置(偏移量)(bit)
DcmDspRoutineSignalType:例程信號數據的類型
7.DcmDspRoutines
這個容器包含RID的配置
DcmDspRequestResultsRoutineFnc:指定例程請求結果的函數名。若不為空,Dcm會調用該接口,反之Dcm會調用RTE接口。
DcmDspRequestResultsRoutineSupported:該例程是否支持STOP操作。若設置false,Dcm接收例程請求結果(3103)操作時會返回NRC12。
DcmDspRoutineFixedLength:例程是否固定長度
DcmDspRoutineIdentifier:例程ID
DcmDspRoutineInfoByte:
DcmDspRoutineInfoRef:指定的例程信息
DcmDspRoutineSystemTemplateDiagnosticRoutineRef:
DcmDspRoutineUsePort:Dcm使用“RoutineServices_<ROUTINENAME>”函數端口
DcmDspRoutineUsed:是否使用該例程。若禁用,例程將不使用Dcm生成的代碼
DcmDspStartRoutineFnc:啟動例程時調用的函數名。若不為空,Dcm在啟動例程時會調用該函數
DcmDspStopRoutineFnc:結束例程時調用的函數名。若不為空,Dcm在結束例程時會調用該函數
DcmDspStopRoutineSupported:該例程是否支持STOP操作。若設置false,Dcm接收stop操作(3102)時會返回NRC12。
8.ComControl
這個容器包含通信控制的配置
DcmDspAllComMChannelRef:配置引用CAN通道,根據需求,可配置多個通道。
(1)接下來我們介紹下DCM如何通知BSWM模塊的通信控制的。
Autosar代碼中有這12中通道配置。控制應用報文、網絡管理,以及RX和TX。
Bswm模塊制定相應的規則來控制CAN的收發功能。
舉例:
上圖中CANA應用報文的TX規則:接收到“DCM_DISABLE_RX_TX_NORMAL”和“DCM_DISABLE_RX_TX_NORM_NM”就關閉CANA應用報文的TX功能,反之開啟CANA應用報文的TX功能。
9. DcmDspControlDTCSetting
這個容器包含DTC開關控制的配置
DcmDspControlDTCSettingReEnableModeRuleRef:控制重啟DTC設置的規則。如果設置,Dcm會在DisableDTCSetting請求開始的時候監控,如果不滿足規則,Dcm會自動啟動DTC。
DcmSupportDTCSettingControlOptionRecord:指定是否支持DTC group參數。若設置false,Dcm接收帶有DTC group參數的請求時直接拒絕;反之,Dcm接收85服務時可帶DTC group參數。
例如IFC項目中默認配置下也可以支持85 01/02, 但是IDC項目中就必須加上DTC Group,所以IDC就需要將配置勾選取消。
10.DcmDspSecurity
這個容器包含安全訪問的配置
DcmDspSecurityBypassEnabled:安全訪問是否支持Bypass模式。
DcmDspSecurityResetAttemptCounterOnTimeout:延時計時器到期時Dcm是否復位安全嘗試計數器。
DcmDspSecuritySingleInstanceAttemptMonitor:安全訪問是否使用同一個嘗試計數器。若位置true,所有的DcmDspSecurityRows共用一個安全嘗試計數器;反之,每個DcmDspSecurityRows都單獨使用一個安全嘗試計數器。
DcmDspSecuritySingleInstanceDelayTimer:安全訪問是否使用同一個計時器。同上。
DcmDspSecurityADRSize
DcmDspSecurityAttemptCounterEnabled:安全嘗試計數是否支持外部存儲。若設置true,Dcm調用讀寫嘗試計數器的API接口;反之,Dcm在初始化的時候清空這個安全訪問等級的嘗試計數器
DcmDspSecurityCompareKeyFnc:秘鑰比較函數。當DcmDspSecurityUsePort設置為USE_ASYNCH_FNC時,Dcm會調用該函數。
DcmDspSecurityDelayTime:安全訪問延遲時間。在延遲期間,Dcm不會接收任何安全訪問請求。Dcm只有在失敗嘗試次數達到設置次數之后才會配置該時間。
DcmDspSecurityDelayTimeOnBoot:Dcm在上電周期內的延遲時間。在延遲期間,Dcm不會接收任何安全訪問請求。若設置非0,Dcm從初始化后的這段時間會拒絕任何安全訪問請求。
DcmDspSecurityDelayTimeOnFailedGetAttemptCounter:設置獲取嘗試次數失敗后的延遲時間。
若不設置,Dcm獲取失敗后直接將計數清0,接收安全訪問請求;
若設置為0,Dcm會一直等待獲取嘗試次數的結果,在此期間拒絕任何安全訪問請求;
若設置不為0,Dcm會在這段時間內等待獲取嘗試次數的結果,在此期間拒絕任何安全訪問請求,若超時,回復NRC響應(商榷)。
DcmDspSecurityGetAttemptCounterFnc:獲取嘗試次數的函數名。Dcm初始化時重載嘗試計數器。
DcmDspSecurityGetSeedFnc:獲取種子函數。當DcmDspSecurityUsePort設置為USE_ASYNCH_FNC時,Dcm會調用該函數。
DcmDspSecurityKeySize:安全訪問密鑰長度。
DcmDspSecurityLevel:安全訪問等級。
DcmDspSecurityNumAttDelay:安全訪問嘗試次數。若設置大于0,嘗試失敗的次數超過該值時返回NRC36;若設置等于0,不限失敗嘗試次數。
DcmDspSecuritySeedSize:安全訪問種子長度。
DcmDspSecuritySetAttemptCounterFnc:修改安全訪問嘗試次數的函數。
DcmDspSecurityUsePort:安全訪問類型。USE_ASYNCH_CLIENT_SERVER:Dcm使用P-port接口(SecurityAccess_{SecurityLevel}函數)訪問;USE_ASYNCH_FNC:Dcm直接調用DcmDspSecurityGetSeedFnc和DcmDspSecurityCompareKeyFnc自定義函數訪問。
對于每個安全級別,服務 0x27 應始終有一對對應的子服務:
- 一個用于“獲取種子”操作,具有奇數的子服務標識符值(例如 0x01);
- 一個用于“發送密鑰”操作,其偶數子服務標識符值等于“獲取種子”+1(例如 0x02);
參數值應始終與服務 0x27 配置容器的DcmDsdSubServices 中“get seed/send-key”對的Subfunction Id匹配:SecurityLevel = (<sub-function id> + 1) / 2
比如內部安全解鎖等級為27 61,那Subfunction Id為0x61(Hex), DcmDspSecurityLevel為49(Dec)。
11.DcmDspSession
這個容器包含會話控制的配置
DcmDspSessionForBoot:定義切換會話是否跳轉到Boot。DCM_NO_BOOT:不跳轉Boot;
DCM_SYS_BOOT:xxx; DCM_SYS_BOOT:xxx (有何區別)。
DcmDspSessionLevel:指定相應診斷會話的值
DcmDspSessionP2ServerMax:指定診斷會話的 P2 時間(以秒為單位)。
DcmDspSessionP2StarServerMax指定診斷會話的 P2* 時間(以秒為單位)。
總結
以上是DSP子模塊通用容器配置,我們僅僅用到其中一部分配置,很多配置還需具體實踐。
總結
以上是生活随笔為你收集整理的Autosar Dcm模块之Vector Configurator Pro配置(DSP子模块)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云监控介绍 - Amazon Cloud
- 下一篇: 3D程序设计离不开各种坐标系统