0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FullCAN和BasicCAN是什么?有何区别

冬至配饺子 ? 来源:开心果 Need Car ? 作者:开心果 Need Car ? 2022-08-29 17:21 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在搞清楚FullCAN和BasicCAN是什么之前,我们先搞清楚一些基础的东西。

1基础概念

提示:

英飞凌tc397为例。

1、CAN Module与CAN Node、Controller关系

平时开发中,我们说“ECU有3路CAN”,所说的“3路CAN”和3个Node是一个概念吗?不是。

我们平时所讨论的“3路CAN”是指3个网络,也就是我们口语中的“节点”。而芯片手册中(Data Sheet),一个CAN Module会包含多个Node(即,Controller),比如:tc397芯片手册中,MCMCAN Module包含3个CAN Module,每个Module包含4个Controller,如下所示:

pYYBAGMMg-OAYC3EAACJ9INnbJ4061.png

2、Controller与Transceiver关系

在实际的使用中,一个Controller必须配一个Transceiver,Controller+Transceiver = Network,如下所示:

pYYBAGMMg_qAOwu0AAByyEGH10M579.png

所以,平时我们口语话的“3路CAN”是指3个Controller+Transceiver组合,即:3个Network,我们也常称“3个节点”。

3、Controller与RAM资源关系

刚提到,tc397中,一个CAN Module包含4个Controller,那每个Controller可以发送多少个CAN报文,接收多少个CAN 报文呢?这里我们要区分硬件缓存CAN报文的数量和项目中要求发送/接收报文的数量。

硬件缓存CAN报文数量:是指上层请求发送报文或者接收报文时,CAN驱动最多能缓存的数量;

项目中要求发送/接收报文的数量:是指当前节点要外发或者接收的报文数量。

以发送CAN报文数量为例:需求要求当前网络节点发送100帧CanID不同的CAN报文,实际该节点CAN Controller可用的硬件发送缓存区最多有32,意味着底层硬件最多缓存32帧发送报文,如果超过32帧发送请求,则会因没有硬件空间缓存而发送请求失败。

tc397 CAN Module资源情况如下所示:

poYBAGMMhA-ALhjvAAEM-o0W0yY411.png

提示:上图中的Controller用“Node”表示。由上可以看出,3个CAN Module,共12个Controller。

每个CAN Module(4个Controller)共用32个发送Tx Buffer,共用64个Rx Buffer

...对于发送缓冲区,每个CAN Module共用32个发送缓冲区,如果配置了32个TxDedicated Buffer,则没有空间配置Tx FIFO/Queue;同理,每个CAN Module虽然有两个Rx FIFO,如果配置了64个Rx Dedicated Buffer,则没有空间配置Rx FIFO。一般,Tx/Rx Buffer配置时,会混合使用,比如:

20TxDedicated Buffer+ 12Tx Queue

40 RxDedicated Buffer+ 24Rx FIFO

MCMCAN

Module RAM区地址划分顺序如下所示:

poYBAGMMhCSAMIl3AADNZfS_IJs890.png

4、Mailbox、HRH、HWObject

Mailbox:邮箱,就是CAN驱动所具有的接收缓存区和发送缓存区,接收缓存区和发送缓存区均在RAM区。

HWObject:硬件对象,包含CAN ID、DLC、Data等信息的RAM区。

HRH:Hardware Receive Handle,接收句柄,一个HRH表示一个接收HWObject。

HTH:HardwareTransmitHandle,发送句柄,一个HTH表示一个发送HWObject。

Mailbox、HWObject、HRH、HTH、Controller、Transceiver之间的关系如下所示:

pYYBAGMMhDqAQ0yiAAC0PLOriVc031.png

2FullCAN和BasicCAN是什么?

首先,FullCAN和BasicCAN是CanIf模块配置的参数。

BasicCAN:一个HWObject(HardwareObject)可以处理一段范围的CanId

FullCAN:一个HWObject(HardwareObject)只能处理单个CanId

