EB tresos实战记录: 配置通信-Can

本文档详细阐述了配置基于CAN总线传输Signal的过程,包括在ECUC中配置COMstack的PDU集合,设置接收和发送PDU,配置Com和ComConfig参数,定义接收和发送Signal,以及涉及的IPDU、PduR、CanIf等模块的配置。每个步骤都详细说明了所需参数和操作,如PDU长度、信号类型、端序、传输模式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文档是配置基于CAN 传输Signal的配置过程。

基于CAN发送Signal:

基于CAN接收Signal:

1. 在Ecuc里配置COM stack使用的所有PDU集合;

     1) 开启Ecuc/EcucPduCollection,如果下图Name前是红色,点击切换为绿色:

     2) Ecuc/EcucPduCollection/Pdu下添加COM使用的PDU队列,添加方法如下:

    3)  增加接收PDU:Pdu_CounterIn_256R,PduLength是一个PDU的长度,byte为单位。SysTPduToFrameMappingRef 还未填写。

     4) 增加发送PDU:Pdu_CounterOut_272T,PduLength是一个PDU的长度,byte为单位。SysTPduToFrameMappingRef 还未填写。

2. 配置Com/ComGeneral下的参数;

3. 在Com/ComConfig下增加Configuration配置项

      1) 增加ComConfig配置项:

 

      2) 在Com/ComConfig/ComConfig/ComSignal下增加接收Signal:SGCounterIn_256R。ComBitPosition=0,在PDU中的位置是0;ComBitSize=8 占位是8 bit;ComHandleId = 0  ComSignal ID是0;ComNotification = Rte_COMCbk_SGCounterIn_256R, 接收方的Com_CbkRxAck 回调函数;ComSignalEndianness = LITTLE_ENDIAN,定义信号网络表示的端序;ComSignalType  = UNIT8,signal的数据类型;ComSignalInitValue  = 0,signal的初始值;ComTransferProperty = TRIGGERED, 定义对该信号的写入访问是否可以触发相应I-PDU的传输。如果I-PDU被触发,也取决于相应的I-PDU的传输模式; ComSystemTemplateSystemSignalRef 未定义。

     3) 在Com/ComConfig/ComConfig/ComSignal下增加发送Signal:SGCounterIn_272T。ComBitPosition=0,在PDU中的位置是0;ComBitSize=8 占位是8 bit;ComHandleId = 0  ComSignal ID是0;ComSignalEndianness = LITTLE_ENDIAN,定义信号网络表示的端序;ComSignalType  = UNIT8,signal的数据类型;ComSignalInitValue  = 0,signal的初始值;ComTransferProperty = TRIGGERED, 定义对该信号的写入访问是否可以触发相应I-PDU的传输。如果I-PDU被触发,也取决于相应的I-PDU的传输模式; ComSystemTemplateSystemSignalRef 未定义。

     4) 开启SGCounterOut_272T 的ComFilter:

     5) 在Com/ComConfig/ComConfig/ComIPdu下增加IPDU:PDPdu_CounterIn_256R。ComIPduDirection=RECEIVE 接收IPDU;ComIPduHandled = 0  IPDU ID是0;ComIPduSignalProcessing = IMMEDIATE,处理模式;ComIPduType = NORMAL, IPDU不需要分片;ComPduIdRef,引用“全局”Pdu结构,以允许COM堆栈中句柄ID的协调。

    6) 把Signal SGCounterIn_256R 添加到IPDU PDPdu_CounterIn_256R里:

    7) 在Com/ComConfig/ComConfig/ComIPdu下增加IPDU:PDPdu_CounterOut_272T。ComIPduDirection=SEND 发送IPDU;ComIPduHandled = 0  IPDU ID是0;ComIPduSignalProcessing = IMMEDIATE,处理模式;ComIPduType = NORMAL, IPDU不需要分片;ComPduIdRef,引用“全局”Pdu结构,以允许COM堆栈中句柄ID的协调。

     8) 配置传输模式:

     9)把Signal SGCounterOut_272T 添加到 IPDU PDPdu_CounterOut_272T 里:

    10) 在Com/ComConfig/ComConfig/ComIPduGroup 里增加IPDU group:

 

     11) 把IPDU  PDPdu_CounterIn_256R 和PDPdu_CounterOut_272T 分别添加到IPDU Group RXCanNetwork和TGCanNetwork里

 

4. 配置PduR/PduRGeneral里的参数;

5. 配置PduR/PduBswModules,本实例中,Com是上层模块,CanIf是下层模块;

 

