EB tresos CAN模块配置

[S32K144] MCAL - CAN模块配置

一、CAN介绍

1.1 CAN

控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。 该协议的健壮性使其用途延伸到其他自动化和工业应用。 CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。

1.2 CANFD

CANFD是CAN with Flexible Data rate的缩写,翻译为【可变速率的 CAN】。 也可以简单的认为是传统CAN的升级版,其中要说明的是,只升级了协议,物理层没有改变。

1.3 邮箱

1.3.1 邮箱资源

在这里插入图片描述

1.3.2 邮箱构成

在这里插入图片描述邮箱结构如上图所示,前8个字节包含了报文的基本信息,后面是报文的数据,最多可以存放64个字节,各字段功能如下:

EDL:CAN / CAN FD
BRS:CAN FD帧格式的速率切换
ESI:标识发送节点是错误主动还是错误被动
CODE:邮箱当前状态(具体请参考 S32K-RM:Table 55-11)
SRR:保证数据帧格式优先于扩展帧(因此设置为扩展帧时此位置1)
IDE:标准帧 / 扩展帧
RTR:数据帧 / 远程帧
DLC:数据长度
TIME STAMP:时间戳(任何帧的标识符的第二位出现在总线上时,Free Running Timer (TIMER)值被捕获,当传输/接收结束时该值被写入TIME STAMP)
PRIO:优先级用于邮箱的发送仲裁
ID:报文ID

1.4 波特率计算方式

1.4.1 位时序概述

在这里插入图片描述

SS:同步段
PTS:传播时间段
PBS1:相位缓冲段 1
PBS2:相位缓冲段 2

这些段的作用是为了同步节点之间的数据传输,保证采样点的一致性,在同一个CAN网络中,所有节点根据MCU频率、采样点都会指定位时序的参数,例如我是零部件供应商,那么我会根据主机厂给定的CAN开发协议来设定这些值。

第一采样点计算公式:SP = (SS + PTS + PTS1)/ (SS + PTS + PTS1 + PTS2)

第二采样点计算公式:SSP = OFFSET * DIV / Bit Time + 5%
注意:

1、OFFSET * DIV :取决于芯片类型,有些要求使用分频前的时钟进行计算,有些需要使用分频后的时钟进行计算
2、5%:偏差值,需要根据不同芯片实际测量值所得
1.4.2 波特率计算公式

在这里插入图片描述PE Clock:CAN模块的报文发送与接收都是由PE Engine控制,它的时钟频率决定波特率。

如下图所示,PE Clock的时钟源有两个选择,外设时钟频率和晶振时钟频率,如果对于通信时序公差比较严格,则建议使用晶振时钟频率(防抖效果更好)。
在这里插入图片描述
CAN通讯中,一个数据位由4各段组成,每个段由多个Tq组成,一个数据位则由多个Tq组成,最终波特率计算公式如下所示:
① Tq = (PRESDIV + 1) / fcanclk
② CAN Bit Time = (Number of Time Quanta in 1 bit time) * Tq
③ Bit Rate = 1 / CAN Bit Time

例:CAN波特率为500kHz,输入时钟选择外设时钟(SYS_CLK:80MHz):
① CAN Bit Time = 1 / Bit Rate = 1 / 500kHz = 0.000002s
② 0.000002 = Num * (PresDiv + 1)/ 80MHz
③ Num * (PresDiv + 1)= 160
Num:8 ~ 25
PresDiv:0 ~ 255
因此我们可以配置PresDiv:7,Num:20

④ Num分配的依照产品开发的CAN协议手册规约,每个产品开发的时候都有严格的约束

二、API介绍

在这里插入图片描述

三、模块配置

在这里插入图片描述
Can Main Function Busoff Period:Can_MainFunction_BusOff函数的调用周期(CAN驱动中不使用,应在上层SchM模块使用)
Can Main Function Mode Period:Can_MainFunction_Mode函数的调用周期(CAN驱动中不使用,应在上层SchM模块使用)
Can Multiplexed Transmission:多路传输,启用后,如果目标MB处于Busy状态,则寻找其他空闲的且Object ID相同的邮箱进行发送
Can Maximum Message Buffers:最大邮箱个数
CanLPduReceiveCalloutFunction:LPDU(Id/Data/Length)接收回调函数
Can define loop as cycle:不使用OS的情况下勾选,不勾选则会引入"Os.h"
Can Timeout Duration (in Number of loops) :超时时间,各个循环中的超时计数
Can Extended ID Support:ID数据类型(true:uint32 false:uint16)
Can MB Count Extension Support:邮箱数据类型(true:uint16 false:uint8),如果定义的邮箱个数超过255,则必须开启
Message buffer data size:数据域大小(在控制器的波特率界面开启CAN FD后生效)

3.1 CanController

