CAN学习笔记(一)CAN入门
参考链接:https://blog.csdn.net/2301_77952570/article/details/131114941
CAN收发器的作用
- 发:将TTL电平转换为CAN专用电压的差分信号
- 收:将CAN的差分信号转换为TTL电平
高低电平的定义
- CAN_High - CAN_Low < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1",即高电平。
- CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为"逻辑0",即低电平。
显隐之间存在优先级的关系,显性的优先级高于隐性(常用于仲裁机制)
通信过程概述
CAN中并无地址的概念。少了像IIC中的SCL地址线、SPI中的片选信号线,简洁的物理层决定了 CAN 必然要配上一套更复杂的协议。
空闲状态
在CAN协议中,当总线上的上出现连续的11位隐性电平(两根线电压差小于0.5V),表示总线就处于空闲状态。
开始数据传输
报文:报文 = 帧 = 帧起始(开始位 + 地址 + 控制) + 原始数据 + 帧结束(CRC + 结束位)
每次发送数据前,节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的帧。
帧分为5种
- 数据帧:用于节点向外传送数据
- 遥控帧:用于向远端节点请求数据
- 错误帧:用于向远端节点通知校验错误,请求重新发送上一个数据
- 过载帧:用于通知远端节点;本节点尚未做好接受准备
- 帧间隔:用于将数据帧及遥控帧与前面的帧分离开来
下面是CAN数据帧的标准格式
域段 | 域段名 | 位宽:bit | 描述 |
---|---|---|---|
帧起始 | SOF(Start Of Frame) | 1 | 数据帧起始标志,固定为1bit显性('b0) |
仲裁段 | Identify(ID) | 11 | 本数据帧的 ID 信息, ID 信息的作用: ① 如果同时有多个节点发送数据时,作为优先级依据(仲裁机制); ② 目标节点通过 ID 信息来接受数据(验收滤波技术) |
RTR | Remote Transmission Request BIT | 1 | RTR标识是否是远程帧(0,数据帧;1,远程帧),在数据帧里这一位为显性('b0) |
IDE | Identifier Extension Bit | 1 | IDE用于区分标准格式与扩展格式,在标准格式中 IDE 位为显性(‘b0),在扩展格式里 IDE 位为隐性(’b1) |
R0 | 保留位 | 1 | 1bit保留位,固定为1'b0 |
DLC | data length | 4 | 由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节, DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误 |
数据段 | data | 0~64 | 据帧的核心内容,它由 0~8 个字节(0 ~ 64位)组成,MSB 先行 |
CRC段 | CRC | 15 | 段用于检查帧传输错误,发送方以一定的方法计算包括:帧起始、仲裁段、控制段、数据段; 接收方以同样的算法计算 CRC 值并进行比较,如果不同则会向发送端反馈出错信息,重新发送; 计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。 |
CRC界定符 | 1 | CRC 界定符(用于分隔的位),为隐性位(1'b1),主要作用是把CRC 校验码与后面的 ACK 段间隔起来 | |
ACK 槽 | ACK slot | 1 | 在 ACK 槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答; 发送 ACK/返回 ACK这个过程使用到回读机制,即发送方先在 ACK 槽发送隐性位后,回读到的总线上的电平为显性0, 发送方才知道它发送成功了,不用重发 |
ACK界定符 | 1 | 在 ACK 槽和帧结束之间由 ACK 界定符间隔开,为隐性位 | |
帧结束 | EOF | 7 | 由发送端发送 7 个隐性位表示结束 |
仲裁机制
用到了线与机制和回读机制(显性位的优先级高于隐性位)
位时序
每一位数据分为四段,最小的时间单位是Tq,一个位由8~25个Tq组成。
段名称 | 用途 | 时间范围 |
---|---|---|
同步段( SS ) | 用于同步边沿,如果跳变边沿不在同步段,则需要通过PBS补偿 | 1Tq |
传播时间段( PTS ) | 用于补偿网络的物理延时时间 | 1~8Tq |
相位缓冲段1( PBS1 ) | 补偿边沿阶段的误差,在重新同步的时候可以加长 | 1~8Tq |
相位缓冲段2( PBS2 ) | 补偿边沿阶段的误差,在重新同步的时候可以缩短 | 2~8Tq |