打印
[其它应用]

什么情况会导致CAN总线错误帧?

[复制链接]
2725|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2024-6-25 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在我们使用CAN通信的时候,难免会因为各种各样的情况遇到错误帧,那到底什么情况会导致错误帧呢?今天一起来分享一下。
首先我们回忆一下哪些情况会导致错误帧。
1.CRC校验错误。为了增加通信的准确性, 保证发送节点发出的数据等于接收节点接收到的数据, CAN数据帧中加入了CRC校验功能, 即发送节点对数据帧中起始段、 仲裁段、 控制端和数据段中的数据通过某种算法计算得到一个CRC值, 并将该值填入CRC段中 (CRC段由15个bit位的数值段和1个bit位的界定符组成, CAN控制器计算的CRC值就存在前15个bit位的数值段中), 然后向总线上发送, 接收节点收到数据后, 会对同样数据段的数据以同样的算法进行CRC计算, 并将计算结果与数据帧中的CRC值进行比对, 当接收节点计算得到的CRC值与发送节点发送的CRC值不一致时会发生CRC校验错误,并由接收节点向总线发送CRC校验错误帧, 该功能由CAN控制器自动完成。
2.格式错误。如果总线上传输的数据帧格式与协议规定的帧格式不符合, 就会发生格式错误。比如, 在数据帧和远程帧中的CRC段、 ACK段和帧结束段EOF, 存在1个bit位的CRC界定符、 1个bit位的ACK界定符和7个bit位的帧结束符, 它们均被定义为隐性电平, 如图2所示, 若在这些位置上出现显性电平, 则视为一种格式错误, 接收节点和发送节点都可能向总线发送该种类型错误帧。
3.应答错误。发送节点向总线发送数据帧时, 会在ACK段发送2个隐性位, 接收节点在收到CRC序列后, 如果接收过程没有出现错误, 接收节点会在ACK段的第1位发出一个显性电平, 该显性电平会覆盖原来发送节点发出的隐性电平, 因此发送节点可以监测总线上该位是否为显性位来判断该数据帧是否传输成功。如果发送节点在ACK段的第1位没有监测到接收节点发出的显性电平,就意味着没有任何节点接收到该帧, 此时将发生应答错误。即一个网络中如果只有单个CAN节点, 单个节点的CAN设备发送数据帧时将会发生该错误 (没有接收节点,不会有节点对数据帧产生应 答) , 并由发送节点向总线发出该错误帧。
4.位发送错误。发送节点向总线发送数据时, 同时也会监控发送的数据与总线上实际数据是否一致。如果发送节点在发送数据时发现总线电平与正在发送的信号电平不符, 将发生位发送错误, 位发送错误帧由发送节点向总线发出。
5.位填充错误。为了使收发节点保持同步以便接收节点正确接收信号, 接收节点需要在边沿信号处进行重新同步。为了避免总线上长时间不出现边沿信号, 协议规定发送节点的数据链路层能够发送的连续相同位最大个数为5, 若连续相同位个数达到5个, 需要在其后添加一个相反的位, 使总线上信号电平发生翻转, 从而接收节点得以进行重新同步, 即位填充规则 (位填充区域包含帧起始、 仲裁域、 控制域、 数据域和15位CRC, 不包含CRC界定符、 ACK段和EOF)。如果发送节点向总线上传输信号时违反了位填充规则, 接收节点检测到连续6个极性相同的位序列时, 将发生位填充错误, 并向总线发送错误帧。
那有哪些情况会导致错误帧呢?
1. CAN总线过长。CAN通信距离与通信速率紧密相关,波特率越高,CAN通信距离越短,反之波特率越低, CAN通信距离越长。当总线支线过长时,线束的阻抗和容抗会增大, 下降沿容易产生弯曲现象,容易导致位宽度失调,从而使接收节点接收数据错误, 同时向总线发出错误帧。
为了保证正常通信,需要减小CAN终端电阻,线束越长,电阻值越小,但一般不小于30Ω,否则会使显性位差值过小,不满足ISO 11898要求。