Autosar对FullCAN和BasicCAN的解释如下所示:

poYBAGMMhImAcUxCAABo9GVkPgI211.png

将上述的解释进一步细化,如下所示:

pYYBAGMMhEqAXgHCAADCYTX5JVU641.png

使用工程中,MCAL会将缓存区分配成FIFO和Dedicated Buffer,FIFO和Dedicated Buffer的区别是什么呢?Dedicated Buffer区域,Hareware Object与HRH/HTH一一对应,而FIFO区域,一个HRH/HTH对应多个HarewareObject,如下所示:

pYYBAGMMhGqADKl6AAC7wZ8Ce7g609.png

3为什么需要FullCAN和BasicCAN?

在CAN驱动层,可以通过过滤的方式,过滤一段范围内的CanID,也就是说:会有一段范围内的报文接收进来,但是接收进来的这一段范围的报文并不一定都是上层所需要的,怎么办呢?用软件方式,再过滤一遍,由CanIf过滤所需要的CAN报文。因此,提出了FullCAN和BasicCAN的概念。

比如:HRH对应BASIC CAN类型,接收CanID范围:0x10~0x18,CanIf根据过滤算法,在0x10~0x18范围内过滤出需要的0x10、0x13、0x14、0x16、0x17送给上层,而其余的丢弃,如下所示:

poYBAGMMhJ-AQzbBAADAas-Dt-k646.png

CanIf可以通过设置CANIF_HRHRANGE_LOWER_CANID、CANIF_HRHRANGE_UPPER_CANID方式过滤,也可以通过设置CANIF_HRHRANGE_BASEID、CANIF_HRHRANGE_MASK进行过滤。

不同报文类型如何选择FULL CAN/BASICCAN

应用报文:一般选择配置成FULL CAN类型,对于应用报文,一般不需要缓存,使用最新接收的数据即可。对于发送的应用报文,都配置成FULL CAN类型需要一个前提:上层需要发送应用报文数量<底层硬件缓存区数量。比如:底层发送硬件缓存区数量为32,节点需要发送的应用报文数量为50,显然无法将50个发送的应用报文都配置成FULL CAN。遇到这种情况,一般会将重要的应用报文配置成FULL CAN,而其他要发送的应用报文配置成BASIC CAN。这样配置以后,硬件缓存区的分配就需要混用,即:Dedicated Tx Buffers+Tx Queue或者 Dedicated Tx Buffers+Tx FIFO,如下所示:

poYBAGMMhLKAa0SPAAC5rWvshB8966.png

如上图,ID3、ID15、ID20是比较重要的应用报文,配置成FULL CAN,分别给一个独立的缓存区;其他的缓存区则配置成BASIC CAN,即:一个缓存区可以发送多个不同CanID的报文。

诊断报文:一般选择配置成BASIC CAN类型(结合FIFO Buffer使用),因为诊断报文的请求/响应不能错序,需按照顺序处理,且数据不能覆盖;

网络管理报文:接收一般选择配置成BASIC CAN类型,因为一个节点一般会要求接收一段范围的网络管理报文,eg:0x500~0x53F。发送网络管理报文配置成FULL/BASIC CAN类型均可,如果资源够用,推荐配置成FULL CAN类型,因为每个节点的发送网络管理报文唯一;

