当前位置: 首页 > article >正文

我被AI骗了—关于CAN总线填充机制的回答

先说结论,AI只会基于现有知识点,通过神经网络组织起逻辑框架,很多负责的问题,AI的逻辑也会出错,故我们使用AI也要保持质疑的心理!!万万不可全信AI, 

1、事情起因

是这样的,一位读者在阅读    CAN的填充机制解释及其延伸知识_can 填充位-CSDN博客  我的一篇文章时,在关于 “填充位是否应该计入相同连续位计数的问题” 。

文中解释如下:

这位读者,提出了一下疑问? 如下图:

给大家解释一下 :

这位读者疑问在于:如果存在以下原始数据(可以理解为应用层或传输层的PDU)

(二进制)1111 1000 0000,按照 “填充位也要计入连续位计数” 的规则,

填充后,将以以下时序发出  1111 1 0(填充位)0000 1(填充位)000但是协议中,又规定“接收方”在接收时,采取以下逻辑“当检测到五位连续极性的bit时,先检查第6个bit是否与前5bit极性相反,极性相反则符合填充规则,极性没有反转的情况下,会直接报出数据填充错误”

读者疑问点:他认为,接收端接收时直接删除填充位,然后再按照连续接收五个相同极性位,继续接收?

说实话,当时我也被问懵逼了,工作原因,也没细想。下班后推理了一下,按照读者逻辑“确实会存在以下问题”。

(1)按照“填充位也会被计入连续极性bit位计数”的规则,会将发送端填充的数据位,当做正常数据接收的可能。导致接收端数据的错误(CRC计算值与发送端发送的值肯定不匹配)

(2)但是,我也留了个心眼,有没有一种可能“读者本身的前提条件就是错误的”

(3)凭着直觉,我感觉读者是不是混淆了,接收方“关于删除填充位的描述”是他混淆了概念

2、推理求证

带着问题,我首先进行了正面求证?我直接将读者的疑问问了AI,DeepSeek和豆包都给出结论,填充不计入“连续极性计数”。

但是我不放心,利用手头资源,作了个实验,用逻辑分析仪直接测量(逻辑分析仪不会使用的同学,参考一下文章逻辑分析仪——KingstLA5016使用方式,使用观察CAN_FD总线-CSDN博客):条件如下

(1)搭建好测试环境,我将VN1640A上两个CANchannel端口,相互连接,并配置好120Ω的终端电阻。

(2)一个通道发送,一个通道接收。

(3)发送通道设置一个报文,ID随便写,将数据Byte0=0xF8,Byte1=3F,根据CAN数据段发送规则“Byte0,先发送,最后一位Byten最后发送”,“Byte内部,最高位bit7最先发送的规则”。

可以直接写出 二进制数据流应该如下图

结论有了,我们直接 查看结果

填充位,专门用绿色字体标注,故此时真相大白,AI在一本正经的胡说八道。关于AI是如何自圆其说的,最后附录会原文张贴。

重要结论:填充位是会计入连续极性位计数的。

3、疑惑出现的原因分析

再次看读者提出疑问的原文:

“有一个地方不太理解,请教一下,填充位也会加入连续电平的计算么?因为我看接收节点的工作规则是:连续接收5个一样的电平之后,会删除下一个电平,继续接收。如果是这样,按照前面给出的案例。接收五个隐性电平之后,会删掉下一个填充位,然后继续接收,接下来就只接收到4个显性电平,这时候就不会执行删除操作,那后面那些填充位不就被当成数据读了么?”

这位读者,将接收节点看的太智能了,其实接收节点压根不会判断哪一位到底是不是填充位,在接收节点,只存在一个连续电平计数器,在接收数据流时,接收节点根据连续接收到的电平极性,依次增加计数,当1<=计数<=5时,只要在此区间内,检测到相反极性,计数器会重新置位为0。

如下图所示:

 (2)如下图,框选的描述也是存在误解的

如上文所说,接收方,确定自己为接收节点后,就“开启连续电平计数器”,按照上段描述的逻辑工作,读者这里的“删除一个电平”,也是误解了规范中的意思,接收节点是无法删除一个电平的。正确的理解应该是,数据链路层将接收数据给到更上一层(如传输层时),会将接收原始数据中的填充位去除。。。

读者潜在的逻辑是这样的:“接收节点在接收到连续5个相同极性的电平后,会将接下来的1位相反极性的电平,标注为填充位,删除此位,然后计数器置位为0,重新统计连续极性位”

