汽车CAN通信中的一个bit的位时序问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汽车CAN通信中的一个bit的位时序问题?相关的知识,希望对你有一定的参考价值。

一个位又被分成4段,我想知道这个分段在实际中有什么用呢?为了实现接收同步吗?是如何实现的?请高手详解一下下图:非常感谢

首先,把一位时间BitTime 分成若干个份额,方便实现规定容差的波特率,可以说为实现接受同步;
其次,相位缓冲段1与2之间是采样点,一般配置在75-80%的位置,保证总线上不同节点数据同步;追问

你好,那CAN的主动错误和被动错误是怎么回事呢?我的理解是主动错误是发送方发送的信息出错,发送方自己发现了,然后发送主动错误标志;被动错误是发送方发送的信息出错,但是发送方没有发现,接收方发现了,然后接收方发送被动错误标志? 这样理解对吗?还是主动错误被动错误都是指着发送方而言的?

追答

每一个总线单元上有一个发送错误计数器和接收错误计数器。当检测到不同错误时,计数器加上一个值。成功发送则-1。你说的错误主动和被动都是单元的故障状态(错误主动、错误被动、总线关闭)用错误计数器来标定。
1.当发送错误计数器和接收错误计数器值都小于或等于127,为“错误主动”
2.当发送错误计数器或接收错误计数器值大于等于128,变为“错误被动”
3.当发送错误计数器或接收错误计数器值大于等于256时,“总线关闭”。

总线关闭后就不能参与通信了。
当总线监视到128次出现11个连续“隐性”位后,“总线关闭”将变为“错误主动”。相应计数器也清0.

追问

”当检测到不同错误时“ 这个如何理解?

追答

主要有5中错误:
位错误、填充错误、CRC错误、形式错误、应答错误。
其实这些你好好看一下BOSCH公司的《CANBus specification V2.0》
就都明白了。文库里有很多资料,不用我多说了吧。

参考技术A 太专业了

can总线之六——can线上的信号及帧概念

can线上,这里只谈论can而不是canfd。 can线上,只能发送一帧数据。然后再发送下一帧数据。

什么是一帧数据?
就是有108个bit位。 假如是500K的位速率,则108个bit,则至少含义216us的时间,在示波器上,如果抓取数据,那么会发现有时候不仅仅有216us。

先回答第一个问题,为什么是108个bit?
因为有起始位1 bit,
11位id,占两个比特。
数据长度,占4个bit。
rtr位,Exd位,r0保留位。
64个比特的数据。
校验位16位。
两个比特的ack位.
还有7个比特的结束位。

为什么至少是108个bit,有时候可能是109,或者更多的比特呢?
因为:专业术语,叫做位填充。 can线上,接收端需要比特定时,根据如果是连续5个相同的逻辑0,那么就插入一个逻辑1,然后紧紧跟着后面的信息。我有次用示波器观察信号,因为我发送的8个字节的数据都是00 。然后观察到的信号,竟然有毛刺,很规则的毛刺,这个毛刺就是脉冲。我一看,不对啊,我发送的都是0,在示波器上应该看到一段时间的低电平才对,为什么这么有规律,每个脉冲之间的间隔还很均匀。后来经过搜索,才知道这些就是位填充导致的。

用示波器,调试的时候,canH要接示波器的信号线,canL要接示波器的地。 这样的目的是, 方便查看数据。 会看到第一个负脉冲总是起始位。然后后面跟着的就是11位id(如果是iso15765), 直接读即可,高电平,翻译成1 ,低电平翻译成0 ,就得到了这帧数据上面的所有信息。

调试can程序,一般不需要示波器,常常用到CAN总线监控仪。 这个也没多少钱,估计网上卖的就是好几百块钱,的样子。USBCAN不知道哪个厂家出的,比较好用,它可以监控can总线行的所有ECU发出的帧。 而且发出的时间点也能清晰的记录下来,单位是毫秒。 能反应前后帧之间的间隔。因为can总线是串行总线,它不是发的帧早了点,就是晚了点,可以调节帧发送的间隔,来达到两个节点通讯的目的。尤其是流控帧,有的流控帧发送的是30 00 0A这表示帧间隔是10毫秒,如果你不按照这个10毫秒的间隔时间,来发送帧。而是5毫秒,那么对方是不会接收。你发的多帧的信息的,因此也不可能接收到对方节点的正常响应。流控也是容易出错的地方。

以上是关于汽车CAN通信中的一个bit的位时序问题?的主要内容,如果未能解决你的问题,请参考以下文章

(简答题)啥是总线协议?

CAN通信详解

can总线之六——can线上的信号及帧概念

CAN通信协议

汽车CAN总线

汽车CAN总线详解