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

    关注

    56

    文章

    2471

    浏览量

    459328
  • 网络管理
    +关注

    关注

    0

    文章

    107

    浏览量

    27509
  • 上位机
    +关注

    关注

    26

    文章

    861

    浏览量

    54051
收藏 人收藏

    评论

    相关推荐

    STM32有没有USB库里面有变量记录着每次发送实际长度

    Report_buf的数据全部读出来,然后再根据自己定的协议定的长度 再解析出本次发送 过来的具体长度。有没有USB库里面有变量记录着每次发送
    发表于 04-28 07:25

    关于HAL库F4 V1.23下HAL_CAN_GetRxMessage接收函数的疑问求解

    最近升级到F4 V1.23的版本,发现CAN接收函数变了,非接收中断下 HAL_CAN_GetRxMessage函数只能接收到SID和数据长度 ,但是
    发表于 04-19 07:52

    CAN报文为什么会发送失败?

    CAN总线调试过程中出现报文发送失败。很多工程师都对此只知其一不知其二,今天我们就以CAN报文发送失败的问题来做一次探讨。在了解CAN报文为
    的头像 发表于 04-12 08:25 220次阅读
    <b class='flag-5'>CAN</b>报文为什么会<b class='flag-5'>发送</b>失败?

    stm32F427用CAN发送数据错误怎么解决?

    stm32F427用CAN发送数据错误
    发表于 04-02 06:43

    如何提高BLE_MeshLightingLPN的发送数据长度

    (GENERIC_ONOFF_SERVER_MODEL_ID,srcAddress ,GENERIC_ON_OFF_SET_UNACK,generic_Buff, 2,MOBLE_FALSE, MOBLE_FALSE); 数据长度小于等于4时可以
    发表于 03-15 07:20

    TC275的GTM模块中,TIM与ATOM的时钟关联?与CCU的关系又如何?

    TC275的GTM模块中,TIM与ATOM的时钟关联?与CCU的关系又如何?
    发表于 02-20 06:35

    canfd通信tdcv实测值受总线长度影响吗

    CAN FD通信的基本原理、总线长度的影响、总线终端电阻的作用以及总线长度和通信质量之间的关系CAN FD通信是现代汽车和其他领域常用的
    的头像 发表于 01-31 13:46 361次阅读

    请问用CAN存储器存储的CAN总线数据帧格式有哪些呢?

    请问用CAN存储器存储的CAN总线数据帧格式有哪些呢? CAN总线是一种常用于汽车、工业控制和其他应用领域的串行通信协议。在CAN总线中,
    的头像 发表于 01-31 13:46 434次阅读

    can总线的数据帧中数据长度码和数据字节数的关系

    can总线的数据帧中数据长度码和数据字节数的关系CAN
    的头像 发表于 01-31 11:31 445次阅读

    M480 CAN为什么无法收到数据

    发出去的数据,可以起到触发中断,但是收不到驱动器收到的数据;驱动器的ID设置位了1;并不能收到这个响应; CAN发送使用MSG[0] void M_RUN(void) { /*
    发表于 01-16 08:09

    开关电源输出电压的纹波大小和负载电流关系

    1)开关电源输出电压的纹波大小和负载电流关系? 2)为何 负载轻是纹波比负载重时纹波大? 3)纹波都与那些因素相关?
    发表于 01-09 07:14

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

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

    如何提高BLE_MeshLightingLPN发送数据的有效长度

    (GENERIC_ONOFF_SERVER_MODEL_ID,srcAddress ,GENERIC_ON_OFF_SET_UNACK,generic_Buff, 2,MOBLE_FALSE, MOBLE_FALSE); 数据长度小于等于4时可以
    发表于 08-05 07:26

    单芯的can光纤中继器使用起来优势呢?

    单芯的can光纤中继器使用起来优势呢?
    发表于 05-09 10:43

    在modbusRTU程序中,发送数据是的CRC码和接收数据的CRC校验之间什么关系吗?

    在modbusRTU程序中,发送数据是的CRC码和接收数据的CRC校验之间什么关系吗?他们是一一对应吗?
    发表于 05-05 16:06