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
    +关注

    关注

    56

    文章

    2459

    浏览量

    459025
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1314

    浏览量

    113683
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43046
收藏 人收藏

    评论

    相关推荐

    GTM的TIM时钟和TOM时钟关联?

    GTM的TIM时钟和TOM时钟关联
    发表于 02-21 06:11

    GTM中TIM的时钟与TOM的时钟关联?

    GTM中TIM的时钟与TOM的时钟关联?
    发表于 02-01 06:30

    串行线调试与JTAG区别

    在基于ARM7的ADuC器件上,通过JTAG调试和下载到Flash。在AduCM360上,JTAG被串行线调试取代。 串行线调试与JTAG区别?我是否需要新的工具和新的仿真器?
    发表于 01-15 07:35

    ADuCM360与ADuCM361什么区别

    ADuCM360与ADuCM361区别
    发表于 01-15 07:29

    请问ADuM524x和ADuM12xx系列有区别

    请问ADuM524x和ADuM12xx系列有区别
    发表于 01-03 09:25

    AD5422采用的输出原理,和FLUKE之类的信号源区别

    :AD5422采用的输出原理,和FLUKE之类的信号源区别。 疑问2:长度为30米左右的接线引入的电感是否足以影响AD5422的输出电流。
    发表于 12-15 06:27

    请问AD8601WARTZ和AD8601WDRTZ什么区别

    请问AD8601WARTZ和AD8601WDRTZ分别,价格不同,性能方面有差异吗
    发表于 11-17 15:57

    什么是机器周期?机器周期和晶振频率关系?

    什么是机器周期?机器周期和晶振频率关系?当晶振频率为6MHz时,机器周期是多少?
    发表于 11-01 07:46

    请问MCU和PC在代码加载和运行上有区别吗?

    MCU和PC在代码加载和运行上有区别吗?
    发表于 10-30 07:59

    DCM与CCM PFC控制相比优劣?

    DCM 与CCM PFC控制相比优劣
    发表于 10-19 06:41

    【verilog每日一练】repeat(n)@(posedge clk)和“#”控制仿真信号延时的区别

    请描述以下两种方法产生的信号区别
    发表于 09-11 15:40

    功率单位kW与kVA,联系?区别

    电源电路电网
    学习电子知识
    发布于 :2023年08月01日 22:33:54

    hpmicro fork出来的riscv-gnu-toolchain与上游什么区别

    找遍官网没找到先关信息。几个疑问 hpmicro fork出来的riscv-gnu-toolchain 与上游区别? 看到论坛里
    发表于 05-26 07:13

    请问HPM6000系列CPU中断特点,注意事项哪些?

    HPM6000系列CPU中断特点,注意事项哪些?
    发表于 05-26 06:19

    MIMO-OFDM系统信道容量与MIMO-OFDM系统吞吐量区别

    MIMO-OFDM系统信道容量与MIMO-OFDM系统吞吐量区别?它们的单位一样吗?
    发表于 05-16 16:33