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总线上的信号反射。
- (1)can总线基本概念
- CAN总线之CAN的基本概念
- CAN总线学习笔记:CAN总线的相关概念
- can总线与usb总线比较,那个可靠?
- CAN总线之报文解析
- RoyalScope CAN分析仪使用案例:解决波形台阶和信号幅值低的问题
- TX2平台下can总线收发功能的实现(二)——Linux下can总线编程模型和源码解读
- 信号的基本概念
- SYSTECH USB-CAN总线分析仪Linux驱动安装篇(树莓派)
- CAN总线综述
- STM32的can现场总线实验心得
- CAN总线基础知识(三)
- stm32内部的CAN总线
- TI CAN总线 DCAN Driver Guide
- 高速电路设计/信号完整性的一些基本概念(转载)
- can总线仲裁
- Linux信号(一)-- 信号的基本概念
- 如何通过波形解析can总线数据
- 信号的基本概念