CAN_集成手册

目标

本集成手册用于指导客户进行通信栈集成,文档主要包括的内容为:通信栈集成指导。

由于各项目的需求不同,集成示例不会针对于特定的商业项目做详细讲解。

缩写词和术语

表 2‑1 缩写词和术语

缩写词/术语

描述

BSW

Basic Software 基础软件层

BswM

Basic Software Mode Manager基础软件模式管理器

MCAL

Microcontroller Abstraction Layer 微控制器抽象层

CANIF

CAN Interface module CAN接口模块

CanSm

CAN State Manager module CAN状态管理器模块

ComM

Communication Manager module通信管理器模块

EcuM

ECU State Manager module ECU状态管理器模块

SchM

Scheduler Module调度程序模块

参考文档

[1]参考手册_CanIf.pdf

[2]参考手册_Com.pdf

[3]参考手册_EcuC.pdf

[4]参考手册_PduR.pdf

[5]参考手册_CanSM.pdf

Can通信栈集成

项目交付的内容为:Can通信栈源码和ORIENTAIS Configurator配置工具。通信栈细分为通信栈的各模块及其对应的配置工具模块。

通信栈各配置模块的功能介绍,参见表 4‑1通信栈各配置模块介绍。

使用通信栈源码和配置工具,进行通信栈的集成的步骤,参见表 4‑2 通信栈集成的步骤。

表 4‑1通信栈各配置模块介绍

模块名

功能

Can

CAN驱动配置。(由mcal配置工具导入,详见章节5.2.1)

CanIf

CanIf模块主要处理上层模块与底层驱动的之间 PDU的传递,为上层模块提供统一的接口来管理不同的CAN硬件模块

EcuC

用于辅助配置工具完成配置的模块。主 要提供Pdu的定义,其它模块通过关联EcuC中Pdu,相互关联起来。

PduR

PDU Router主要为通讯接口模块(CANIF)、传输协议模 块、诊断通讯管理模块以及通讯模块提供基于I-PDU的路由服务。

Com

COM模块主要提供I-PDU和信号相关管理功能

CanSM

主要功 能是与通信硬件抽象层和系统服务层产生交互,为每一个CAN通信 总线定义一个总线相关的状态管理,并为相关的总线提供流控制。

表 4‑2 通信栈集成的步骤

步骤

操作

说明

1

ORIENTAIS Stuido配置工具 工程搭建和通信栈模块加载

若配置工具已经搭建 ,则仅需进行通信栈模块的加载操作。

2

模块配置及配置文件生成

NA

3

代码集成

现有工程、 通信栈源代码和配置生成文件的集成。

4

验证测试

NA

注意:通信栈集成之前,用户须确保已经有基础工程,且本通信栈相关的其他通信栈能正常工作。

新建ORIENTAIS Configurator配置工程及模块加载

  1. 安装ORIENTAIS Configurator软件后,双击软件图标打开软件。

../../_images/image1161.png

图 4‑1 配置工程-1

  1. 菜单栏File🡪New🡪Project,新建工程。

../../_images/image2104.png

图 4‑2 配置工程-2

  1. 在弹出的新建窗口中选择Autosar下的 [BSW Project],选择Next。

../../_images/image380.png

图 4‑3 配置工程-3

  1. 在弹出的窗口中输入工程名,选择Finish。

../../_images/image470.png

图 4‑4 配置工程-4

  1. 在弹出的窗口中选择Yes。

../../_images/image560.png

图 4‑5 配置工程-5

  1. 选择[Bsw_Builder],右键单击,选择New ECU Configuration。

image1

图 4‑6 配置工程-6

  1. 在弹出的窗口中输入ECU名,然后选择Next。

../../_images/image749.png

图 4‑7 配置工程-7

  1. 在弹出的窗口中勾选需添加的模块,点击Finish。

../../_images/image845.png

图 4‑8 配置工程-8

../../_images/image944.png