6. 配置PduR/PduRoutingTables:

    1) 添加一个Tables:PduRRoutingTables

   2) 添加一个PduRRoutingTable

    3) 增加一条Routing path:Pdu_CounterIn_256R:

    4) 增加一条Routing path:Pdu_CounterIn_272T:

 

7. 配置CanIf/CanIfPulicCfg里的参数;

8. 配置CanIf/CanIfPrivateCfg里的参数;

9. 配置CanIf/CanIfUpperLayerConfig里的参数,本示例中CanIf的上层模块只有PDUR:

 

10. 配置CanIf/CanIfDispatchCfg的参数,由CanIf的上层模块提供的回调函数:

 

11. 配置CanIf/CanIfCtrlDrvCfg的参数;

12. 配置CanIf/CanIfInitCfg的参数:

     1) 增加一个CanIfInitCfg配置项 CanIfInitCfg:

     2) 在CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitHohCfg下增加一项 CanIfInitHohCfg:

     3) 在CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitHohCfg/CanIfInitHohCfg/CanIfHrhCfg增加一项HOH_1_EcuTestNode。CanIfHrhIdSymRef 向未填写,待CAN配置后填写。

    4) 在CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitHohCfg/CanIfInitHohCfg/CanIfHthCfg增加一项HOH_0_EcuTestNode。CanIfHthIdSymRef 向未填写,待CAN配置后填写。

    5) 在CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitCfg/CanIfRxPduCfg下增加接收PDU配置Pdu_CounterIn_256R;

     6) 在CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitCfg/CanIfTxPduCfg下增加发送PDU配置Pdu_CounterOut_272T。 CanIfTxPduBufferRef 项还未填写,待CanIfBufferCfg配置后填写.

    7) 在 CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitCfg/CanIfBufferCfg添加HOH_0_EcuTestNode:

    8) HOH_0_EcuTestNode加入到Pdu_CounterOut_272T的CanIfTxPduBufferRef  里:

 

13. 配置CanIf/CanIfCtrlDrvCfg的参数

     1) 增加一项:CanIfCtrlDrvCfg;

     2) 在CanIfCtrlCfg添加一项:EcuTestNode,配置如下,有两项未填写,CanIfCtrlCanCtrlRef 需要Can配置后再填写:

14. 配置CAN的参数;

     1) 配置Can/CanGeneral的参数;

      2) 在Can/CanConfigSet/CanController下增加一项:EcuTestNode:

    3) 为新建的EcuTestNode增加CanControllerBaudrateConfig配置:CanControllerBaudrateConfig.

    4) 在Can/CanConfigSet/CanHardwareObject下增加:HOH_0_EcuTestNode:

   5) 在Can/CanConfigSet/CanHardwareObject下增加:HOH_1_EcuTestNode:

 

15. 补填CanIf的参数

   1) CanIf/CanIfInitCfg/CanIfCtrlDrvCfg/CanIfCtrlDrvCfg/EcuTestNode/CanIfCtrlCanCtrlRef:

     2) CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitHohCfg/CanIfInitHohCfg/CanIfHrhCfg/HOH_1_EcuTestNode/CanIfHrhRangeCfg:

   3) CanIf/CanIfInitCfg/CanIfInitCfg/CanIfInitHohCfg/CanIfInitHohCfg/CanIfHthCfg/HOH_0_EcuTestNode/CanIfHthRangeCfg:

 

 

      

 

 

 

 

 

 

 

 

 

 

 

 

     

 

 

 

 

