资讯动态

CAN总线的错误检测机制

发布时间:2026/10/15 1:51:55 来源:尧图企业网站定制
文章目录错误类型1、位错误-Bit Check Error2、填充错误-Stuff Error3、格式错误-Form Error4、ACK错误-ACK Error 和 CRC错误-CRC Error5、错误示例错误处理1、主动错误 - error active2、被动错误 - error passive3、总线关闭 - bus off4、错误计数值的变动条件当发送方发送的报文时始终无应答(ACK)是否会触发Busoff参考错误类型位错误-Bit Check Error填充错误-Stuff Error格式错误-Form ErrorACK错误-ACK ErrorCRC错误-CRC Error1、位错误-Bit Check Error位错误-即 节点回读检测到的位与自身送出的位数值不同位错误的检测范围为SOF - EOF以下情况不判断为 位错误对于仲裁区如果节点发送为“隐性”位而检测到“显性”位不导致位错误表示该节点仲裁失败对于ACK槽如果节点发送为“隐性”位而检测到“显性”位不导致位错误表示该节点发送的报文未被其他节点正确接收节点在发送被动错误标志时检测到显性位不认为是位错误如果某个节点发送了被动错误标志然后回读的不是6位连续的隐性位这种情况是由于CAN总线的 线与 机制被动错误标志别其他节点发送的显性位给覆盖掉了。2、填充错误-Stuff Error填充错误即 在使用位填充编码的帧场SOF - CRC中不允许出现六个或更多连续相同的电平位3、格式错误-Form Error格式错误即 在固定格式位场CRC界定符、ACK界定符、帧结束检测到一个或更多显性位以下情况不判断为 格式错误接收节点在EOF最后一位检测到显性位不认为是格式错误而认为是超载帧的开始而发送节点会认为是格式错误4、ACK错误-ACK Error 和 CRC错误-CRC ErrorCRC错误即 接收节点计算的CRC序列与接收到的CRC序列不同ACK错误即 发送节点在ACK槽时间内未检测到“显性”位5、错误示例1、位错误和填充错误错误处理为了由于自身某些原因导致无法正常接收的节点一直发送错误帧干扰其他节点通信CAN BUS规定了节点的三种状态主动错误 - error active被动错误 - error passive总线关闭 - bus offMCU编程实现总线关闭“快恢复”和“慢恢复”的一般过程可用以下流程图描述1、主动错误 - error active节点能正常参与总线通信的收发错误帧结束之后总线回到正常状态被中断的节点会尝试重新发送刚才的消息在主动错误状态下当节点检测到一个错误就会发送带有主动错误标志的错误帧主动错误标志是连续6个显性位所以此时将会覆盖总线上其他节点的发送而之前在CAN总线上传输的报文就会被这6个连续显性位破坏掉2、被动错误 - error passive节点可以参与总线通信的收发SuspendTransmission之后总线回到空闲状态如果这个节点能够竞争成功那么它就能接着发送如果竞争不能成功那么就接着等待下一次竞争。目的是为了让其他正常节点优先使用总线在被动错误状态下当节点检测到一个错误就会发送带有被动错误标志的错误帧被动错误标志是连续6个隐性位所以此时总线上其他节点的发送不会受到影响3、总线关闭 - bus off节点的所有总线活动停止节点暂时不能参与到总线通信中。处于这种状态中的节点既不可接收也不可发送消息4、错误计数值的变动条件当发送方发送的报文时始终无应答(ACK)是否会触发Busoff不会。一个CAN控制器发送报文后未被应答会触发应答错误ACK ErrorTEC发送错误计数器会计数但通常不会直接导致Bus-Off。可以参考下面的ISO 11898-1:2015标准12.1.4.2 部分 c)c) 当发送器发送错误标志时发送错误计数器应增加 8。例外 1如果发送器处于错误被动(error-passive)状态并且因为未检测到显性 ACK 而检测到 ACK 错误并且在发送其被动错误标志时未检测到显性位。综上发送方会维持在错误被动状态TEC计数器维持在128就不会再增长。参考CAN总线的错误检测机制https://www.bilibili.com/video/BV1Su41187x8/?spm_id_from333.788vd_source1acb50d9fb0b001f6955382b5acbc993

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