图 4‑9 配置工程-9

  1. 新建工程如下所示,步骤⑦中添加的模块已经被加入到工程中。

../../_images/image1038.png

图 4‑10 配置工程-10

模块配置及代码生成

模块配置

模块的具体配置,取决于具体的项目需求。该通信栈各模块配置项的详细介绍,参见表 4 3通信栈各模块配置参考文档。

表 4‑3通信栈各模块配置参考文档

模块

参考文档及其章节

说明

Can

MCAL对应的Can配置手册

CanIf

参考手册_CanIf.pdf

PduR

参考手册_PduR.pdf

Com

参考手册_Com.pdf

CanSM

参考手册_CanSM.pdf

EcuC

参考手册_EcuC.pdf

ComM

参考手册_ComM.pdf

配置代码生成

  1. 在ORIENTAIS Stuido主界面左方,选择对应的通信栈,单击右键弹出Validate All和Generate All菜单。

../../_images/image1162.png

图 4‑11 模块配置

  1. 选择Validate All对本通信栈各配置选项进行校验,没有错误提示信息即校验通过。若有错误信息,请按照错误提示修改。

  2. 选择Generate All,生成配置文件。右下角的Console窗口输出生成的配置文件信息。

../../_images/image1236.png

图 4‑12 模块配置

  1. 将ORIENTAIS Configurator切换到Resource模式,即可查看生成的配置文件。

../../_images/image1332.png

图 4‑13 模块配置

功能集成

代码集成

通信栈代码包括两部分:项目提供的通信栈源码和ORIENTAIS Configurator配置生成代码。通信栈集成包括通信栈源码(CAN、CanIf、PduR、ComM、CanSM等)、定时器源码和部分其他模块源码,具体文件见表4-4。

用户须将通信栈源码和章节4.2.2生成的源代码添加到集成开发工具的对应文件夹。通信栈集成的文件结构,见章节④。

表4-4通信栈源码文件

移库文件夹

移库文件

说明

ComM

ComM.c、ComM_MemMap.h、

ComM.h、、ComM_Internal.c、

ComM_BusSM.h、ComM_Nm.h

ComM_Com.h、ComM_Internal.h、

ComM_Dcm.h、ComM_EcuMBswM.h

通信栈源码

CanIf

CanIf.c、CanIf_Types.h

CanIf.h、、CanIf_MemMap.h、

CanIf_Cbk.h

CanSM

CanSM.c、CanSM_MemMap.h、

CanSM.h、CanSM_BswM.h、

CanSM_Cbk.h、CanSM_ComM.h、

CanSM_TxTimeoutException.h

PDUR

PduR_CanIf.h、PduR_Com.h、

PduR_Internal.c、PduR_Internal.h

PduR.c、PduR_Types.h、

PduR.h、PduR_MemMap.h、

Com

Com.c、Com_Types.h、Com_Cbk.h、

Com.h、Com_TxInternal.c

Com_GwInternal.c、Com_Internal.c

Com_Internal.h、 Com_MemMap.h、Com_RxInternal.c

SchM

SchM.c、

SchM.h、

SchM_Com.h、

SchM_ComM.h、

SchM_CanIf.h、

SchM_PduR.h、

SchM部分源码

BswM

BswM.c、

BswM.h、

BswM_CanSM.h、

BswM_ComM.h、

BswM部分源码

EcuM

EcuM_Types.h、

EcuM.h、

EcuM部分源码

注意:通信栈集成之前,用户须确保已经有基础工程,且本通信栈相关的其他通信栈能正常工作。

集成注意事项

对于集成过程中,通信栈特殊要求和用户经常出现的问题,归类总结形成 表 4‑5通信栈集成约束清单。用户需逐一排查表中的约束项,以避免集成问题出现。

表 4‑5 通信栈集成约束清单

编号

类别

约束限制

1

中断

