先说说差分信号:
下面内容来自百度
差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。在这两根线上的传输的信号就是差分信号。信号接收端比较这两个电压的差值来判断发送端发送的逻辑状态。在电路板上,差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。
简单的说,就是两条线之间的电压差为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,表示总线现在已经空闲。