标定报文:一般选择配置成FULL CAN类型。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2923

    浏览量

    468522
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1392

    浏览量

    117773
  • fifo
    +关注

    关注

    3

    文章

    402

    浏览量

    44913
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何区别断路器壳架电流、额定电流和整定电流

    最近大家讨论比较多的话题是如何区别断路器壳架电流、额定电流和整定电流,以及三者之间联系。
    的头像 发表于 06-30 09:58 ?1734次阅读
    如何<b class='flag-5'>区别</b>断路器壳架电流、额定电流和整定电流

    永磁电机 VS 普通电机,这两个区别

    · 电机是现代工业的心脏,广泛应用于各个领域。永磁电机和普通电机作为两种主要类型,到底区别?今天小编带你一起来了解下:? ü 运行效率: ①永磁电机因无需外部励磁,显著降低能量损耗,效率普遍高出
    的头像 发表于 05-29 08:41 ?732次阅读

    GD32与STM32什么区别

    电子发烧友网站提供《GD32与STM32什么区别.docx》资料免费下载
    发表于 04-03 17:27 ?0次下载

    分布式存储和集中式存储区别

    存储产品千千万,选来选去怎么办? 戴小编来献妙策,匹配需求不为难!分布式存储和集中式储是存储系统中十分重要的两种架构类型,但这两者区别?适合怎样的业务需求?今天戴小编就来一一解答。
    的头像 发表于 02-28 10:56 ?1273次阅读

    私有云和公有云什么区别

    私有云和公有云在多个方面存在显著的区别,以下是具体的比较,主机推荐小编为您整理发布私有云和公有云什么区别
    的头像 发表于 02-20 10:38 ?803次阅读

    audio CODEC AGC跟DRC区别

    audio CODEC AGC 跟DRC 区别?求详解,thanks
    发表于 01-09 07:29

    ADS1256中的SYSGCAL系统增益校准和SELFGCAL增益自动校准什么区别

    请问一个问题:ADS1256中的SYSGCAL系统增益校准和SELFGCAL 增益自动校准什么区别?SELFCAL 偏移和增益自动校准又有区别?SELFOCAL偏移自动校准又何
    发表于 12-13 12:22

    你听说过MIPS吗?它和ARM区别

    基于MIPS指令集的君正X2000处理器。有些工程师对于MIPS不怎么了解,究竟MIPS和ARM区别呢?本期文对MIPS做一个简单介绍。MIPS和ARM都属于
    的头像 发表于 11-23 01:05 ?831次阅读
    你听说过MIPS吗?它和ARM<b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?

    【迅为电子】龙芯LS2K1000LA和LS2K1000区别

    【迅为电子】龙芯LS2K1000LA和LS2K1000区别
    的头像 发表于 11-13 14:13 ?799次阅读
    【迅为电子】龙芯LS2K1000LA和LS2K1000<b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?

    TAS5611M1,M2,M3模式设置脚,TAS5611的AD模式 BD模式什么区别

    TAS5611M1,M2,M3模式设置脚,请教一下芯片的AD模式BD模式区别
    发表于 10-16 07:55

    左行绕组和右行绕组区别

    左行绕组和右行绕组主要在绕线方向、电流流动方向、磁场方向以及应用场景等方面存在区别,以下是具体的比较: 一、绕线方向 左行绕组 :绕线的旋转方向是逆时针。 右行绕组 :绕线的旋转方向是顺时针。 二
    的头像 发表于 10-08 10:50 ?1852次阅读

    毫伏表与万用表区别

    毫伏表与万用表在多个方面存在显著的区别,这些区别主要体现在它们的用途、测量范围、精度、输入阻抗以及工作频率等方面。
    的头像 发表于 10-03 16:23 ?2321次阅读

    TPA3112D1PWPR与TPA3112D1PWP区别

    TPA3112D1PWPR与TPA3112D1PWP区别
    发表于 09-09 07:48

    请问单端音频和差分音频区别

    单端音频和差分音频区别?一个是单声道一个是立体声?
    发表于 08-13 07:37

    旧款泰克TCP202和当前款TCP202A之间区别

    这两种电流探头的区别。 问题: 泰克旧款的TCP202电流探头和当前款TCP202A之间区别? 答案: 不同之处在于: 1. TCP202 的钳口尺寸为 3.8 毫米,而 TCP2
    的头像 发表于 08-12 10:49 ?1002次阅读
    旧款泰克TCP202和当前款TCP202A之间<b class='flag-5'>有</b><b class='flag-5'>何</b><b class='flag-5'>区别</b>?