XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


CAN

目录

CAN

协议特点

最大的速率只有125K速率

多主控制, 空闲的时候所有的机器都可以发送消息, 两个以上同时开始比较优先级

系统的柔性, 没有地址

有错误检测

电气属性

有两根差分线, 有显性电平, 隐性电平, 显性的电平表0, CAN_H比CAN_L的电平,H为3.5V, L为1.5V, 都为2.5V表示1

两端连接一个120Ω

协议

有五种帧格式

  • 数据帧: 用于CAN节点之间进行数据传输的帧
  • 遥控帧: 用于接收单元向具有相同ID 的发送单元请求数据的帧
  • 错误帧: 用于当检测出错误时向其它单元通知错误的帧
  • 过载帧: 用于接收单元通知其尚未做好接收准备的帧
  • 间隔帧: 用于将数据帧及遥控帧与前面的帧分离开来的帧

数据帧由7段组成:①、帧起始,表示数据帧开始的段。②、仲裁段,表示该帧优先级的段。③、控制段,表示数据的字节数及保留位的段。④、数据段,数据的内容,一帧可发送0~8个字节的数据。⑤、CRC段,检查帧的传输错误的段。⑥、ACK段,表示确认正常接收的段。⑦、帧结束,表示数据帧结束的段。

  1. 帧起始很简单,标准格式和扩展格式都是由一个位的显性电平0来表示帧起始

QQ图片20220906213807

  1. 表示帧优先级, 标准格式的ID为11位,发送顺序是从ID10到ID0,最高7位ID10~ID4不能全为隐性(1), 扩展格式的ID为29位,基本ID从ID28到ID18,扩展ID由ID17到ID0,基本ID与标准格式一样,禁止最高7位都为隐性, RTR位远程请求位, 显性为数据帧, 隐性为远程帧
  2. 控制段由6个位构成,表示数据段的字节数,标准格式和扩展格式的控制段略有不同, r1和r0为保留位,保留位必须以显性电平发送。DLC为数据长度,高位在前,DLC段有效值范围为0~8, 单位是字节, 最大64bit

QQ图片20220906214011

  1. 数据段也就是帧的有效数据,标准格式和扩展格式相同,可以包含0~8个字节的数据,从最高位(MSB)开始发送
  2. CRC段保存CRC校准值,用于检查帧传输错误,标准格式和扩展格式相同, CRC段由15位的CRC值与1位的CRC界定符组成。CRC值的计算范围包括:帧起始、仲裁段、控制段、数据段,接收方以同样的算法进行计算,然后用计算得到的CRC值与此CRC段进行比较,如果不一致的话就会报错

QQ图片20220906214857

  1. ACK段用来确认接收是否正常,标准格式和扩展格式相同, 发送单元的ACK,发送2个隐性位,而接收到正确消息的单元在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送ACK/返回ACK。发送ACK 的是所有接收单元中接收到正常消息的单元,所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息,这些接收单元既不处于总线关闭态也不处于休眠态的所有接收单元中

  2. 最后就是帧结束段, 7位隐性位构成。

IMX6U的CAN