总结:接收端节点的数据链路层,压根不会删除任何电平,它也不会判断哪一位是填充位,只会根据固定的规则,控制计数器递增或重新置0,或者计数器达到预定值后,判断下一位电平的极性,根据判断结果,是否发出填充错误帧

4、AI一本正经胡说八道的原文

感兴趣的朋友可以看看,有没有大佬解释下,他为什么会瞎回答问题。

问题:

“有一个地方不太理解,请教一下,填充位也会加入连续电平的计算么?因为我看接收节点的工作规则是:连续接收5个一样的电平之后,会删除下一个电平,继续接收。如果是这样,按照前面给出的案例。接收五个隐性电平之后,会删掉下一个填充位,然后继续接收,接下来就只接收到4个显性电平,这时候就不会执行删除操作,那后面那些填充位不就被当成数据读了么?”

AI回答:

关于CAN总线中填充位与连续电平计数的关系,关键在于理解接收端的处理机制。以下分步骤解释你的疑问:

1. CAN总线填充位规则的核心逻辑

  • 发送端规则:当原始数据中出现连续5个相同电平时,发送端必须插入一个相反电平的填充位(如连续5个隐性电平后插入1个显性填充位)。

  • 接收端规则:接收端在检测到连续5个相同电平后,会自动删除下一个电平(即填充位),并重置计数器。

2. 填充位是否参与连续电平计算?

答案:填充位本身不参与连续电平的计数
接收端的逻辑是:

  1. 原始数据+填充位的连续电平进行计数;

  2. 一旦检测到连续5个相同电平,立即判定下一个电平是填充位并删除;

  3. 删除填充位后,计数器重置为0,从下一个电平重新开始计数。

3. 通过案例验证逻辑

假设原始数据为:
隐性-隐性-隐性-隐性-隐性(连续5个隐性电平)
发送端插入填充位后实际发送:
隐性-隐性-隐性-隐性-隐性-显性(填充位)-显性-显性-显性-显性

接收端处理过程

  1. 接收到前5个隐性电平 → 触发删除规则;

  2. 删除第6个显性电平(填充位);

  3. 计数器重置为0,从第7个显性电平重新开始计数;

  4. 后续连续4个显性电平 → 未达到5个相同电平,不触发删除;

  5. 最终解析出的数据为原始数据隐性×5 + 显性×4

4. 为什么不会误读填充位?

  • 发送端的填充规则确保了任何连续5个相同电平后必然存在一个填充位

  • 接收端的删除规则会严格删除填充位,并重置计数器,因此:

    • 填充位后的数据从“计数器=0”开始重新计数;

    • 即使后续数据中有填充位,也会被正确识别和删除。

5. 极端情况模拟

假设原始数据中存在连续5个隐性电平,且后续数据又出现连续5个隐性电平:
隐性×5(原始数据) → 显性(填充位) → 隐性×5(新数据)
接收端处理:

  1. 删除第一个填充位后,解析出原始数据隐性×5

  2. 后续接收到隐性×5 → 再次触发删除规则,删除下一个填充位;

  3. 最终数据仍为隐性×5 + 隐性×5,无错误。

总结

  • 填充位是发送端插入的“冗余位”,接收端会按规则删除,且删除后计数器重置;

  • 填充位本身不参与后续计数,因此不会出现误将填充位当作数据的情况;

  • CAN总线的位填充机制通过严格的发送/接收规则,确保了数据的完整性和同步性。








http://www.kler.cn/a/597137.html

相关文章:

  • AWS中通过Endpoint Security(如Amazon GuardDuty)与安全组、网络ACL联动实现协同防御
  • 【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证
  • ci如何做才能做到每秒rps 为3000+
  • Doris性能优化建议
  • 失物招领|校园失物招领系统|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)
  • 【JavaEE进阶】部署Web项目到Linux服务器
  • shell流程控制
  • 操作系统导论——第13章 抽象:地址空间
  • Python网络编程入门
  • C语言入门教程100讲(2)变量与常量
  • 随笔(1)
  • 大模型-提示词工程与架构
  • MySQL Router被HTTP流量击穿
  • linux之 内存管理(1)-armv8 内核启动页表建立过程
  • Python协程调度
  • 一文分清重载与重写:Java 编程基础的关键辨析
  • OBOO鸥柏丨广告机终端控制端KylinOS麒麟、统信UOS/鸿蒙国产系统
  • nextjs使用next-intl要注意
  • 整理和总结微信小程序的高频知识点
  • SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)