软件版本:VIVADO2017.4
操作系统:WIN10 64bit
硬件平台:适用米联客 ZYNQ系列开发板
米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!!
13.1 概述
ZYNQ的PS中包含了2个CAN接口,兼容CAN 2.0A和CAN 2.0B,最高可支持1Mbps的波特率。CAN作为工业应用中的一个重要的总线标准,广泛应用于各行各业之中。本教程介绍了ZYNQ中PS端CAN接口的基本使用方法,并通过CAN接口实现与PC端CAN调试软件之间的数据接收和发送测试。
13.2 CAN总线介绍
13.2.1数据格式
CAN总线中的数据以帧为单位,一共包含5种类型的帧,分别为:数据帧、远程帧、错误帧、过载帧和帧间隔。
- 数据帧:用于发送节点向接收节点传送数据的帧。
- 远程帧:用于接收节点向具有相同ID的发送节点请求数据的帧。
- 错误帧:用于当检测出错误时向其他节点通知错误的帧。
- 过载帧:用于接收节点通知其尚未做好接受准备的帧。
- 帧间隔:用于将数据帧及远程帧与前面的帧分离开来。
CAN帧格式如下图所示,CAN 2.0A中使用的是标准帧,CAN 2.0B中使用的是扩展帧。标准帧和扩展帧的区别在于扩展帧增加了18bit的扩展标识符。一般情况下,与用户直接相关的只有数据帧和远程帧。数据帧和远程帧都可以使用标准帧格式或者扩展帧格式。
CAN总线消息主要由仲裁区、数据区、CRC校验区以及帧结束区荃部分构成。各区主要情况如下:
仲裁区:
-定义消息的优先级;
-消息的逻辑地址(标识符);
-标准帧11位标识符;
-扩展帧29位标识符。
数据区:
-每个消息最多可以包含8字节的数据;
-允许不包含数据帧的帧存在(数据区长度为0字节)。
CRC校验区:
-包含循环冗余校验位。
结束区:
-帧结束区消息响应标识、错误消息、消息结束
上图给出的帧包含起始位、标识符、远程传输请求、标识扩展等,所有相关的仲裁、数据、CRC校验以及帧结束构成了完整的CAN总线消息帧,各部分的具体含义如下:
SOF(1 bit): 标识一个消息帧的开始,在空闲时间的下降沿同步所有的总线模块;
标识符(11 bits):定义消息的逻辑地址和优先级,优先级的数字越小优先级越高;
RTR(1 bit):远程传输请求,如果RTR=1表示在数据帧中没有有效数据,请求远程节点向发出请求帧的节点发送数据;
IDE(1 bit):标识符扩展,如果IDE=1,则采用扩展的数据帧传送数据;
r0 保留;
DLC(4 bits):数据长度代码,数据帧长度允许的数据字节数为{0~8),其他长度数值不允许使用;
数据(0~8字节):消息数据;
CRC(15 bits):循环冗余校验码”只用于检测错误而不能校正;
ACK(2 bits)每一个接听者接收到消息后必须发送响应位(ACK):
EOF(7 bits=1,recesslve):帧的结束;
关于更多CAN数据格式和协议的介绍可以参考官方CAN总线标准的文档,或者广州周立功的《CAN-bus规范V2.0版本》。
13.2.2数据帧
一个数据帧由7个不同的部分组成,分别为:帧起始、仲裁段、控制段、数据段、 CRC段、ACK应答段、帧结尾。如下图所示。
1)、帧起始和结尾
帧起始和帧结尾说明如下图所示。
2)、仲裁段
仲裁段说明如下图所示。
3)、控制段
控制段说明如下图所示。
4)、数据段
数据段说明如下图所示。