通信栈 有中断、轮询或混合三种工作模式。若选取中断或混合模 式,用户需在通信栈配置对应的中断并填充中断服务API。

2

堆栈

用户需确保为任务堆栈和中断堆栈分配足够的堆栈空间。

3

头文件

添加通信栈代码之后,用户需更新集成开发工具中的头文件 路径。

调用通信栈API的源文件,需要包含通信栈的头文件。

4

初始化

以CAN通信为例,通信栈的初始化顺序为:Can_Init, CanIf_Init, PduR_Init, Com_Init,CanSM_Init。

5

周期函数

Com_MainFunctionRx,Com_MainFunctionRouteSi gnals和Com_MainFunctionTx需要被周期性任务函数调用。

集成示例

本章节通过普通的CAN通信栈为例,向用户展示通信栈的集成过程。用户可以据此熟悉通信栈配置工具的配置过程,以及如何应用配置工具生成的配置文件。

为让用户更清晰的了解工具的使用,所用的配置均逐一手动完成。用户可以使用工具中的DBC导入功能,快速完成配置。DBC导入功能不属于本文档介绍范畴,具体操作请参照《参考手册_ORIENTAIS Studio_使用指南.pdf》。

注意:本示例不代表用户的实际配置情况,用户需要根据自己的实际需求,决定各个参数的配置。

集成目标

CAN报文需求:

表 5‑1

报文ID

报文名称

发送 接收

发送模式

报文周期

报文长度

工作模式

0x100

CAN_Tx_Message1

发送

周期

50ms

8字节

轮询

0x105

CAN_Tx_Message2

发送

触发

8字节

轮询

0x120

CAN_Rx_Message1

接收

NA

100ms

8字节

轮询

0x125

CAN_Rx_Message2

接收

NA

8字节

轮询

CAN报文信号需求:

  • CAN_Tx_Message1(0x100)包含的信号

../../_images/image1430.png

图 5‑1 集成示例-1

  • CAN_Tx_Message2(0x105) 包含的信号

../../_images/image1528.png

图 5‑2 集成示例-2

  • CAN_Rx_Message1(0x120) 包含的信号

../../_images/image1624.png

图 5‑3 集成示例-3

  • CAN_Rx_Message1(0x125) 包含的信号

../../_images/image1724.png

图 5‑4 集成示例-4

模块的配置

新建配置工程及模块加载操作,请参考本文档4.2章节。

Can模块配置

有多种工具可以用于配置mcal,本章介绍如何使用EB工具配置Can模块,但是只涉及到与通信栈中报文收发有关系的部分(主要是HardwareObeject),其余配置选项请参考EB工具的帮助手册进行配置。

  1. 打开EB工具,新建CAN模块后,在以下路径配置HardwareObject:

CAN模块🡪CanConfigSet🡪CanHardwareObject。

根据本次配置示例的目标,需要配置4个HardwareObject,如下图所示:

../../_images/image1822.png

图 5‑5 模块配置-1

注意:HardwareObject定义的时候,必须接收报文放在发送报文前面。

  1. 完成EB配置后,生成Can模块的配置文件,替换工程中原有的Can模块的配置文件。

  2. 导出EB的配置文件。

  3. 将③导出的配置文件,导入到ORIENTAIS Configurator中。

导入后工程如下图所示:

../../_images/image1919.png

图 5‑6 模块配置-2

CanIf模块配置

  1. 双击CanIf模块,打开CanIf模块的配置界面。

../../_images/image2016.png

图 5‑7 模块配置-3

  1. CanIfPublicCfg、CanIfPrivateCfg、CanIfDispatchCfg、CanIfTrcvDrvCfg标签页均保持默认值,不需要配置。

  2. 在CanIfInitCfg标签页下的容器[CanIfInitCfg]上,右边新建一个CanIfInitHohCfg对象。

../../_images/image2122.png

图 5‑8 模块配置-4

  1. CanIfCtrlDrvCfg配置。

