【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用

2023-05-16

点击返回「《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之间的关系icon-default.png?t=M85Bhttps://blog.csdn.net/qfmzhu/article/details/126754519”。

1 什么是FullCAN和BasicCAN

CanIf模块中的“7.7 BasicCAN and FullCAN reception”章节给出了如下定义:

“用于FullCAN operation的一个CAN mailboxHardware object)仅启用单个CanId的发送或接收。因此,一个Hardware object的BasicCAN operation能够发送或接收一个范围的CanId。”

CAN Drive模块中,参数CanHandleType的枚举值给出了如下定义:

  1. FullCAN:一个Hardware Object仅能处理一个L-PDU;
  2. BasicCAN:一个Hardware Object可以处理多个L-PDU;

下图直观详细地展示了FullCAN和BasicCAN的用法和差异。

 

1.1 FullCAN / Basic CAN HRH区别

接收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可以使用多个BasicCANFullCAN HRH

BasicCAN和FullCAN operation的主要区别在于需要一个software acceptance filtering mechanism。详见博文“【AUTOSAR-CanIf】-2.2-图解常用Software Filter Algorithm及其应用场景icon-default.png?t=M85Bhttps://blog.csdn.net/qfmzhu/article/details/126507531

1.2 FullCAN / Basic CAN HTH区别

发送CAN ID的数量

HW Object使用情况

FullCAN HTH

一个CANID

一个HTH对应一个HW Object

BasicCAN HTH

一组的CANID

1.3 FullCAN和Basic CAN存在的原因

一个ECU在一个CAN网络当中往往需要收发几十个(甚至上百个)CAN Message,但芯片的资源的是有限的。以S32K系列芯片为例,一个CAN Controller最多只有32MB(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)详述及配置icon-default.png?t=M85Bhttps://blog.csdn.net/qfmzhu/article/details/126713246”。

1.4 FullCAN/Basic CAN HRH/HTH如何选择

NM网络管理报文:特定帧唤醒使用FullCAN(如果硬件资源不够,使用BasicCAN);如果是一定范围NM网络管理报文(如CAN ID:0x400~0x4FF),使用BasicCAN。

APP报文:重要的Message(如E2E Message)使用FullCAN(如果硬件资源不够,使用BasicCAN),不重要的报文,使用BasicCAN

UDS/OBD诊断报文:一般使用BasicCAN。

2 如何配置FullCAN和BasicCAN

/Can/CanConfigSet/CanHardwareObjects/CanHardwareObject路径下,您会看到这些参数CanHandleTypeCanObjectIdCanObjectType

这些参数与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模块中CanIfHrhCfgsCanIfHthCfgs中,分别通过参数CanIfHrhIdSymRefCanIfHthIdSymRef引用CanHardwareObjects中的Hardware Object,最后在CanIfRxPduCfgsCanIfTxPduCfgs中,将RX/TX L-PDU与HRH和HTH进行关联。

3 来自CAN Driver的理论基础

SWS Item

ECUC_Can_00323:

Name

CanHandleType

Parent Container

CanHardwareObject

Description

