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

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

3天内不再提示

CAN DLC与实际发送数据长度有何关系

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

扫码添加小助手

加入工程师交流群

Q1、Prepare Bus-Sleep Mode进入Network Mode条件

A1CAN网络管理中,Prepare Bus-Sleep Mode进入Network Mode可以通过三种方式,如下所示:

pYYBAGMG4JCALkZ3AACUY_N4y2I973.png

由CanNm_RxIndication()方式进入,即:在PBSM(Prepare Bus-Sleep Mode)下收到网络管理报文方式进入;

由CanNm_PassiveStartUp()方式进入。调用CanNm_PassiveStartUp()接口,表明网络需要被动唤醒,收到网络管理报文也属于被动接收,和CanNm_RxIndication()方式进入不一样吗?这里说一下个人理解:在PBSM模式下,ECU依然有接收报文的能力,如果接收到NM Msg,可以通过CanNm_RxIndication()接收,唤醒网络;如果收到特定的应用报文(比如:包含KL15信号的应用报文)或者诊断报文,也想把网络唤醒,显然非网络管理报文不会通过CanNm_RxIndication()接口接收,如果想让非网络管理唤醒网络,此时就可以让上层主动调用CanNm_PassiveStartUp()接口,进而唤醒网络;

由CanNm_NetworkRequest()方式进入,同CanNm_PassiveStartUp()方式,此方式也属于上层请求行为。不同于CanNm_PassiveStartUp()方式,此方式表明当前节点需要通信,需要主动唤醒网络。比如前面提到的一种情况:VFC置位时,即可主动调用CanNm_NetworkRequest()接口进入RMS状态。

Q2:CAN DLC与实际发送数据长度关系

A2:DLC(Data Length Code),一帧CAN报文中,发送数据的长度,用4个Bit表示。

对于ClassicalFrame,DLC的长度有效范围为0~8,对应的发送数据长度为0~8 bytes,如果DLC长度≥8,则发送数据长度为8 byte。

对于FD frame,DLC不仅可以等于0~8,还可以等于9~F,对应的数据长度分为12、16、20、24、32、48、64。如下所示:

pYYBAGMG4KiAOJJWAAEpyKwS8rM465.png

对于ClassicalFrame如果设置DLC = 4,实际在总线上传输的数据长度是4 byte还是8 byte?答:4 byte。虽然可以这样设置,但是工程实际中,很少这样用,一帧报文只传输4个数据或者更少,会降低有效数据负载,效率低。

注意:假设传输一个ClassicalFrame,虽然总线只传输4 byte数据,但是CAN模块消耗的硬件资源(RAM),实际是8 byte(eg:tc3xx)。

发送一帧CAN报文,对应一个Tx Buffer Element,在Tx Buffer Element中,根据发送CAN报文的类型决定消耗的DB(Data Buffer)大小,如下所示:

poYBAGMG4LyABLs6AACWlJ25nUA653.png

一帧CAN报文消耗多大的DB呢?DB空间的消耗,由TXESC.TBDS决定,因此,DB最小需要8 byte。如下所示:

pYYBAGMG4M-ANOLkAADNj0UUJrU566.png

什么意思呢?就是在硬件配置阶段,即使配置DLC = 4,但是一帧CAN报文也必须消耗8 byte的硬件RAM资源。而数据发送到总线时,只发送4 byte的数据。

Q3:$3E 80发送时机

A3:$3E 80的主要作用在于维持节点的会话状态,即:将节点维持在非默认会话。工程中,基于UDS软件升级过程中,Tester或者Gateway节点会使用功能寻址周期性发送$3E 80。何时发送$3E 80更合适呢?

本文主要想讨论$36服务过程中,何时发送$3E 80更恰当。软件升级过程中,一个$36 Block会发送大量数据,即:多帧传输,在多帧传输的过程中,发送一个$3E 80是否可行?答:可以,但是会带来风险。为什么这样说呢?多帧传输过程,一般使用物理寻址,针对特定节点升级,在多帧传输的过程中,发送一帧功能寻址的$3E 80,且中断接收,如果处理3E 80的中断例程耗时过多,导致连续帧会被延迟处理,连续帧被延时时间过长会导致接收丢帧的问题,即:下一个连续帧覆盖被延时处理的连续帧。以500Kbps通信的经典CAN为例,如果允许上位机/Gateway节点连续发送,1ms内可以发送三帧报文,也就是说:如果接收端没有在300us左右的时间内处理完连续帧,就可能会导致连续帧覆盖的问题,即:接收端接收丢帧。

pYYBAGMG4OWAL-hbAABuuhxFelE773.png

如上,讨论一种工况:

t0时刻,接收端中断收到$2A XxXx...(接收完成),进入中断例程处理$2A XxXx...数据(主要是通知上层Copy数据);

t1时刻,接收端中断收到$3E 80,进入中断例程处理3E 80数据;

t2时刻,接收端中断收到连续帧$2BXxXx...,由于同一中断(均是接收中断,优先级一样)正在执行,2BXx Xx...数据暂时不能处理;

t3时刻,3E 80数据处理完成,同时收到连续帧$2CXx Xx...,如果$2BXx Xx...和$2CXx Xx...使用同一个硬件缓存区,会导致连续帧$2CXx Xx...覆盖连续帧$2BXxXx...的工况。所以,为避免接收丢帧,接收缓存区一般会配置多一些,一般工程中会将资源全部使用或者用FIFO方式接收。

理想工况,这种连续帧插入3E 80的行为不会出现问题(中断例程不要处理大量逻辑),但在工程实际中,偶尔会遇到并行发送功能寻址$3E 80,导致连续帧发送问题的Bug。