[CanIfCtrlDrvCfg_0]的配置项CanIfCtrlDrvInitHohConfigRef需要关联到步骤③中创建的HOH对象。

[CanIfCtrlDrvNameRef]的配置项选Can。

../../_images/image2219.png

图 5‑9 模块配置-5

  1. CanIfCtrlCfg配置:

将默认生成的[CanIfCtrlCfg_0]名字改为[CanIfCtrlCfg_Controller0]。

参数CanIfCtrlCanCtrlRef,选择CanController_0。

../../_images/image2317.png

图 5‑10 模块配置-6

可在容器[CanIfInitCfg]上右键,新建CanIfBufferCfg、CanIfInitHohCfg、CanIfRxPduCfg、CanIfTxPduCfg。

../../_images/image2416.png

图 5‑11 模块配置-7

  1. 新建一个CanIfInitHohCfg,再在新建的容器[CanIfInitHohCfg_0]上右键新建2个CanIfHrhCfg和2个CanIfHthCfg。然后将新建的容器改为有意义的名字。

每个发送报文需要一个CanIfHrhCfg,每个接收报文需要一个CanIfHthCfg。

../../_images/image2514.png

图 5‑12 模块配置-8

  1. 配置CanIfHrhCfg_Rx_Message1和CanIfHrhCfg_Rx_Message2。

../../_images/image2613.png

图 5‑13 模块配置-9

../../_images/image2712.png

图 5‑14 模块配置-10

  1. 配置CanIfHthCfg_Tx_Message1和CanIfHthCfg_Tx_Message2。

../../_images/image2812.png

图 5‑15 模块配置-11

../../_images/image2912.png

图 5‑16 模块配置-12

  1. 新建2个CanIfBufferCfg,并修改名字。每个发送报文需要建立一个CanIfBufferCfg。

../../_images/image308.png

图 5‑17 模块配置-13

../../_images/image3115.png

图 5‑18 模块配置-14

  1. 新建2个CanIfRxPduCfg,并修改名字。每个接收报文需要在CanIf中配置对应的CanIfRxPduCfg。报文CAN_Rx_Message1对应的CanIfRxPduCfg参数配置如下:

表 5‑2

参数名

设置值

说明

CanIfRxPduCanId

0x120

报文ID(参照DBC)

CanIfRxPduCanIdType

STANDARD_CAN

帧类型:标准帧

CanIfRxPduDlc

8

报文长度 (参照DBC)

CanIfRxP duUserRxIndicationUL

PDUR

CanIf 模块收到报文后通知PduR模块

CanIfRxPduHrhIdRef

CanIfHr hCfg_Rx_Message1

关联到对 应的Hrh(本章节步骤⑧创建)

CanIfRxPduRef

CAN_Rx_Message1

关联到EcuC中定义的pdu,此 处命名规则为XXX(报文名)

../../_images/image3213.png

图 5‑19 模块配置-15

用同样的方法配置CanIfRxPduCfg_Rx_Message2

../../_images/image3312.png

图 5‑20 模块配置-16

  1. 新建2个CanIfTxPduCfg,并修改名字。每个接收报文需要在CanIf中配置对应的CanIfTxPduCfg。报文CAN_Tx_Message1对应的CanIfTxPduCfg参数配置如下:

表 5‑3

参数名

设置值

说明

CanIfTxPduCanId

0x100

CAN ID

CanIfTxPduCanIdType

STANDARD_CAN

帧类型:标准帧

CanIfTxPduType

STATIC

静态CAN ID

CanIfTxPdu UserTxConfirmationUL

PDUR

报文发送成功确 认通知传递给PDUR模块

CanIfTxPduBufferRef

C anIfHthCfg_Tx_Message1

关联到对应HtH

CanIfTxPduRef

CAN_Tx_Message1

关联到EcuC中的Pdu

../../_images/image3411.png

图 5‑21 模块配置-17

