点击返回「《Autosar_MCAL高阶配置》总目录」
目录
1 什么是FullCAN和BasicCAN
1.1 FullCAN / Basic CAN HRH区别
1.2 FullCAN / Basic CAN HTH区别
1.3 FullCAN和Basic CAN存在的原因
1.4 FullCAN/Basic CAN HRH/HTH如何选择
2 如何配置FullCAN和BasicCAN
3 来自CAN Driver的理论基础
4 结尾
关键字:
Hardware Object / HW Object 硬件对象
CAN Mailbox 邮箱
HOH:Hardware Object Handle 硬件对象句柄
HRH:Hardware Receive Handle 硬件接收句柄
HTH:Hardware Transmit Handle 硬件发送句柄
MB:Message buffer
注:上述概念详解,详见博文“【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系https://blog.csdn.net/qfmzhu/article/details/126754519”。
在CanIf模块中的“7.7 BasicCAN and FullCAN reception”章节给出了如下定义:
“用于FullCAN operation的一个CAN mailbox(Hardware object)仅启用单个CanId的发送或接收。因此,一个Hardware object的BasicCAN operation能够发送或接收一个范围的CanId。”
在CAN Drive模块中,参数CanHandleType的枚举值给出了如下定义:
下图直观且详细地展示了FullCAN和BasicCAN的用法和差异。
接收CAN ID的数量 |
Hardware /Software Filter |
HW Object使用情况 |
|
FullCAN HRH |
一个CANID (通过参数CanIdValue指定) |
不适用 |
一个HRH对应一个HW Object |
BasicCAN HRH |
一组/范围的CANID (HW/SW Filter,Range,Mask) |
适用 |
用于配置的BasicCAN接收的Hardware Receive Object能够接收通过其hardware acceptance filter的一系列CanId。此范围可能超出此HRH要接收的预定义Rx L-PDU列表。因此,CanIf随后将执行Software filter以仅将预定义的Rx L-PDU列表传递给相应的upper layer module。如果底层CAN controller提供,则CanIf可以使用多个BasicCAN和FullCAN HRH。
BasicCAN和FullCAN operation的主要区别在于需要一个software acceptance filtering mechanism。详见博文“【AUTOSAR-CanIf】-2.2-图解常用Software Filter Algorithm及其应用场景https://blog.csdn.net/qfmzhu/article/details/126507531”
发送CAN ID的数量 |
HW Object使用情况 |
|
FullCAN HTH |
一个CANID |
一个HTH对应一个HW Object |
BasicCAN HTH |
一组的CANID |
一个ECU在一个CAN网络当中往往需要收发几十个(甚至上百个)CAN Message,但芯片的资源的是有限的。以S32K系列芯片为例,一个CAN Controller最多只有32个MB(Message Buffer),如果CAN Drive模块中,所有RX Hardware Object的CanHandleType = FullCAN,则最多也只能接收32个CAN Messsge(假设此时不考虑发送)。
原因是:FullCAN一个Message Buffer仅接收一个CAN ID。为了能够解决该问题,这也是CanHandleType = FullCAN和BasicCAN(BasicCAN一个Message Buffer可以接收多个CAN ID)经常混合使用的原因(有时甚至所有的RX/TX HW Object都使用CanHandleType = BasicCAN)。
详见博文“【MCAL_CANDriver】-2.1-硬件过滤(Hardware Filter)详述及配置https://blog.csdn.net/qfmzhu/article/details/126713246”。
NM网络管理报文:特定帧唤醒使用FullCAN(如果硬件资源不够,使用BasicCAN);如果是一定范围NM网络管理报文(如CAN ID:0x400~0x4FF),使用BasicCAN。
APP报文:重要的Message(如E2E Message)使用FullCAN(如果硬件资源不够,使用BasicCAN),不重要的报文,使用BasicCAN
UDS/OBD诊断报文:一般使用BasicCAN。
在/Can/CanConfigSet/CanHardwareObjects/CanHardwareObject路径下,您会看到这些参数CanHandleType,CanObjectId,CanObjectType。
这些参数与FullCAN/BasicCAN HRH/HTH关系见下表。
CanHandleType |
CanObjectId |
CanObjectType |
|
FullCAN HRH |
FULL |
HRH的编号 |
RECEIVE |
BasicCAN HRH |
BASIC |
RECEIVE |
|
FullCAN HTH |
FULL |
HTH的编号 |
TRANSMIT |
BasicCAN HTH |
BASIC |
TRANSMIT |
在CanIf模块中CanIfHrhCfgs和CanIfHthCfgs中,分别通过参数CanIfHrhIdSymRef和CanIfHthIdSymRef引用CanHardwareObjects中的Hardware Object,最后在CanIfRxPduCfgs和CanIfTxPduCfgs中,将RX/TX L-PDU与HRH和HTH进行关联。
SWS Item |
ECUC_Can_00323: |
|||
Name |
CanHandleType |
|||
Parent Container |
CanHardwareObject |
|||
Description |
指定Hardware Object的类型(Full-CAN或Basic-CAN)。 |
|||
Multiplicity |
1 |
|||
Type |
EcucEnumerationParamDef |
|||
Range |
BASIC |
Hardware Object处理多个L-PDU |
||
FULL |
Hardware Object仅处理一个L-PDU(标识符) |
|||
Post-Build Variant Value |
true |
|||
Value Configuration Class |
Pre-compile time |
X |
VARIANT-PRE-COMPILE |
|
Link time |
-- |
|||
Post-build time |
X |
VARIANT-POST-BUILD |
||
Scope / Dependency |
scope: ECU dependency:此配置元素仅用作CanIf的信息。相关的CAN Driver配置是通过filter mask和identifier完成的。 |
|||
获取更多“汽车电子资讯”和“工具链使用”,
请关注“汽车电子助手”,做您的好助手。