在这里插入图片描述Can Hardware Channel:CAN硬件通道选择
Can Controller Activation:勾选后此通道的配置信息才会生效,否则生成的配置信息都是空的
Can Rx Processing Type:中断/轮询确认接收数据
Can Tx Processing Type:中断/轮询确认发送数据
Can BusOff Processing Type:中断/轮询确认BussOff
以上三者相同,选择触发事件后是通过轮询的方式还是中断的方式获取通知信息

Can Listen Only Mode:只收不发模式
Can Loop Back Mode:自发自收模式
Can Lowest Buffer Transmit First:仲裁机制(邮箱编号越低优先级越高)
Can Local Priority Enable:仲裁机制(本地优先级 - 参考仲裁机制部分)
Can Clock from Bus:PE时钟选择(true:系统时钟 false:外设时钟)
Can Controller Default Baudrate:波特率
Can CPU Reference Clock:参考时钟

3.2.1 CanControllerBaudrateConfig

3.2.1.1 General

在这里插入图片描述Can Time Segments Checking:位序列检查
Can Tx ArbitrationStart Delay:仲裁启动延迟
Can Controller Prescaller:时钟分频(生成的配置自动-1)
Can Controller BaudRate:波特率
Can Propagation Segment:传播时间段(生成的配置自动-1,范围1~8)
Can Phase Segment 1:相位缓冲段1(生成的配置自动-1,范围1~8)
Can Phase Segment 2:相位缓冲段2(生成的配置自动-1,范围2~8)
Can Resynch Jump Width:跳转宽度(范围1~4)

3.2.1.1 CanControllerFdBaudrateConfig

在这里插入图片描述Can FD Controller BaudRate (dynamic range):波特率
Can FD Propagation Segment:传播时间段
Can FD Phase Segment 1:相位缓冲段1
Can FD Phase Segment 2:相位缓冲段2
Can FD Resynch Jump Width:相位缓冲段2
CanControllerTxBitRateSwitch:速率切换
CanControllerFdIsoCANFD:使能CAN FD

3.3 CanHardwareObject

在这里插入图片描述FD padding value:CAN FD填充数据(使能CAN FD后开启)
Can Implementation Type:Basic / Full
Can ID Message Type:报文类型(标准 / 扩展 / Mixed)
Can ID Bits Local Priority:本地优先级,用于发送时邮箱仲裁机制(范围:0~7)
Can Object ID:HOH句柄
Can MB Type:邮箱类型(发送 / 接收)
CanTriggerTransmitEnable:
Can Controller Reference:控制器选择
Can MainFunction RW Period Reference:读写轮询周期选择
Can Hw Filter Code:匹配码
Can Hw Filter Mask:掩码

3.4 CanMainFunctionRWPeriods

在这里插入图片描述
生成如下宏定义供上层使用,CAN驱动自己不使用:
#define CAN_MAINFUNCTION_PERIOD (0.001F)
#define CAN_MAINFUNCTION_PERIOD_READ (0.001F)
#define CAN_MAINFUNCTION_PERIOD_WRITE (0.001F)

四、掩码配置介绍

4.1 HwFilterCode / HwFilterMask

Can Hw Filter Code:匹配码的作用是用于和接收到的报文做比较
Can Hw Filter Mask:掩码的作用是决定比较ID的哪几个Bit

如下图所示,掩码置1的位置,报文ID和匹配码必须一致,否则将被过滤,掩码置0的位置忽略比较。

	/*
	 *	报文ID: 0x1BB -> 0 0 0 1  1 0 1 1  1 0 1 1
	 *	匹配码: 0x1FB -> 0 0 0 1  1 1 1 1  1 0 1 1
	 *
	 *	掩码:   0x100 -> 0 0 0 1  0 0 0 0  0 0 0 0
	 */
	void MaskCalc()
	{
   	 	uint code = 0x15F;
    	uint mask = 0x7FF;

    	uint[] id = { 0x188, 0x198, 0x257};

    	foreach (var item in id)
    	{
        	mask &= ~(code ^ item);
   	 	}
		printf(mask);
	}

4.2 Basic / Full

Basic:该邮箱允许接收一组报文
现象:接收由Can Hw Filter Code和Can Hw Filter Mask划定范围的报文。
原理:Can Hw Filter Code被设置到邮箱的ID字段,Can Hw Filter Mask被设置到该邮箱对应的RXIMR寄存器。

Full:该邮箱只接收一个报文
现象:只接收与Can Hw Filter Code一致的报文。
原理:Can Hw Filter Code被设置到邮箱的ID字段,RXIMR寄存器设置为0xFFFFFFFF(所有位都匹配)。

<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的报文。 - **监控硬件过滤器命中率**,优化掩码配置以减少无效中断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XU JUNNY

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

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

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

打赏作者

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

抵扣说明:

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

余额充值