<think>好的,我需要帮助用户了解在EB工具中配置CAN功能的寻址方法。首先,我需要明确EB工具的具体指代,因为EB通常指的是Elektrobit,一家专注于汽车嵌入式软件的公司,他们的工具链可能包括CAN配置相关的软件如CANoe、CANbedded等。用户的问题涉及到配置CAN的寻址方式,这可能包括硬件寻址、报文ID配置、过滤器设置等。 根据用户提供的引用内容,引用[1]提到CanConfig包含CanController、CanHardwareObject、HOHConfig,而HOHConfig涉及发送和接收Object的个数和下标。这提示我需要从CanController和Hardware Object的配置入手,解释如何设置寻址参数。 接下来,我需要考虑嵌入式系统中CAN的寻址通常涉及哪些方面。CAN协议本身是基于报文ID的广播机制,但实际应用中可能需要通过硬件过滤器或软件配置来实现特定节点的寻址。因此,寻址方法可能包括: 1. 报文ID的分配和过滤:每个节点配置接收特定ID的报文,可能使用掩码来过滤。 2. 硬件对象(Hardware Objects)的配置:设置接收邮箱和发送邮箱的ID范围及过滤规则。 3. 控制器(CanController)的基础配置,如波特率、工作模式等,这些可能间接影响寻址。 4. 根据应用层需求,可能在软件层进一步处理寻址,例如网关转发时修改ID。 用户提到的HOHConfig中的发送和接收Object个数及下标,可能对应硬件对象(如CAN邮箱)的索引,需要配置每个对象处理的ID范围。例如,设置某个硬件对象仅接收特定ID范围的报文,从而实现硬件级别的过滤,减少CPU负载。 此外,引用[3]提到BSW中的COM需求、ECUM需求等,这可能涉及到通信栈的配置,包括CAN通信矩阵的定义,这属于更高层的配置,可能需要工具如AUTOSAR配置工具来完成。因此,在EB工具链中可能需要通过配置CAN通信矩阵(如ARXML文件)来定义报文和信号,再生成底层配置代码。 可能的步骤包括: -EB工具中创建或导入CAN通信矩阵,定义报文ID、信号等。 - 配置CanController参数,如波特率、采样点等。 - 配置Hardware Objects(HOH)的发送和接收邮箱,设置ID、掩码、过滤类型。 - 生成配置代码并集成到嵌入式软件中,验证功能。 需要确认EB具体工具的使用流程,例如使用CANbedded配置工具时,如何设置这些参数。同时,用户可能需要了解如何通过GUI或配置文件来调整这些设置,以及如何与硬件抽象层(如MCAL)进行交互。 最后,生成相关问题时,应围绕用户可能的后续疑问,如具体配置步骤、过滤器设置示例、调试方法、与AUTOSAR的集成等。</think>在EB(Elektrobit)工具链中配置CAN功能的寻址方法,需结合硬件对象(Hardware Objects)和控制器配置,以下是关键步骤: ### 1. **理解CAN寻址的核心配置** - **报文ID分配**:CAN协议通过$11$位(标准帧)或$29$位(扩展帧)唯一标识符实现寻址。例如,节点A发送ID为$0x100$的报文,节点B配置为接收该ID。 - **硬件过滤器**:通过掩码(Mask)和代码(Code)设置过滤规则,例如掩码$0x7FF$表示全匹配,代码$0x100$则仅接收该ID的报文[^1]。 ### 2. **EB工具中的具体配置流程** - **步骤1:配置CanController** ```c /* 设置波特率为500kbps */ CanControllerBaudrate = 500000; /* 工作模式:正常模式 */ CanControllerMode = CAN_MODE_NORMAL; ``` 此配置影响CAN控制器的全局行为,确保物理层参数正确。 - **步骤2:定义Hardware Objects(HOHConfig)** ```c /* 接收邮箱配置 */ CanHardwareObject RxMailbox = { .HohType = RECEIVE, .CanId = 0x100, // 目标ID .CanIdMask = 0x7FF, // 全匹配掩码 .BufferSize = 8 // 缓冲区深度 }; /* 发送邮箱配置 */ CanHardwareObject TxMailbox = { .HohType = TRANSMIT, .CanId = 0x200, // 发送ID .Priority = HIGH // 发送优先级 }; ``` 接收对象通过`CanId`和`CanIdMask`实现硬件过滤,减少CPU中断负载[^3]。 - **步骤3:通信矩阵集成(AUTOSAR兼容)** 在EB TresosCANbedded工具中导入ARXML文件,定义信号到报文的映射关系: ```xml <ECUC-MODULE-CONFIGURATION-VALUES> <CAN-FRAME Name="EngineSpeed"> <ID>0x100</ID> <DLC>8</DLC> </CAN-FRAME> </ECUC-MODULE-CONFIGURATION-VALUES> ``` 此步骤确保应用层信号(如车速)与底层报文ID的关联[^3]。 ### 3. **嵌入式系统优化注意事项** - **空间效率**:通过合理设置接收邮箱数量(`HOHConfig`中的接收Object个数),避免内存浪费[^2]。 - **实时性**:高优先级发送邮箱(如`TxMailbox.Priority = HIGH`)用于关键控制指令,确保实时响应。 ### 4. **验证与调试** - **使用CANoe模拟总线流量**,验证节点是否能正确收发目标ID的报文。 - **监控硬件过滤器命中率**,优化掩码配置以减少无效中断。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NMR0574

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值