指定Hardware Object的类型(Full-CANBasic-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完成的。

4 结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注“汽车电子助手”,做您的好助手。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用 的相关文章

  • Git彻底删除历史记录中大文件

    在做项目时 使用Git为版本控制时 经常会有小伙伴提交一些二进制的大文件到git xff0c 使用版本库变的臃肿 等到发现用git rm删除那个文件 但这样做显然是不够的 xff0c 这些文件并没有真正在项目中被用到 xff0c 与此同时这
  • Archlinux在升级后无法进入图形桌面

    Archlinux系统在经历了一个多小时的升级后 终于升级完成 但重启后 xff0c 就进不了系统 xff0c 出现错误提示 系统出问题 请联系管理员 Archlinux升级命令 yay span class token parameter
  • Docker使用普通用户运行

    Docker 守护程序绑定到 Unix 套接字 xff0c 而不是 TCP 端口 默认情况下 xff0c 拥有 Unix 套接字的是用户 xff0c 其他用户只能使用 Docker 守护程序始终以用户身份运行 span class toke
  • OpenCV学习实践(2) 获取当前工作空间目录

    0 前言 因为opencv涉及导入本地图片 cv imread函数 又不想一直使用绝对路径 使用相对路径有一直出错 所以想先看看当前工作目录在哪 此外 这里还使用roslaunch启动程序 使当前工作目录更难找了 感谢tjf ym两位师兄的
  • STM32的SPI

    1 SPI硬件层共有4个引脚SCK MISO MOSI NSS 不需要接上拉及下拉电阻等 2 SPI跟I2C一样是一种通讯总线 所以可以挂载多个从机 通过NSS片选引脚控制从机 3 SPI主模式时钟与挂载总线相关 STM32时钟为fpclk
  • AC-AC变换电路

    1 工频变压器变换 隔离变压器安全性高 xff0c 但效率低于自耦变压器 2 自耦变压器变换电压 非隔离型变压器 xff0c 效率高但安全性不高 3 阻容降压电路 利用电容隔直通交的特性 xff0c 容抗 Xc 61 1 2 fc 当频率非
  • 使用matlab曲线拟合

    1 excl中的x y变量参数 2 使用matlab中的导入数据 选择刚刚的表格 3 导入选项中选择列向量 4 在matlab命令行中输入函数plot M1 M2 其中M1 M2是x y变量 5 然后会显示新窗口 在新窗口中使用工具的基本拟
  • LLC软开关笔记

    1 增益 当工作在谐振频率时 LLC的增益为1 开关频率高于谐振频率 增益降低 开关频率低于谐振频率时 增益大于1 当开关频率过高 增益过小时 需要进入打嗝模式 2 mos零电压开通 要保证mos的软开 首先要保证一定的死区时间 在死区时间
  • simulink PID自动整定

    使用此方法可以快速得出PID参数而不用经过复杂的计算 电压电流环均可使用此方法 1 模型搭建完成后点击PID模块的Tunne 选项进入PID Tunner模块 2 由于模型为非线性对象需要识别控制对象 点击 plant gt Identif
  • 以Boost为例的type3电压环补偿器实例

    因为零极点控制在开关电源当中对于控制系统稳定性具有较大的自由度 最近半年一直在研究学习开关电源中的零极点控制 零极点控制对于我在内的大部分人来说应该是难点 因为数学模型推导计算复杂 难度较高 最近半年一直翻书查阅资料还是没有完全掌握 所幸通
  • Simulink 使用C语言发PWM波 (一)

    1 在matlab中安装C语言模块mingw 2 在simulink中引用S Function模块 和S Function Examples模块 3 使用S Function Examples模块创建C文件 双击S Function Exa
  • Simulink 使用C语言发PWM波 (二)触发采样

    1 定义结构体 2 定义S Function输出端口数量 3 定义采样时间 4 初始化参数 5 用代码实现三角波载波 根据调制波配置占空比并在计数器为0时采样电感电流 6 simulink图 至此实现了电感电流使用C语言采样
  • c++的几个刷题网站(不只有c++)

    oj joyskid cn 116 55 251 18 9902 ybt ssoier cn 8088 http hihocoder com https www lintcode com https vjudge net https www
  • Putty登陆root输入密码被拒绝(没开启ssh)

    输入密码 xff0c 提示Access denied 考虑是因为没有开启ssh xff0c 检查后发现未安装ssh yum y install openssh 提示出错 xff0c yum install tree也不行 xff0c 猜是源
  • ubuntu系统(三):c++ serial使用与学习

    0 前言 目前讲解单一知识点 xff0c 觉得最好的就时c 43 43 官方 xff08 官方网站 xff09 给的说明 xff0c 链接如下 xff1a serial 1 1 0 http wjwwood io serial doc 1
  • python编程入门书籍-最适合Python初学者的6本书籍推荐「必须收藏」

    原标题 xff1a 最适合Python初学者的6本书籍推荐 必须收藏 Python是一种通用的解释型编程 xff0c 主要用于Web开发 机器学习和复杂数据分析 Python对初学者来说是一种完美的语言 xff0c 因为它易于学习和理解 x
  • Pixhawk遥控器无法检测&bootloader烧写

    Pixhawk detected 0 radio channel 导火索 xff1a 最近毕设想用pixhawk来做个东西 于是跟着官方的wiki xff0c 搭建起了编译环境 但是奇怪的事情突然发生了 我clong的是官方最新版的mast
  • 远程SSH连接Putty失败解决办法

    1 vi etc ssh sshd config 将PermitRootLogin的注释取消 xff0c 或者将no改为yes 2 service sshd restart 先测试此方法 xff0c 我测试通过 3 setup命令进入将防火
  • 面向服务的架构

    SOA 是一种在计算环境中设计 开发 部署和管理离散逻辑单元 xff08 服务 xff09 模型的方法 虽然 SOA 是基于对象的 xff0c 但是作为一个整体 xff0c 它却不是面向对象的 服务之间通过交互和协调完成业务的整体逻辑 所有
  • 百分百成功的ros安装教程,有手就能看懂!!!

    肯定有许多人在安装ros的过程中遇到过各种各样的问题 xff0c 接下来我将对ros安装进行详细的描述 1 下载操作系统 首先是版本的对应问题 xff0c ros安装一定要对应相应的操作系统版本 xff0c 这里我们要安装的是Ros Mel

随机推荐