UDSOnCan¶
目标¶
本集成手册用于指导客户进行诊断栈集成,文档主要包括的内容为:诊断栈集成指导、基于普通应用的集成示例讲解、项目集成特殊说明。
由于各项目的需求不同,集成示例不会针对于特定的项目做详细讲解。
缩写词和术语¶
缩写词/术语 |
描述 |
---|---|
BSW |
Basic Software |
MCAL |
Microcontroller Abstraction Layer |
CanIf |
CAN Interface module |
CanSm |
CAN State Manager module |
ComM |
Communication Manager module |
PduR |
PDU Router module |
Dcm |
Diagnostic Communication Manager |
Dem |
Diagnostic Event Manager |
CanTp |
CAN Transport Layer |
NvM |
NVRAM Manager |
BswM |
Basic Software Mode Manager |
Rte |
Runtime Environment |
iRte |
i-Soft Runtime Environment |
参考文档¶
[1]参考手册_CanIf.pdf
[2]参考手册_PduR.pdf
[3]参考手册_CanSM.pdf
[4]参考手册_DCM.pdf
[5]参考手册_Dem.pdf
[6]参考手册_CanTp.pdf
[7]参考手册_EcuC.pdf
[8]参考手册_BswM.pdf
[9]集成手册_BswM&EcuM.pdf
[10]集成手册_OS.pdf
[11]普华基础软件_参考手册_ORIENTAIS SWC Builder_V2_Design使用指南.pdf
[12]普华基础软件_参考手册_ORIENTAIS SWC Builder_V2_Feature使用指南.pdf
[13]普华基础软件_参考手册_ORIENTAIS SWC Builder_V2_Overview使用指南.pdf
[14]普华基础软件_参考手册_ORIENTAIS Configurator_V2_使用指南.pdf
[15]普华基础软件_参考手册_ORIENTAIS Configurator_V2_RTE使用指南.pdf
[16]普华基础软件_参考手册_ORIENTAIS Configurator_V2_iRTE使用指南.pdf
[17]ODX file导入操作说明.docx
诊断栈集成¶
项目交付的内容为:诊断栈源码和ORIENTAIS Studio配置工具。诊断栈细分为诊断栈的各模块及其对应的配置工具模块。
模块名 |
功能 |
---|---|
Can |
CAN驱动配置。(由MCAL工具导入) |
CanIf |
CanIf模块主要处理上层模块与底层驱动的之间PDU的传递,为上层模块提供统一的接口来管理不同的CAN硬件模块 |
EcuC |
用于辅助配置工具完成配置的模块。主要提供Pdu的定义,其它模块通过关联EcuC中Pdu,相互关联起来。 |
PduR |
PDU Router主要为通讯接口模块(CANIF)、传输协议模块(CAN TP、J1939 TP)、诊断通讯管理模块(DCM、J1939DCM)以及通讯模块(COM、LDCOM)以及IPDUM、SECOC等模块提供基于I-PDU的路由服务。 |
CanTp |
CANTP模块实现依据ISO15765-2标准规范中定义的CAN总线数据在传输层的数据接收发送功能 |
Dcm |
依据ISO15765-3和ISO14229-1标准描述,实现诊断请求报文的解析,响应(正响应和负响应)与执行 |
Dem |
实现诊断故障的存储与管理功能,提供API接口供其他模块读取DTC和对应的冻结帧数据和扩展数据 |
步骤 |
操作 |
说明 |
---|---|---|
1 |
ORIENTAIS Stuido配置工具工程搭建和诊断栈模块加载 |
若配置工程已经搭建,则仅需进行诊断栈模块的加载操作。 |
2 |
模块配置及配置文件生成 |
进行基础的诊断栈配置 |
3 |
代码集成 |
现有工程、诊断栈源代码和配置生成文件的集成。 |
4 |
验证测试 |
用CAN报文监测工具收发诊断报文 |
Note
诊断栈集成之前,用户须确保已经有MCAL层可以跑通的基础工程,且诊断栈相关的其他功能栈如通信栈、网络管理栈、NvM栈能正常工作。
新建ORIENTAIS Stuido配置工程及模块加载¶
安装ORIENTAIS Studio软件后,双击软件图标打开软件并设置workspace。
图 新建工程-1
菜单栏File🡪New🡪Project,新建工程。
图 新建工程-2
在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。
图 新建工程-3
在弹出的窗口中输入工程名,选择Finish。
图 新建工程-4
选择[Bsw_Builder],右键单击,选择New ECU Configuration,在弹出的窗口中选择并填写对应的Ecu名称。
图 新建工程-5
Note
可选择的Ecu可能随项目的不同而不同
选择新建的Ecu,右键单击,选择“Add Module选项”。
图 新建工程-6
在弹出的选项框中勾选相应模块,点击“Finish”。
图 新建工程-7
新建工程如下所示,上一步中添加的模块已经被加入到工程中。
图 新建工程-8
模块配置及生产代码¶
模块配置¶
模块 |
参考文档及其章节 |
说明 |
---|---|---|
Can |
MCAL对应的Can配置手册 |
|
CanIf |
参考手册_CanTp.pdf |
|
PduR |
参考手册_PduR.pdf |
|
NvM |
参考手册_NvM.pdf |
|
CanTp |
参考手册_CanTp.pdf |
|
Dcm |
参考手册_Dcm.pdf |
|
Dem |
参考手册_Dem.pdf |
配置代码生成¶
功能集成¶
代码集成¶
诊断栈代码包括两部分:项目提供的诊断栈源码和ORIENTAIS Studio配置生成代码。诊断栈集成包括诊断栈源码(CANIF,CANSM,PDUR,CANTP,COMM,DCM,DEM等)、定时器源码和部分其他模块源码,具体文件见表。
用户须将诊断栈源码和章节(配置代码生成)生成的源代码添加到集成开发工具的对应文件夹。诊断栈集成的文件结构,见章节(源代码集成)。
表 诊断栈源码文件
移库文件夹 |
移库文件 |
说明 |
---|---|---|
ComM |
ComM.c ComM.h ComM_BswM.h ComM_BusSM.h ComM_Ch.c ComM_Ch.h ComM_Dcm.h ComM_EcuM.h ComM_Internal.h ComM_MemMap.h ComM_Nm.h ComM_Pnc.c ComM_Pnc.h ComM_Types.h ComM_Version.h |
通信栈源码 |
CanIf |
CanIf.c CanIf.h CanIf_Can.h CanIf_CanTrcv.h CanIf_Cbk.h CanIf_Internal.c CanIf_Internal.h CanIf_MemMap.h CanIf_Types.h |
|
CanSM |
CanSM.c CanSM.h CanSM_BswM.h CanSM_Cbk.h CanSM_MemMap.h CanSM_TxTimeoutException.h |
|
PDUR |
PduR.c PduR.h PduR_Buffer.c PduR_Buffer.h PduR_Internal.c PduR_Internal.h PduR_MemMap.h PduR_Route.c PduR_Route.h PduR_Types.h |
|
CanTp |
CanTp.c CanTp.h CanTp_Cbk.h CanTp_Internal.c CanTp_Internal.h CanTp_MemMap.h CanTp_Types.h |
|
BswM |
BswM.c BswM.h BswM_AvbAction.c BswM_Bsw.c BswM_Bsw.h BswM_CanSM.c BswM_CanSM.h BswM_ComM.c BswM_ComM.h BswM_Dcm.c BswM_Dcm.h BswM_DetCheck.c BswM_EcuM.c BswM_EcuM.h BswM_EthIf.c BswM_EthIf.h BswM_EthSM.c BswM_EthSM.h BswM_FrSM.c BswM_FrSM.h BswM_Internal.h BswM_J1939Dcm.c BswM_J1939Dcm.h BswM_J1939Nm.c BswM_J1939Nm.h BswM_LinSM.c BswM_LinSM.h BswM_LinTp.c BswM_LinTp.h BswM_MemMap.h BswM_Nm.c BswM_Nm.h BswM_NvM.c BswM_NvM.h BswM_Sd.c BswM_Sd.h BswM_Swc.c BswM_Swc.h BswM_TimerControl.c BswM_Types.h BswM_WdgM.c BswM_WdgM.h |
BswM源码 |
Dcm |
Dcm.c Dcm.h DcmDsd.c DcmDsl.c DcmDsp.c Dcm_Cbk.h Dcm_Ext.c Dcm_Ext.h Dcm_Internal.h Dcm_MemMap.h Dcm_Types.h
Dcm_UDS0x10.c
Dcm_UDS0x11.c Dcm_UDS0x14.c Dcm_UDS0x19.c Dcm_UDS0x22.c Dcm_UDS0x23.c Dcm_UDS0x24.c Dcm_UDS0x27.c Dcm_UDS0x28.c Dcm_UDS0x29.c Dcm_UDS0x2A.c Dcm_UDS0x2C.c Dcm_UDS0x2E.c Dcm_UDS0x2F.c Dcm_UDS0x31.c Dcm_UDS0x34.c Dcm_UDS0x35.c Dcm_UDS0x36.c Dcm_UDS0x37.c Dcm_UDS0x38.c Dcm_UDS0x3D.c Dcm_UDS0x3E.c Dcm_UDS0x85.c Dcm_UDS0x86.c |
Dcm部分源码 |
Dem |
Dem.c Dem.h Dem_CfgTypes.h Dem_Dcm.c Dem_Dcm.h Dem_Ext.c Dem_Ext.h Dem_Internal.h Dem_J1939.c Dem_MemMap.h Dem_OBD.c Dem_SubExt.c Dem_Types.h |
Dem部分源码 |
Note
诊断栈集成之前,用户须确保已经有基础工程,且本诊断栈相关的其他功能栈能正常工作。
集成注意事项¶
对于集成过程中,诊断栈特殊要求和用户经常出现的问题,归类总结形成 表 诊断栈集成约束清单。用户需逐一排查表中的约束项,以避免集成问题出现。
编号 |
类别 |
约束限制 |
---|---|---|
1 |
中断 |
通信栈有中断、轮询或混合三种工作模式。若选取中断或混合模式,用户需在通信栈配置对应的中断并填充中断服务API。 |
2 |
堆栈 |
用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。 |
3 |
头文件 |
添加诊断栈代码之后,用户需更新集成开发工具中的头文件路径。调用诊断栈API的源文件,需要包含诊断栈的头文件。 |
4 |
初始化 |
以CAN通信为例,诊断栈的初始化顺序为:Can_Init, CanIf_Init,PduR_Init,CanSM_Init,CanTp_Init,Dcm_Init |
5 |
周期函数 |
Dcm_MainFunction,Dem_MainFunction和CanTp_MainFunction需要被周期性任务函数调用。 |
集成示例¶
本章节通过普通的CAN诊断栈为例,向用户展示诊断栈的集成过程。用户可以据此熟悉诊断栈配置工具的配置过程,以及如何应用配置工具生成的配置文件。
为让用户更清晰的了解工具的使用,所用的配置均逐一手动完成。。
Note
本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。
集成目标¶
CAN报文需求:
报文ID |
报文 名称 |
发送 /接收 |
发送 模式 |
报文 周期 |
报文 长度 |
工作 模式 |
---|---|---|---|---|---|---|
0x708 |
CAN_DiagReqPhy |
接收 |
触发 |
8字节 |
中断 |
|
0x7df |
CAN_DiagReqFun |
接收 |
触发 |
8字节 |
中断 |
|
0x709 |
CAN_DiagResp |
发送 |
触发 |
8字节 |
中断 |
模块的配置¶
新建配置工程及模块加载操作,请参考本文档章节(模块配置及代码生成)。
Can模块配置¶
配置诊断协议栈之前需要使用MCAL工具配置Can模块,但是只涉及到与诊断栈中报文收发有关系的部分(主要是HardwareObeject),具体配置选项请参考MCAL工具的帮助手册进行配置。
EcuC模块配置¶
CanIf模块配置¶
PduR模块配置¶
CanTp模块配置¶
CanTpGeneral的配置如下。
图 CanTp模块配置-1
添加1个CanTpChannel,CanTpChannelMode配置为FULL_DUPLEX全双工,并添加2个CanTpRxNSdu,1个CanTpTxNSdu,分别对应功能、物理寻址请求及响应。
图 CanTp模块配置-2
为每个NSdu配置相关参数,并且选择EcuC中对应的CanTp的PDU。
图 CanTp模块配置-3
图 CanTp模块配置-4
图 CanTp模块配置-5
为每个NSdu配置关联的CanIf对应的PDU,注意功能寻址请求NSdu不需要配置发送流控帧的CanTpTxFcNPdu,物理寻址请求需要配置发送流控帧的CanTpTxFcNPdu,响应的NSdu需要配置接收流控帧的CanTpRxFcNPdu,如下图所示。
图 CanTp模块配置-6
图 CanTp模块配置-7
图 CanTp模块配置-8
Dcm模块配置¶
DcmGeneral配置
图 Dcm模块配置-1
配置DcmDsl,先配置Dcm Tx、RxBuffer及其length,需要与EcuC中Dcm对应的Pdu Length的值保持一致。
图 Dcm模块配置-2
配置DcmDslProtocol,选择Protocol、Buffer、ServiceTable。
图 Dcm模块配置-3
配置DcmDslMainConnection,选择Dcm通信的ComMChannel,并新建2个DcmDslProtocolRx,1个DcmDslProtocolTx。
图 Dcm模块配置-4
为每个DcmDslProtocolRx、DcmDslProtocolTx添加Dcm对应的PDU及寻址类型。
图 Dcm模块配置-5
图 Dcm模块配置-6
配置DcmDsdServiceTable,添加所需的服务及子服务,及其寻址方式、会话访问限制、安全级访问限制。
图 Dcm模块配置-7
配置DcmDspSession,SessionLevel与10服务的子服务对应,P2及P2Star时间参数根据需求进行配置。
图 Dcm模块配置-8
图 Dcm模块配置-9
配置DcmDspSerurity,SecurityLevel与27服务的子服务对应,如2701、2702对应level1,2705、2706对应level3。
图 Dcm模块配置-10
配置DcmDspRoutines,其中DcmDspCommonAuthorizationRef配置为每个Routine的会话访问限制与安全级访问限制。
图 Dcm模块配置-11
Routine下的3个容器分别对应3101、3102、3103的子服务功能,可按需求选择配置,并且可在容器中配置子服务的IN/OUT参数类型及长度。
图 Dcm模块配置-12
配置DcmDspComControl,此项用于配置28服务控制通信的ComM channel。
图 Dcm模块配置-13
配置DcmDspDidInfos,此项为每个Did配置22服务可读或2E服务可写,以及相关的会话访问限制、安全级访问限制。
图 Dcm模块配置-14
图 Dcm模块配置-15
配置DcmDspDatas,为每个Did配置DcmDspDataUsePort、类型、长度(bit为单位),并按需求选择上一步配置的DcmDspDidInfos。
图 Dcm模块配置-16
配置DcmDspDid,配置Did的DcmDspDidIdentifier及DcmDspDidInfos。
图 Dcm模块配置-17
配置DcmDspSignal,选择上一步DcmDspDatas中添加的配置。
图 Dcm模块配置-18
Dem模块配置¶
根据需求配置DemGeneral,相关配置项的意义可参考AutoSAR标准或Dem参考手册。
图 Dem模块配置-1
图 Dem模块配置-2
图 Dem模块配置-3
配置DemDataElementClass,其中可配置DemInternalDataElement(Dem内部数据)及DemExternalCSDataElement(外部CS接口获取数据)。
图 Dem模块配置-4
图 Dem模块配置-5
图 Dem模块配置-6
配置扩展数据Extended Data,需要配置DemExtendedDataRecordClass以及DemExtendedDataClass,如下图所示添加相应的配置。
图 Dem模块配置-7
配置冻结帧Freeze Frame,需要配置DemDidClass、DemFreezeFrameClass、DemFreezeFrameRecNumClass以及DemFreezeFrameRecordClass,如下图所示添加相应的配置。
图 Dem模块配置-8
图 Dem模块配置-9
图 Dem模块配置-10
图 Dem模块配置-11
配置DemPrimaryMemory,配置Event存储的最大数量,一般与DTC数量保持一致,若DTC数量太大,可考虑采用Displacement策略,减少此存储数量。
图 Dem模块配置-12
配置DemDTCAttribute,选择上面几步配置中添加的配置项。
图 Dem模块配置-13
配置DemDebounceCounterBasedClass
图 Dem模块配置-14
配置DemDebounceTimeBasedClass
图 Dem模块配置-15
配置DemDTC,添加DTC Value,并选择DemDTCAttribute。
图 Dem模块配置-16
配置DemEventParameter,选择Event类型、关联的DTC及操作循环等,并可根据需求配置是否添加Debounce以及Debounce Base。
图 Dem模块配置-17
图 Dem模块配置-18
BswM模块配置¶
BswM模块在系统服务中,详细可参考《集成手册_BswM&EcuM.pdf》文档,以下仅涉及Dcm交互相关。
配置BswMModeRequestPort,新建一个BswMModeRequestPort,并选择BswMRequestProcessing,然后在BswMModeRequestSource新建BswMDcmComModeRequest,并选择对应的BswMDcmComMChannelRef。
图 BswM模块配置-1
图 BswM模块配置-2
配置BswMModeCondition,新建一个BswMModeCondition并选择对应的BswMConditionType和BswMConditionMode,然后再选择对应的BswModeCompareValue。
图 BswM模块配置-3
图 BswM模块配置-4
配置BswMLogicalExpression,新建一个BswMLogicalExpression并选择BswMLogicalOperator和添加对应的BswMArgumentRef。
图 BswM模块配置-5
配置BswMAction,若在集成COM模块时,BswM中已配置了则不需要重复配置。若无则新建一个BswMAction,然后在BswMAvailableActions下新建选择BswMPduGroupSwitch,并添加对应的BswMDisabledPduGroupRef或者BswMEnabledPduGroupRef。
图 BswM模块配置-6
配置BswMActionList,新建一个BswMActionList并选择BswMActionListExecution,在BswMActionListItem下新建一个BswMActionListItem,此处若需要多个Action,则多次新建,然后选择对应的BswMActionListItemRef。
图 BswM模块配置-7
图 BswM模块配置-8
配置BswMRule,新建一个BswMRule,选择对应的BswMRuleExpressionRef,BswMRuleFalseActionList或者BswMRuleTrueActionList。
图 BswM模块配置-9
源代码集成¶
诊断栈源代码集成步骤如下:
在MCAL工程的基础上,同步章(EcuC模块配置)添加的Can模块配置文件。
从基线中取出章(代码集成)中相关的源代码添加到工程中。
将在章(配置代码生成)中ORIENTAS配置生成的诊断相关配置文件添加到工程中。
添加相关头文件目录。
诊断栈调度集成¶
诊断栈调度集成步骤如下:
集成CanTp_Callout.c中CanTp_ResetTime、CanTp_GetTimeSpan函数。
集成Dcm_Callout.c中Dcm_ResetTime、Dcm_GetTimeSpan函数。
CanTp_Callout.c集成源码如下(可以配置TM,mainfunction以及callout接口自行实现,本工程中使用mainfunction实现):
图 调度集成-1
图 调度集成-2
Dcm_Callout.c集成源码如下(可以配置TM,mainfunction以及callout接口自行实现,本工程中使用mainfunction实现):
图 调度集成-3
图 调度集成-4
诊断栈调度集成,需要逐一排查并实现表 诊断栈集成约束清单 所罗列的问题,以避免集成出现差错。
编译链接代码,将生成的elf文件烧写进芯片。
使用iRte集成¶
在BSW工具中添加iRte模块,然后更新所有bswmd文件,最后同步iRte和OS模块。若需要调整OS Task堆栈大小,可手动调整。调整OS Task堆栈大小可参考《集成手册_OS.pdf》文件。
图 iRte集成-1
图 iRte集成-2
图 iRte集成-3
使用Rte集成¶
在BSW工具中添加Rte模块,然后导入萃取文件,同步萃取文件,更新bswmd文件,最后同步Rte和OS模块。若需要调整OS Task堆栈大小,可手动调整。调整OS Task堆栈大小可参考《集成手册_OS.pdf》文件。至于萃取文件来源,可参考SWC工具的相关使用说明文档。
图 Rte集成-1
图 Rte集成-2
图 Rte集成-3
注:更新bswmd文件与同步Rte和OS模块同使用iRte集成中截图一致。
验证结果¶
根据集成目标,共配置了3个报文,其中2个接收报文分别为诊断物理寻址及诊断功能寻址,1个发送报文为诊断响应。
图 验证结果