1.总体概述
1.1 CAN功能实现
可将车辆划分为车身部、安全部、ITS(智能交通系统)部、信息部、底盘部和发动机等部分。每个部分中的器件通过一条CAN总线串起来(一个CAN总线上的所有器件通讯速率必须相同),实现部分内的通讯。各个部分的CAN再汇集到网关(网关?后边学一学),由网关分配实现各个不同速率部分的CAN之间的通讯。如此这般便实现了对汽车整体电控部分的检测与控制。
1.2 CAN组成
两种组成方式:
1:CPU与CAN控制器集成到一起,再外接CAN收发器。
2:CPU与CAN控制器分开,使用的时候需要配置CAN接口电路,比较麻烦。
2. CAN的通讯过程
2.1 数据传输的实现原理
CAN通讯由两根线完成,一条CAN_HIGHT、一条CAN_LOW。
当CANH-CANL<0.5V的时候为隐性的,逻辑信号表现为“逻辑1”,即高电平。
当CANH-CANL>0.9V的时候为显性的,逻辑型号表现为“逻辑0”,即低电平。
无数据发送or发送数据0→CANH=CANL=2.5V→CANH-CANL=0<0.5V→认为数据为逻辑1;
发送数据1→CANH升高,CANL降低→CANH-CANL>0.9V→认为数据为逻辑0;
显性(逻辑0)的优先级比隐性(逻辑1)的高。
CAN收发器:左侧引脚RXD、TXD连接CAN控制器,右侧CANH、CANL:
MCU发送逻辑1:CANTX置1→收发器→CANH=CANL=2.5→逻辑1·
MCU发送逻辑0:CANRX置0→收发器→CANH=3.5V,CANL=1.5V→逻辑0
MCU接收逻辑1和接收逻辑0时即将上述过程放过来即可。·
数据的传递过程个人理解:
数据发送端和CAN控制器相连接,告诉控制器需要发送的数据,CAN控制器通过CANTX(逻辑1)与CANRX(逻辑0)与CAN收发器相连接,并告诉收发器需要发送的数据,然后来改变CANH和CANL的电压值,CANH和CANL上的电压值分别在各自的线上传输,通过ID和数据接收端匹配,匹配之后CANH和CANL经过收发器的转换传递给CAN控制器和接收端,完成信号的传输。中间需要进行位同步。
2.2 CAN通讯的整个过程
2.2.1 空闲状态
空闲状态是指没有节点正在传输数据的时候,当总线上出现连续11位隐性电平的时候,表示总线就处于空闲状态。
2.2.2 开始数据传输
当节点监听(如何监听?)到总线上处于空闲状态时,就会立即向总线发送自己的数据包(数据包=数据帧=报文)。
CAN数据帧标准格式
域段 | 位宽:bit | 描述 |
帧起始(SOF) | 1 | 数据帧起始的标志,固定位1bit,显性。 |
仲裁段 (ID) | 11 | 本数据帧的ID信息,ID信息的作用:1、如果同时有多个节点发送数据时,作为优先级依据(仲裁机制)。2、目标节点通过ID信息来接受数据(验收滤波技术)。 |
RTR | 1 | 0-数据帧 1-远程帧 显性 |
IDE | 1 | 用于区分标准格式与扩展格式,显性--标准格式 隐性--扩展格式 |
R0 | 1 | 1bit保留位,显性 |
DLC | 4 | 二进制编码用于表示本报文中的数据段有多少个字节 |
数据段 | 0-64 | 数据帧的核心内容,它由0-8个字节组成 |
CRC段 | 15 | 用于检查帧传输的错误,发送方以一定的方法计算帧起始、仲裁段、控制段、数据段的长度;接收方以同样的算法计算CRC值并进行比较,如果不同则会向发送端反馈出错误信息,重新发送;计算和出错处理一般都由CAN控制器硬件完成或由软件控制最大重发数。 |
CRC界定符 | 1 | 用于分隔的位,位隐性 |
ACK槽 | 1 | 在ACK槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答; |
ACK界定符 | 1 | 在ACK槽和帧结束之间由ACK界定符间隔开,为隐性位 |
帧结束(EOF) | 7 | 由发送端发送7个隐性位表示结束 |
2.2.3 仲裁机制
由于显性的优先级高于隐性,所以仲裁比较的就是那个ID中的0多。
2.2.4 位时序
位时序是为了实现位同步而发明出来的东西。
一位(bit)分为4段:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2)。段的单位是Tq,一个完整的位由8-25个Tq组成。
SS段 | 同步段,比如当总线上出现帧起始信号(SOF)时,其它节点上的控制器根据总线上的这个下降沿,对自己的位时序进行调整,把该下降沿包含到 SS 段内,这样根据起始帧来进行同步的方式称为硬同步。其中 SS 段的大小为 1Tq。总线上信号的跳变沿被包含在节点的 SS 段的范围之内,则表示节点与总线的时序是同步的,采样点采集到的总线电平即可被确定为该位的电平。 |
PTS段 | 传播时间段,这个时间段是用于补偿网络的物理延时时间,包括发送单元的输出延迟、总线上信号的传播延迟、接收单元的输入延迟,这个段的时间为以上各延迟时间的和的两倍。大小可以为 1~8Tq。 |
PTS1段 | 位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。 PBS1 段的初始大小可以为 1~8Tq。 |
PTS2段 | 另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。 PBS2 段的初始大小可以为 2~8Tq。 |
SJW | 重新同步补偿宽度,即在重新同步的时候,PBS1 和 PBS2 段的允许加长或缩短的时间长度,SJW 加大后允许误差加大,但通信速度下降。SJW 为补偿此误差的最大值(即每一次误差补偿都不能超过这个值,1~4Tq)。 |
CAN的同步分为硬同步和重新同步:
硬同步:在帧起始信号时同步总线上所有器件的位时序,无法确保后续一连串的位时序都是同步的。
重新同步:在检测到总线上的时序与节点使用的时序有相位差时,通过延长PBS1段或缩短PBS2段,来获得同步。
采样点:读取总线电平的时刻,并将读到的电平作为位值的点。位置在PBS1结束处。
延长/缩短PBS段来达到同步:PTS+PBS1小而PBS2加大时采样点前移,PTS+PBS1大而PBS2小时采样点后移。