一般在处理多帧发送过程中,如果上位机或者Gateway节点发送功能寻址的$3E 80,会选择在连续帧结束时(发送完最后一帧连续帧)发送。

注意:需求中,有时会约束$36服务的P4 server_max为5000ms,即:只允许接收节点(Server)回复一个NRC0x78,为什么呢?如果S3超时时间设置为5000ms,且$3E 80放在连续帧的最后发送,当前Block传输用时接近5000ms,如果再不发送一帧$3E 80,则其他节能可能会因S3超时回到默认会话。



审核编辑:刘清

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

    关注

    59

    文章

    3107

    浏览量

    473844
  • 网络管理
    +关注

    关注

    0

    文章

    129

    浏览量

    29422
  • 上位机
    +关注

    关注

    28

    文章

    1051

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【米尔TI AM62L开发板试用】无线网络CAN分析仪

    波特率(如500K) 点击\"打开\"按钮 状态指示灯变绿色表示CAN已启动 5.3 发送CAN帧 输入帧ID(如123) 输入DLC数据
    发表于 05-19 13:58

    在FLEXCAN中使用本地优先级按顺序发送数据,出错了是哪里的问题?

    ;= ~(CAN_CS_IDE_MASK | CAN_CS_SRR_MASK); } /* 设置数据长度(以字节为单位) */ flexcan_mb_config &
    发表于 05-12 06:51

    深入解析DLC0430BCP10RF - 2:电子工程师的新宠

    深入解析DLC0430BCP10RF - 2:电子工程师的新宠 在电子设计领域,一款优秀的产品往往能为工程师的设计工作带来极大的便利和创新的可能。今天,我们就来深入探讨DLC Display Co.
    的头像 发表于 05-09 11:50 310次阅读

    深入剖析DLC0700BZM18HT - C - 1:电子工程师的新宠

    深入剖析DLC0700BZM18HT - C - 1:电子工程师的新宠 在电子设计领域,不断新的产品涌现,为我们的设计工作带来更多的可能性和挑战。今天,我们就来深入探讨一下DLC Display
    的头像 发表于 05-09 10:55 211次阅读

    DLC0500HZG - 8显示屏的设计与特性解析

    DLC0500HZG - 8显示屏的设计与特性解析 在电子设备的设计中,显示屏是至关重要的组件之一。今天我们来详细了解一下DLC Display Co., Limited推出的DLC
    的头像 发表于 05-09 10:50 171次阅读

    探索DLC0350ABM06RT - 2:DLC Display的优质显示模块

    探索DLC0350ABM06RT - 2:DLC Display的优质显示模块 在电子设计领域,显示模块的选择对于产品的性能和用户体验起着至关重要的作用。今天,我们就来深入了解一下DLC
    的头像 发表于 05-09 10:40 117次阅读

    DLC0220BMG 产品设计解析

    的设计来看,DLC0220BMG 有着明确的市场定位,它可能适用于对显示特定要求的场景,比如工业控制显示、仪器仪表显示等。工程师在选择该产品时,需要考虑其是否能满足具体项目的需求,例如显示精度
    的头像 发表于 05-09 10:30 322次阅读

    探索DLC0200CCP04DF - 2:电子工程师的新宠

    探索DLC0200CCP04DF - 2:电子工程师的新宠 在电子设计的广阔领域中,不断新的产品涌现,为工程师们带来更多的选择和挑战。今天,我们就来深入了解一下DLC Display Co.
    的头像 发表于 05-09 10:15 345次阅读

    DLC0069AZOG - W 产品介绍与设计思考

    DLC0069AZOG - W 产品介绍与设计思考 在电子设备不断发展的今天,显示屏作为人机交互的重要窗口,其性能和设计对于整个产品的体验至关重要。今天,我们来探讨一下 DLC Display
    的头像 发表于 05-09 10:15 360次阅读

    CAN集线器什么作用

    CAN集线器作为工业通信网络中的关键设备,主要用于解决CAN总线在实际应用中遇到的 通信距离有限、多速率网络难兼容、以及数据冗余导致负载过高 等问题。在工业自动化、汽车制造、轨道交通等
    的头像 发表于 11-14 14:42 605次阅读
    <b class='flag-5'>CAN</b>集线器<b class='flag-5'>有</b>什么作用

    pipe发送超过16384长度,会被截断怎么解决?

    我在使用paho_mqtt 发送数据的时候,短包没问题,发现数据长度超过16384就会崩溃; 追查之下发现pipe 写入数据以后,一次性读出
    发表于 10-11 06:18

    广成科技蓝牙转CAN模块的作用和应用场景

    蓝牙转CAN设备通常内置CAN通信接口电路和蓝牙通信模块。它实时监听CAN总线和蓝牙总线,当检测到CAN总线上有数据时,会立即对
    的头像 发表于 09-29 11:05 1257次阅读

    移植CANfestival,发现can无法接收数据,为什么?

    通过can的上位机来发送报文,发现如下的情况 无论发送任何数据,发现rt_device_read返回值是0,查了一下函数返回值发现读取失败 然后我在下面一行打印接收到的
    发表于 09-11 07:46

    如何使用20829 can-fd发送64字节扩展标识符数据帧?

    numberOfFIFOElements更改为16。 使用两个20829 EVK进行测试,最大传输数据大小为15个字节。DLC范围是0~15 uint32数据,但实际上,另一个节点每帧
    发表于 08-04 06:56

    如何查找 TLE9881 接收帧的 DLC

    我们的项目使用 TLE9881,并使用经典 CAN 协议进行通信。 您能帮我找到接收到的 CAN 帧的 DLC 吗?
    发表于 07-15 06:42