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

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

3天内不再提示

CanSM模块如何处理Busoff等问题呢

冬至配饺子 来源:开心果 Need Car 作者:开心果 Need Car 2022-08-29 18:04 次阅读

CAN总线中,相对其他通信类问题,Busoff问题比较难搞。本文从CanSM模块出发,就Busoff产生、Busoff信息交互、Busoff快/慢恢复等问题展开聊一聊。

这个话题前面有聊过,可以参考前文Autosar网络管理:说说Busoff那点事。

1Busoff产生

这里再说一次Busoff产生的条件:TEC > 255。也就是说ECU自身发出的报文错误,导致TEC(Transmit Error Counter)不断累加,直到TEC超过255产生Busoff,如下所示:

pYYBAGMMjnqAFn0fAACQljR28BU098.png

举例:ECU1::CAN1发送的错误帧只能使ECU1::CAN1进入Busoff状态,而不能使ECU2::CAN1进入Busoff,如下所示:

pYYBAGMMjo6AVGbjAAA84abQWUc735.png

因为错误由ECU1::CAN1自己产生,ECU1::CAN1有问题,自己脱离CAN总线即可,不要影响ECU2::CAN1继续使用CAN总线。

2Busoff信息交互及Busoff恢复机制

节点产生Busoff以后,ControllerMode状态自动切换到CANIF_CS_STOPED模式,停止发送错误帧,避免影响总线其他节点的通信。既然Busoff已经发生,对应的信息就需要传递给上层,让上层决策后续的通信行为。怎样通知上层呢?

Can Controller通知到上层有两种方式:Interrupt或者Polling

Step1、Busoff事件信息如何通知到CanSM

Interrupt方式:

Busoff中断发生->

CanInterruptStatus()

->CanHL_ErrorHandling()->

CanIf_ControllerBusOff()

->

CanSM_ControllerBusOff()

->CanSM_BusOffIndicated(),CanSM_BusOffFlag = TRUE

...CanSM_MainFunction()周期性检查CanSM_BusOffFlag置位情况。

Polling方式:Can_MainFunction_BusOff()

->CanHL_ErrorHandling()->

CanIf_ControllerBusOff()

->

CanSM_ControllerBusOff()

->CanSM_BusOffIndicated(),CanSM_BusOffFlag= TRUE

...CanSM_MainFunction()周期性检查CanSM_BusOffFlag置位情况。

提示:上述函数关联关系,除Autosar标准接口以外,其他接口,不同软件供应商,实现上可能存在不同。

Step2、CanSM请求重启Can Controller,通知ComM、BswM模式切换

Busoff发生以后,CanSM调用CanIf_SetControllerMode()接口,请求将ControllerMode切到CANIF_CS_STARTED模式,以便于后续尝试恢复通信。同时关闭Tx PDU的发送,只能接收Rx PDU。所以这也是为什么在恢复期内可以收到报文的原因。CanSM调用BswM_CanSM_CurrentState()接口通知BswM进入CANSM_BSWM_BUS_OFF状态,调用ComM_BusSM_ModeIndication()接口通知ComM进入COMM_SILENT_COMMUNICATION状态。

Busoff发生以后,CanSM先告知ComM,ComM在请求CanSM对应Channel由FULL COMMUNICATION进入SILENT COMMUNICATION。进入CANSM_BSM_S_SILENTCOM_BOR状态,如下所示:

poYBAGMMjqSAEHXFAACSG9k43Ko105.png

Busoff发生以后,CanSM会启动一个Busoff Timer,BusoffTimer分为两种:

快恢复时间参数CanSMBorTimeL1;

慢恢复时间参数:CanSMBorTimeL2

具体BusoffTimer应该等于CanSMBorTimeL1还是CanSMBorTimeL2,取决于配置参数CanSMBorCounterL1ToL2

如果Busoff连续发生次数 <CanSMBorCounterL1ToL2,BusoffTimer =CanSMBorTimeL1;

如果Busoff连续发生次数≥ CanSMBorCounterL1ToL2,BusoffTimer=CanSMBorTimeL2;

注意:CanSMBorTimeL1、CanSMBorTimeL2、CanSMBorCounterL1ToL2三个参数均在CanSM模块配置,具体数值根据OEM需求配置。测试中,busoff的快/慢恢复行为如下所示:

pYYBAGMMjriAYZquAABizoyWPcE912.png

在快/慢恢复时间内,可以接收报文。

Step3、CanSMBorTimeL1或者CanSMBorTimeL2耗尽

CanSMBorTimeL1或者CanSMBorTimeL2耗尽(elapse),重新发送Tx PDU,让故障节点再次尝试向CAN总线发送报文。同时,CanSM通知BswM进入CANSM_BSWM_FULL_COMMUNICATION状态,通知ComM进入COMM_FULL_COMMUNICATION状态。可以启动CanSMBorTimeTxEnsured,确认Busoff是否恢复,也可以使用Confirm方式确认Busoff恢复。

Step4、CanSMBorTimeTxEnsured耗尽

在CanSMBorTimeTxEnsured时间内,Busoff再次发生,则进行下一次的Busoff恢复机制,如果CanSMBorTimeTxEnsured耗尽,则说明成功从Busoff状态恢复。如果在CanSMBorTimeTxEnsured时间内,再次发生Busoff,则Busoff次数累加。

3Busoff发生时的网络状态

这里主要讨论Busoff进入慢恢复期,节点在NOS(Normal Operation State)和RSS(Ready Sleep State)下是否会进行网络状态切换。

NOS:Busoff进入慢恢复期,如果上层不主动请求释放网络,网络状态无法进入RSS,所以,节点会一直在NOS状态下,一直处于慢恢复状态,如下所示:

