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

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

什么是一帧数据?
就是有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,在示波器上应该看到一段时间的低电平才对,为何这么有规律,每一个脉冲之间的间隔还很均匀。后来通过搜索,才知道这些就是位填充致使的。it

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

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

相关文章
相关标签/搜索