用同样的方法配置CanIfTxPduCfg_Tx_Message2

../../_images/image3511.png

图 5‑22 模块配置-18

  1. 校验配置,无错误信息,即配置完成。

EcuC模块配置

  1. 双击EcuC模块,打开EcuC模块的配置界面。

../../_images/image3611.png

图 5‑23 EcuC配置-1

  1. 右击EcucConfigSets新建EcucConfigSet,右击EcucConfigSet新建EcucPduCollections,右击EcucPduCollections新建EcucPduCollection,右击EcucPduCollections新建MetaDataTypes和Pdus,MetaDataTypes保持默认。

  2. 新建8个Pdu并修改名字,配置报文方向和报文长度。

注意:

此处配置pdu为两组,命名需要分开,方便后续配置需要使用。推荐规则为Com_XXX和XXX两种(XXX代表报文名)。

../../_images/image3711.png

图 5‑24 EcuC配置-2

  1. 其他页面保持默认即可。

Com模块配置

  1. 双击Com模块,打开Com模块的配置界面。

../../_images/image385.png

图 5‑25 Com配置-1

  1. ComSupportedIPduGroups填写数目,且与ComIPduGroup数量保持一致,其他配置选择默认。

../../_images/image395.png

图 5‑26 Com配置-2

  1. 选择ComConfig页面配置,新建目标数量的ComIPdu、ComIPduGroup、ComSignal并修改名称。

发送ComIPdu的属性配置如图。

接收ComIPdu的属性配置ComIPduDirection为RECEIVE和ComIPduGroupRef新建选择ComIPduGroup_Rx。

../../_images/image404.png

图 5‑27 Com配置-3

  1. 选中ComIPdu,配置发送ComIPdu的属性配置如图。

接收ComIPdu的属性配置ComIPduDirection为RECEIVE和ComIPduGroupRef新建选择ComIPduGroup_Rx。

注意:ComPduIdRef选择Com_XX的相应报文,此处对应EcuC的配置。

ComIPduSignalRef需要新建选择该报文所包含的所有信号。

../../_images/image4112.png

图 5‑28 Com配置-4

../../_images/image4212.png

图 5‑29 Com配置-5

  1. 在发送IPDU新建ComTxIPdu,配置ComMinimumDelayTime为0.005s,其他保持默认。

在接收IPDU中不需要新建ComTxIPdu。

../../_images/image4311.png

图 5‑30 Com配置-6

  1. 在发送ComTxIPdu新建ComTxModeTrue,按照需求选择ComTxModeMode为周期、事件或者混合型发送模式此处为周期型发送,ComTxModeNumberOfRepetitions、ComTxModeRepetitionPeriod、ComTxModeTimeOffset和ComTxModeTimePeriod按照不同发送模式配置具体请参照需求设置。

../../_images/image4411.png

图 5‑31 Com配置-7

  1. 选定信号后设置ComBitPosition、ComBitSize、ComSignalEndianness、ComSignalInitValue、ComSignalType和ComTransferProperty等参数。ComTransferProperty的配置,需要考虑与IPDU发送模式相配合从而实现相应的发送类型,此处为周期报文选择PENDING。

../../_images/image4511.png

图 5‑32 Com配置-8

  1. ComTimeBase配置保持默认。

../../_images/image4610.png

图 5‑33 Com配置-9

PduR模块配置

  1. 双击PduR模块,打开PduR模块的配置界面,PduRGeneral保持默认配置。

../../_images/image475.png

图 5‑34 PduR配置-1

  1. 打开PduRBswModules新建PduRBswModules_CanIf和PduRBswModules_Com,PduRBswModuleRef分别选择CanIf和Com,其他配置保持默认。

../../_images/image484.png

图 5‑35 PduR配置-2

  1. 打开PduRRoutingTables新建一个PduRRoutingTable,再PduRRoutingTable中新建PduRRoutingPath如图。

../../_images/image494.png

