Service 0x31
1.請求格式
RoutineControl (31服務(wù)) ,用于對主機廠定義的一些特定程序的控制操作(啟動程序、停止程序、請求運行結(jié)果)。關(guān)于31服務(wù)的請求格式如下:
(1)第2個字節(jié)routineControlType用于指定對程序的操作動作,其可選項如下(一般用得比較多的是01子服務(wù)):
01:startRoutine(啟動程序);
02:stopRoutine(停止程序);
03:requestRoutineResults(請求程序的運行結(jié)果)
(2)第3、4字節(jié)routineIdentifier表示指定的程序ID;這些特定的程序信息一般由車廠規(guī)定釋放;一般會在診斷調(diào)查表中體現(xiàn)。比如針對ECU的升級,一般需要指定以下幾個特定的程序功能(具體ID由車廠規(guī)定):
程序名+功能描述
CheckProgrammingPreconditions(編程條件檢查) 該程序用于對ECU升級條件(如車速信息等)的判斷,在ECU的BootLoader與APP程序中一般都要有該程序功能的定義。一般用于進入編程會話之前。
CheckAppSwAppDataValidity(檢查數(shù)據(jù)的有效性,如CRC校驗) 一般用于對升級數(shù)據(jù)中的每個塊信息的CRC校驗;ECU會將接收到的數(shù)據(jù)進行CRC計算,并與診斷儀計算發(fā)送過來的CRC進行比對;確保數(shù)據(jù)的準(zhǔn)確性。
EraseFlashMemory(擦除Flash內(nèi)存) 用于對此次升級要用到的內(nèi)存空間進行擦除操作。一般用于請求APP數(shù)據(jù)下載(34服務(wù))之前。
CheckProgrammingDependency(編程兼容性的檢查 ) 用于升級完成后對升級信息的兼容性檢查,例如對升級文件產(chǎn)品型號的檢查,必要的邏輯塊是否存在的檢查等操作。一般用于完成所有數(shù)據(jù)的升級之后。
(3)之后的數(shù)據(jù)代表可選記錄參數(shù)routineControlOptionRecord;一般用于攜帶其他信息,如程序的啟動條件、停止條件等;可根據(jù)實際需要進行使用;一般比較少用到。
2.肯定響應(yīng)格式
ECU在收到對應(yīng)的程序動作請求后,返回的肯定響應(yīng)格式如下:
其中,routineStatusRecord是可選參數(shù),用于在執(zhí)行相應(yīng)程序動作后,返回ECU相關(guān)的信息(如請求31 02服務(wù)請求停止時ECU可以通過該參數(shù)返回該程序總運行時間等信息);可根據(jù)實際需要進行使用;一般比較少用到。
3. 具體參數(shù)的配置
1.DCM模塊應(yīng)該實現(xiàn)UDS服務(wù)例程控制(0x31),用于子功能startRoutine、stopRoutine和requestsRoutineResults。測試人員可以使用UDS服務(wù)0x31來啟動、停止或獲取由2字節(jié)routineldentifier標(biāo)識的例程的結(jié)果。DCM模塊配置包含DCM支持的routineldentifier列表(請參閱配置參數(shù)DcmDspRoutineldentifier)。對于每個“例程ID”,DCM配置規(guī)定:
與此routineIdentifier關(guān)聯(lián)的函數(shù)Xxx_Start()。(配置參數(shù) DcmDspStartRoutineFnc andDcmDspRoutineUsePort)
請求和響應(yīng)中可用的信號列表。(配置參數(shù) DcmDspStartRoutineIn and DcmDspStartRoutineOut)
與此routineIdentifier關(guān)聯(lián)的函數(shù)Xxx_Stop()。(配置參數(shù) DcmDspStopRoutineFnc andDcmDspRoutineUsePort)
請求和響應(yīng)中可用的信號列表。(配置參數(shù) DcmDspStopRoutineIn and DcmDspStopRoutineOut)
與此routineIdentifier關(guān)聯(lián)的函數(shù)Xxx_RequestResults()。(配置參數(shù) DcmDspRequestRoutineResultsFnc andDcmDspRoutineUsePort)
響應(yīng)中可用的信號列表。(配置參數(shù) DcmDspRequestRoutineResultsOut)
2.在接收UDS服務(wù)RoutineControl (0x31)時,Dcm模塊應(yīng)檢查該例程是否受支持(請參閱配置參數(shù)DcmDspRoutine);如果不受支持,Dcm模塊應(yīng)發(fā)送NRC 0x31(請求超出范圍)。
3.如果一個例程被設(shè)置為未使用(DcmDspRoutineUsed設(shè)置為FALSE), DCM應(yīng)認(rèn)為該例程不受支持(根據(jù)2)。
4.接收UDS服務(wù)RoutineControl (0x31)時,DCM模塊應(yīng)檢查例程是否可以在當(dāng)前會話中執(zhí)行(請參閱配置參數(shù)DcmDspCommonAuthorizationRef)。如果不是。DCM模塊應(yīng)發(fā)送NRC Ox31(請求超出范圍)。
5.當(dāng)接收到UDS服務(wù)RoutineControl (0x31)時,DCM模塊應(yīng)該檢查這個例程是否可以在當(dāng)前安全級別執(zhí)行(參見配置參數(shù)DcmDspCommonAuthorizationRef)。如果沒有,DCM模塊將發(fā)送NRC 0x33(安全訪問被拒絕)。
6.當(dāng)UDS服務(wù)RoutineControl (0x31)被接收時,Dcm模塊應(yīng)該檢查相應(yīng)例程的子函數(shù)是否被支持(子函數(shù)0x02的配置容器DcmDspStopRoutine的存在性);子函數(shù)DcmDspRequestRoutineResults上的數(shù)據(jù)是0x03)。如果沒有,Dcm模塊將發(fā)送NRC 0x12(不支持子函數(shù))。
7.UDS服務(wù)RoutineControl (0x31)的接收,Dcm模塊應(yīng)檢查例程是否可以在當(dāng)前模式條件下執(zhí)行(請參閱配置參數(shù)DcmDspCommonAuthorizationRef)。如果沒有,Dcm模塊應(yīng)發(fā)送參考DcmModeRule的計算負(fù)響應(yīng)代碼。
8.當(dāng)收到請求UDS服務(wù)RoutineControl (0x31)如果所有驗證已成功完成(見2,4,5),Dcm模塊依法分割routineControlOptionRecord收到的這個例程的輸入信號配置列表(參見配置參數(shù)DcmDspStartRoutineln和DcmDspStopRoutineln)。
9.當(dāng)收到請求UDS服務(wù)RoutineControl (0x31)與子功能startRoutine,如果所有驗證已成功完成(見2,4,5), Dcm模塊將調(diào)用已配置的Xxx_start()函數(shù)傳遞dataln開始,計算從routineControlOptionRecord(見8),該例程的輸出信號配置列表中的dataOut引用(配置參數(shù)DcmDspStartRoutineOut)。根據(jù)DcmDspRoutineSignalType,數(shù)據(jù)鏈的數(shù)據(jù)長度可以是固定的,也可以是動態(tài)的。如果是動態(tài)的,則在參數(shù)currentDataLenath中提供datalength,參數(shù)currentDataLenath以字節(jié)為單位保存最后一個dataln參數(shù)的lenath。datalength只能在最后一個dataln參數(shù)上是動態(tài)的。
10.完成9時在完成SWS_Dcm_00400后,當(dāng)Xxx_Start()不返回錯誤代碼,Dcm模塊應(yīng)使用以下命令返回肯定響應(yīng):Xxx_Start()在dataOut中返回的數(shù)據(jù)作為例程信息和例程StatusRecord(dataOut根據(jù)輸出信號列表合并為此例程配置(請參閱配置參數(shù)DcmDspStartRoutineOut)) dataOut的數(shù)據(jù)長度可以是固定的或動態(tài)的根據(jù)DcmDspRoutineSignalType。如果是動態(tài)的,則數(shù)據(jù)長度應(yīng)為參數(shù)currentDataLength中提供的參數(shù),該參數(shù)保存字節(jié)的長度最后一個dataOut參數(shù)。 數(shù)據(jù)長度只能在最后一個dataOut上是動態(tài)的參數(shù)。。
11.當(dāng)接收請求UDS服務(wù)RoutineControl (0x31)與子功能stopRoutine,如果所有驗證已成功完成(見2,4,5), Dcm模塊將調(diào)用已配置 xxx_stop()函數(shù)傳遞dataln,計算從routineControlOptionRecord(見8),和根據(jù)此例程的輸出配置signal列表的dataOut引用(參見配置參數(shù)DcmDspStopRoutineOut)。根據(jù)DcmDspRoutineSignalType,數(shù)據(jù)鏈的數(shù)據(jù)長度可以是固定的,也可以是動態(tài)的。如果是動態(tài)的,則datalength應(yīng)該在參數(shù)currentDataLength中提供,該參數(shù)持有最后一個dataln參數(shù)的字節(jié)長度。datalength只能在最后一個dataln參數(shù)上是動態(tài)的。
12.當(dāng)完成11時,收到UDS服務(wù)RoutineControl的請求時(0x31)具有子功能stopRoutine,如果所有驗證均已成功完成(請參見2,4,5),DCM模塊應(yīng)該調(diào)用配置的Xxx_Stop()函數(shù),并傳遞dataIn,該dataIn是從例程ControlOptionRecord(請參閱8)和dataOut參考根據(jù)為此例程配置的輸出信號列表(請參閱配置參數(shù)DcmDspStopRoutineOut)。 dataIn的數(shù)據(jù)長度可以固定或根據(jù)DcmDspRoutineSignalType動態(tài)。 如果是動態(tài)的,則數(shù)據(jù)長度應(yīng)為在參數(shù)currentDataLength中提供,該參數(shù)保存字節(jié)的長度(以字節(jié)為單位)最后一個dataIn參數(shù)。 數(shù)據(jù)長度只能在最后一個數(shù)據(jù)上是動態(tài)的參數(shù)。
13.當(dāng)接收請求UDS服務(wù)RoutineControl (0x31)與子功能requestRoutineResults,如果所有驗證已成功完成(見2,4,5) Dcm模塊將調(diào)用已配置好的Xxx_RequestResults()函數(shù)提供dataOut參考列表的顯示輸出信號配置這個例程(參見配置參數(shù)DcmDspRequestRoutineResultsOut) 。
14.當(dāng)完成13時Xxx_RequestResults()沒有返回錯誤代碼,Dcm模塊應(yīng)當(dāng)與積極的回應(yīng)答復(fù),Xxx_RequestResults()返回的數(shù)據(jù)在dataOut routinelnfo和routineStatusRecord (dataOut合并根據(jù)這個例程的輸出信號confiqured列表(見DcmDspReduestRoutineResults)實現(xiàn)方式參數(shù))。根據(jù)DcmDspRoutineSignalType,數(shù)據(jù)輸出的datalenath可以是固定的,也可以是動態(tài)的。如果是動態(tài)的,則datalength應(yīng)該在參數(shù)currentDataLength中提供,該參數(shù)持有最后一個dataOut參數(shù)的字節(jié)長度。datalenath只能在最后一個dataOut參數(shù)上是動態(tài)的。
15.序列化所需AUTOSAR數(shù)據(jù)類型(有符號和無符號的int)從請求消息和響應(yīng)消息的UDS服務(wù)RoutineControl目標(biāo)字節(jié)順序已配置的 DcmDspRoutineSignalEndianness應(yīng)當(dāng)考慮DcmDspRoutine信號有DcmDspRoutineSignalType設(shè)置為固定長度(DcmDspRoutineSignalType設(shè)置為VARIABLE_LENGTH以外的值)。如果DcmDspRoutineSignalEndianness不存在,則應(yīng)改用DcmDspDataDefaultEndianness。
16.接待的UDS服務(wù)RoutineControl (0x31),對每一個請求消除OBD范圍內(nèi)(EO00-EOFF), Dcm模塊應(yīng)獲取為OBD服務(wù)$8定義的RID值(See SWS_Dcm_00418 ,SWS_Dcm_00419),如果RID指的是對應(yīng)的TID(見DcmDspRoutineTidRef)。
17.Dcm應(yīng)按照ISO 14229-1[15]對RoutineControl服務(wù)的NRC處理”。
18.接收UDS服務(wù)RoutineControl (0x31)時,Dcm模塊應(yīng)檢查請求的總長度。如果請求長度錯誤,Dcm模塊將發(fā)送NRC 0x13(錯誤的消息長度或無效的格式)給測試人員。
19.Dcm應(yīng)在完成總長度檢查和模式規(guī)則、安全級別和會話檢查DcmDspCommonAuthorizationRef之后,調(diào)用SWC的相應(yīng)例程函數(shù)。
20.DcmDspRoutine應(yīng)該支持服務(wù)端口、回調(diào)函數(shù)或TID引用。
21.如果不使用DcmDspRoutineTidRef,則DcmDspStartRoutine,DcmDspCommonAuthorizationRef和DcmDspRoutineUsePort應(yīng)該是強制性的。
22.如果使用DcmDspRoutineTidRef,則應(yīng)禁用DcmDspCommonAuthorizationRef、cmdsprequrequestroutineresults、dcmdspstop例程、DcmDspStartRoutine和DcmDspRoutineUsePort。
總結(jié)
以上是生活随笔為你收集整理的Service 0x31的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑系统的睡眠电脑如何设置休眠状态
- 下一篇: 路由器网口线怎么接路由器网口如何正确连接