pYYBAGMMjsmAChhQAAAmTktH2f0595.png

RSS:Busoff进入慢恢复期,如果在恢复期收不到有效的网络管理报文,NM-Timeout时间超时以后,进入PBSM(Pre Bus Sleep Mode);如果可以收到有效的网络管理报文,则网络处于RSS状态,如下所示:

pYYBAGMMjt6AINgeAAAxsA-wGuc740.png

如果节点在NOS状态下,一直处于慢恢复,会带来什么问题呢?节点一直在慢恢复期,意味着该节点不会外报文(应用报文和网络管理报文均不会外发),其他节点会上报对应的节点丢失故障。



审核编辑:刘清

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

    关注

    145

    文章

    1926

    浏览量

    130583
  • 中断
    +关注

    关注

    5

    文章

    895

    浏览量

    41359
  • AUTOSAR
    +关注

    关注

    10

    文章

    349

    浏览量

    21449
收藏 人收藏

    评论

    相关推荐

    串口接收不等长的数据如何处理

    串口是一个很重要的通信方式,但是要用好串口并不是那么简单,比如如何接收不等长的数据。你们是如何处理?大家来说说你们的做法。
    发表于 05-15 08:02

    请问时钟抖动如何处理

    一块音视频处理芯片输出1080i的数据Data及其同步时钟Clk,但是时钟clk的抖动很大,我该如何处理?另外,抖动很大的时钟源能否在后面接入一个模拟锁相环降低时钟的抖动
    发表于 11-12 09:12

    请问STM32程序不使用的GPIO如何处理

    请教各位大神,制作STM32程序的时候,那些没用的GPIO管脚,该如何处理?是不进行任何代码处理,还是初始化?如果要初始化,那该选择哪一种模式
    发表于 02-27 06:53

    何处理接口bewtween?

    亲爱的大家,我正在做一个关于一些bisic信号处理的项目。它描述如下,信号由PmodMic采样,然后数字化信号被发送到我们定制的滤波器模块,然后滤波后的信号被发送到ARM进行进一步处理,显示
    发表于 03-12 10:29

    何处理好跨时钟域间的数据

    跨时钟域处理是什么意思?如何处理好跨时钟域间的数据?有哪几种跨时钟域处理的方法
    发表于 11-01 07:44

    NANO芯片系统中,其对应的AVDD,VREF等引脚该如何处理

    NANO芯片系统中,如果用不到ADC模数转换模块,其对应的AVDD,VREF等引脚该如何处理?可以悬空或直接接地吗?假使能悬空或直接接地,这样能节省一部分不必要的功耗吗?
    发表于 08-25 06:46

    何处理电子污染

    电子垃圾污染给环境造成了巨大的压力,当今随着电子产品废弃量的增加他逐渐得到了社会各界的高度关注。如何处理电子垃圾带来的污染?请看下文
    发表于 01-22 14:18 7116次阅读

    在国外人们都是如何处理电子垃圾的_电子垃圾回收产业现状及其意义

    电子产品更新换代,大量废旧家电随之产生,这些淘汰的家电应如何处置,这让很多人感到头疼。在国外人们都是如何处理电子垃圾的?电子垃圾回收产业现状及其意义是什么
    发表于 01-22 19:09 1.1w次阅读

    何处理轴表面磨损造成的伤害

    何处理轴表面磨损造成的伤害
    发表于 02-15 16:03 1次下载

    何处理HTTP 503故障问题?

    HTTP 503故障问题在业务管理上很常见, 以问题的可能性也相当多, 故障时除了503提示, 好像什么也没有, 发生故障时应如何处理? 文章内会为大家详细说明
    的头像 发表于 04-12 10:05 1051次阅读
    如<b class='flag-5'>何处理</b>HTTP 503故障问题?

    什么是busoffBUSOFF是如何产生的?BUSOFF恢复机制和故障码记录

    BUSOFF,从字面意思可以看出,表示总线的关闭,此时ECU从总线脱离,既不能接收总线的报文,也不能向总线发送报文。
    的头像 发表于 09-04 09:48 3.4w次阅读
    什么是<b class='flag-5'>busoff</b>?<b class='flag-5'>BUSOFF</b>是如何产生的?<b class='flag-5'>BUSOFF</b>恢复机制和故障码记录

    调试TrustZone时,如何处理HardFault?

    调试TrustZone时,如何处理HardFault?
    的头像 发表于 09-27 16:33 634次阅读
    调试TrustZone时,如<b class='flag-5'>何处理</b>HardFault?

    广播系统出现噪音、啸叫如何处理

    公共广播系统目前是一个各行各业都会有需求的系统,酒店、商场、公园、景点场所都会用到。现实使用中,我们会发现有的广播系统是电声悦耳、自然流畅,但是有一些则带有些噪音、啸叫。面对这种情况,我们该如何处理
    发表于 11-08 09:41 1451次阅读
    广播系统出现噪音、啸叫如<b class='flag-5'>何处理</b>?

    何处理MOS管小电流发热?

    何处理MOS管小电流发热?
    的头像 发表于 12-07 15:13 576次阅读
    如<b class='flag-5'>何处理</b>MOS管小电流发热?

    何处理同轴阻抗失配?如何避免阻抗失配这种风险

    何处理同轴阻抗失配?如何避免阻抗失配这种风险? 同轴阻抗失配是电子通信领域中一种常见的问题,当同轴电缆的输出端口的阻抗与接收端口不匹配时,就会发生阻抗失配。这种失配会导致信号反射、传输效率降低
    的头像 发表于 11-28 14:18 1003次阅读