2.总线电容过大。CAN收发器为了实现CAN的仲裁与错误处理, 采用单向驱动结构, 即CAN波形的上升沿有驱动, 而下降沿是通过整条总线与终端电阻放电产生的, 所以终端电阻的第一作用是放电。因此, CAN节点及CAN线束的电容会影响整个网络的电容, 电容越大, 下降边沿越缓, 导致接收节点发生位采样错误, 从而导致错误帧的产生。一般需要保证CAN线电容在40~70pF/m范围内。
3.波特率配置错误。为了使接收方能够正确地解析数据, 通信双方需要提前约定波特率。软 件 中可以直接配置相应的寄存器即可配置波特率, 例如, 当整车波特率为500kB时 ,此时位时间为2us, 那么发送方就可以按照2us的位时间发送数据, 接收方每隔2us对数据进行采样。因此, 如果同一CAN网络中不同节点配置的波特率不一致, 总线会出现错误帧, 收发节点是无法正常通信的。
4.采样点设置错误。采样点是CAN控制器读取总线电平并解释各个比特位逻辑值的时间点。由于CAN报文的一个位时间由若干个Tq组成 (CAN控制器的最小时间周期称作时间份额Tq, 它是通过对芯片晶振周期进行分频而得来的),通常为8~25个,同时根据功能分为4个阶段:同步段、 传播段、 相位缓冲段1和相位缓冲段2。采样点即为在某位时间内读取总线电平的时刻, 如图6所示。采样时刻的设置通过配置寄存器决定, 对于同一CAN整车网络, 各个节点应该尽量使用相同的采样点位置, 否则容易出现采样错误, 进而使整个网络的通信出现故障。
5.收发报文报文ID冲突。ID是数据帧中仲裁段的组成部分, ID的大小决定了总线上节点冲突时各节点发送顺序, 整车上通信的报文数量级在几十甚至上百, 如果这些报文的ID重复, 总线上会出现错误帧。
6.总线干扰过大问题。其新能源电动汽车和发电机组等存在变频器、 逆变器、 电机驱动、继电器、 电磁阀等电流剧烈变化的线缆或设备, CAN整车通信信号受到的电磁干扰尤为显著。为此整车上往往采用提高CAN双绞程度、 加单双屏蔽层、 使用CAN隔离模块、弱电远离强电优化布线等方式以提高整车CAN通信抗干扰能力。此外,使用低阻抗、 低容抗的CAN线也可以提高信号品质, 提高抗干扰能力。

使用特权

评论回复
沙发
tpgf| | 2024-6-26 09:59 | 只看该作者
如果产生总线错误会报送相关的错误码吗

使用特权

评论回复
板凳
Henryko| | 2024-6-26 10:52 | 只看该作者
有干扰吧

使用特权

评论回复
地板
木木guainv| | 2024-6-26 11:22 | 只看该作者
如果发生错误帧的话 可以通过重连进行恢复连接吗

使用特权

评论回复
5
xiaoqizi| | 2024-6-26 12:44 | 只看该作者
阻抗不匹配会导致总线上的错误帧吗

使用特权

评论回复
6
wowu| | 2024-6-26 14:06 | 只看该作者
can总线的抗干扰能力表现如何?

使用特权

评论回复
7
wakayi| | 2024-6-26 15:28 | 只看该作者
有些错误只能通过示波器观察波形才能检测到

使用特权

评论回复
8
renzheshengui| | 2024-6-26 16:50 | 只看该作者
两种不同模式的can通讯方式能建立连接吗

使用特权

评论回复
9
610u| | 2024-8-27 00:29 | 只看该作者
CRC(循环冗余校验)用于检测数据在传输过程中的错误。如果接收节点计算得到的CRC值与发送节点发出的CRC值不一致,就会发生CRC校验错误。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2055

主题

7455

帖子

10

粉丝