图 5‑36 PduR配置-3

  1. 找到并选中PduRDestPdu,配置右边PduRDestPduRef。

注意:

接收报文PduRDestPduRef选择Com_XXX(此处对应EcuC的配置);

发送报文PduRDestPduRef选择XXX(此处对应EcuC的配置);

如下图为发送报文配置目标pdu。

../../_images/image503.png

图 5‑37 PduR配置-4

  1. 找到并选中PduRSrcPdu,配置右边PduRSrcPduRef。

注意:

接收报文PduRSrcPduRef选择XXX(此处对应EcuC的配置);

发送报文PduRDestPduRef选择Com_XXX(此处对应EcuC的配置);

如下图为发送报文配置源pdu。

../../_images/image5112.png

图 5‑38 PduR配置-5

CanSM模块配置

  1. 找到并选中CanSMManagerNetwork,配置右边CanSMComMNetworkHandleRef此配置与ComM模块关联。

../../_images/image5212.png

图 5‑39 CanSMp配置-1

  1. 找到并选中CanSMController,配置右边CanSMControllerId此配置与CanIf模块关联。

../../_images/image5311.png

图 5‑40 CanSMp配置-2

ComM模块配置

  1. 找到并添加ComMUser

../../_images/image5411.png

图 5‑41 ComM模块配置-1

  1. 修改ComMChannel,配置右边ComMBusType为COMM_BUS_TYPE_CAN

../../_images/image5510.png

图 5‑42 ComM模块配置-2

  1. 找到ComMNetworkManagement配置,ComMNmVariant设置为NONE

../../_images/image564.png

图 5‑43 ComM模块配置-3

  1. 找到ComMUserPreChannels配置,将之前配置的user关联到channel

../../_images/image574.png

图 5‑44 ComM模块配置-4

源代码集成

项目交付给用户的工程结构如下:

../../_images/image584.png

图 5‑45 交付工程

  • BSW目录,这个目录放置所有基础软件相关代码,除了MCAL、Config文件夹之外,均按bsw源码路径放置

  • ASW目录,存放应用代码

  • Config目录,存放mcal和bsw生成的动态代码。

  • MCAL目录,存放mcal的静态代码

通信栈源代码集成步骤如下:

  1. 将5.2章节中EB MCAL生成的CAN模块配置文件和ORIENTAIS Configurator生成的配置文件复制到Config/BSW_Config文件夹中。

  2. 将MCAL提供的CAN模块源码和项目提供的通信栈源代码文件复制到BS W和MCAL文件夹中。

通信栈调度集成

通信栈调度集成步骤如下:

  1. 通信栈调度集成,需要逐一排查并实现表 5‑5通信栈集成约束清单 所罗列的问题,以避免集成出现差错。

  2. 编译链接代码,将生成的elf文件烧写进芯片。

通信栈有关的代码,在下方的main.c文件中给出重点标注。

注意 : 本示例中,通信栈初始化的代码和启动通信的代码置于main.c文件,并不代表其他项目同样适用于将其置于main.c文件中。

../../_images/code11.png
../../_images/code21.png
../../_images/code31.png
../../_images/code41.png

验证结果

根据集成目标,共配置了4个报文,其中1个周期发送报文,1个触发发送报文,还有2个与发送报文信号配置一致的接收报文。

  1. 系统启动后有一个报文发送(CAN_Tx_Message1),ID 0x100,周期50ms,初始化值和设置一致

../../_images/image594.png

图 5‑46 验证结果-1

  1. 本地发送一帧ID为0x120的报文(CAN_Rx_Message1)后,发送报文0x100(CAN_Tx_Message1)的值发生变化

../../_images/image603.png

图 5‑47 验证结果-2

  1. 本地发送一帧ID为0x125的报文(CAN_Rx_Message2)后,开发板发送一帧ID为0x105的报文(CAN_Tx_Message2)

../../_images/image6112.png

图 5‑48验证结果-3