can总线
先说说差分信号:
下面内容来自百度
差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。在这两根线上的传输的信号就是差分信号。信号接收端比较这两个电压的差值来判断发送端发送的逻辑状态。在电路板上,差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。
简单的说,就是两条线之间的电压差为0时,表示高电平1(隐性),电压差是一个正数时,表示低电平0(显性)。
位填充:
因为can的位比较多,比较长,为防止出错,所以每隔五个相同的位后面,会自动加入一个相反的位
can协议帧格式
帧 帧用途
数据帧 用于发送单元向接收单元传送数据的帧。
遥控帧 用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧 用于当检测出错误时向其它单元通知错误的帧。
过载帧 用于接收单元通知其尚未做好接收准备的帧。
帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧。
报文格式又两种:
11位的是标准的,29位是扩展的
最前面SOF是帧起始,当这位为0时,表示要开始传送数据了;
接下来的11位是仲裁段,相当于优先级,当两条报文同时发过来时,总线根据仲裁的优先级选择先读取谁;
后面是1位的RTR,该位为1时,远程帧;0是数据帧;
下面1为的IDE,用来区分标准帧(0)和扩展帧(1);
r1,r0为保留位;
控制段最后的DLC,是表示后面紧跟着的数据当中的字节长度;
后面64位的数据段中存入要发送的内容;
和IIC USART等协议类似,也要有一个校验位,can中就是CRC,循环冗余校验码,15位;后面跟着1位的DEL,界定符,上面提到的位填充,到这里就停止了;
后面也有一个ACK应答位,以及ACK的界定符DEL 固定为1;
下面7个连续的隐性位1,EOF表示本次报文包这里结束了;
后面其实还有3位隐性的ITM,表示总线现在已经空闲。
接下来我们说下一个知识:位定时
先介绍一些概念:
位时间
字面意思:发送一个位(0 或 1),所需要的时间
我们又把一个位分解成更小的单位:时间份额(TQ)
一位一般是8-25TQ
在这一个位时间里面,还分成4个时间段:分别是同步段、传播段、相位缓冲1、相位缓冲2,
我们一个个介绍这几个时间段
同步段:显然,是用来做同步的,也就是硬同步需要用到的,类似于起始位,他是一位里面开始的标志,该位占用1个TQ
传播段: 用于补偿信号通过网络和节点传播的物理延迟、传播段长度应能保证2倍的信号在总线的延迟,占用1-8个TQ
相位缓冲段:允许通过重同步对相位缓冲段1加长和相位缓冲段2缩短→最大长度=SJW(同步跳转宽度)、相位缓冲段1末端进行总线状态的采样、占用1-8个TQ 相位缓冲段2占用2-8TQ
同步跳转宽度:SJW,是为相位缓冲可以调整的最大长度,1-4个TQ,sjw必须小于两个缓冲段的值
接下来说说同步
同步有两种:硬同步、重同步
硬同步,就是用刚刚提到的同步段,通过调节时间,改变同步段的位置,达到同步的目的
重同步,是利用刚刚提到的两个相位缓冲段,更改他们的长度,达到同步的目的
这里有一个计算位定时参数的网站
https://www.kvaser.cn/support/calculators/bit-timing-calculator/