CAN协议详解

CAN

1. CAN简介

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的 串行通信协议

同步即在同一个时钟驱动下数据通信,半双工即接受与发送不能同时进行。

1.1 CAN协议

CAN协议经过ISO标准化后有两个标准ISO11898标准IS011519-2标准

CAN 1.0/2.0:ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准(闭环),而IS011519-2是针对通信速率为125Kbps以下的低速通信标准(开环)

CAN FD: 数据段速率已经可以提升到8Mbps(实际工程中常用2Mbps),有效负载带宽也提升到64 bytes。

CAN XL:,数据段速率据说可以稳定达到10Mbps,有效负载带宽进一步拓展到2048 bytes。

Kbps:总线的通信速率,指的是位速率。比特率和波特率不是一回事,表示的是:单位时间内,通信线路上传输的二进制位的数量,其基本单位是 bps 或者 b/s (bit per second)。

1.2 CAN Controller

TCxxx系列MCU CAN分为CAN0,CAN1,CAN2,三个CAN modules,每个CAN modules下有4个M_CAN nodes,每个M_CAN node就是一个CAN controller

MCU TX和RX输出TTL电平,逻辑0代表低电平,逻辑1代表高电平

在这里插入图片描述

1.3 CAN Tranceiver

CAN tranceiver的作用是将MCU的TTL电平转换为物理差分电平。并且可以在MCU和Tranceiver都处于休眠状态下,检测CAN总线变化唤醒MCU。

在这里插入图片描述

1.4 CAN物理层

CAN-H和CAN-L都拉到2.5V,差分电压为0,总线这个状态是隐性为1。

CAN-H就变成3.5V,CAN-L变成1.5V,差分电压为2,总线认为这个状态是显性为0。

CAN总线想要正常通信 ,并联1~4个终端电阻(总电阻120Ω ~ 30Ω)都是能正常通讯的。

CAN总线上需要两个120Ω电阻并联,不能直接串联一下60Ω电阻

CAN总线终端电阻的作用有3个:

1、提高抗干扰能力,让高频低能量的信号迅速走掉

2、确保总线快速进入隐性状态,让寄生电容的能量更快走掉;

3、提高信号质量,放置在总线的两端,让反射能量降低。

在这里插入图片描述

1.5 CAN总线行为

空闲状态: 在CAN协议中,当总线上的上出现连续的11位隐性电平(两根线电压差小于0.5V),表示总线就处于空闲状态。
必须所有CAN主机都连续发送11个隐性电平,或者不发送时,总线才能出现连续11个隐性电平,即处于空闲状态。

发送状态: 每次发送数据前,节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的数据。
CAN控制器通过TX脚发出一帧CAN报文的时候,会通过CAN控制器的RX脚进行回读,如果读到自己发出去的逻辑电平跟自己会读到的逻辑电平不一致,在仲裁段时就会停止发报文,在其它段则产生错误帧。

当发出0x128报文的节点发到CANID的第8位时,它发现,明明自己发出去的是逻辑电平1,但读回来就变成了逻辑电平0,因为总线电平被0x123的第8位拉成0。

CAN总线仲裁: 由高位到低位,对CanID逐位(Bit)进行AND运算,当第一次出现比较结果与参与比较的任意一方Bit位不一致时,谁与比较结果一致,谁获胜。
在这里插入图片描述

2.CAN帧格式

2.1 标准帧格式

在这里插入图片描述
在这里插入图片描述

2.2 FD帧格式

在这里插入图片描述

IDE(Identifier Extension) : ID扩展,该标志用于区分标准帧还是扩展帧报文。如果IDE位为隐性1,就会在后边再续上18位的ID,共11+18=29位长度。

FDF(FD Format indicator) : R0位是CAN里边的预留位,在CAN-FD里被用作FD帧格式的标志位FDF,这一位为隐性1就会按FD的帧格式解码后续报文。FD格式标志,该标志用于区分传统CAN还是CANFD报文。

BRS(Bit Rate Switch): 位速率开关,该标志只用于CANFD报文中,用于CANFD报文中数据域传输速率的切换。当 BRS 为显性位(0)时数据段的位速率与仲裁段的位速率一致(恒定速率),当 BRS 为隐性位(1)时速率可变(即 BSR 到 CRC 使用转换速率传输)

ESI(Error State Indicator): 错误状态标志,该标志只用于CANFD报文中,用于指示节点的错误状态(error active或error passive)。
主动错误时发送显性位(0),被动错误时发送隐性位(1)。

2.3 位填充

CAN协议中规定,当相同极性的电平持续五位时,则添加一个极性相反的位填充位的添加和删除是由发送节点和接收节点完成的,CAN-BUS只负责传输,不会操纵信号。

在这里插入图片描述

发送: 对于SOF~CRC(除去CRC界定符) 之间的位流,相同极性的电平如果持续5位,那么在下一个位插入一个与之前5位反型的电平
接收: 对于SOF~CRC(除去CRC界定符)之间的位流,相同极性的电平如果持续5位,那么需要删除下一位再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

3.错误处理

3.1 错误类型

位错误(Bit Check Error): 节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较,如果发现二者不一致,那么这个节点就会检测出一个位错误。

有三种例外情况不属于位错误:
  ① 在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示该节点仲裁失败;
  ② 在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示,该节点当前发送的这一帧报文至少被一个其它节点正确接收;
  ③ 该节点发送被动错误标志,节点Node_A向总线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平“吃掉”;

ACK错误(Acknowledgment Error): 按照CAN协议的规定,在一帧报文(数据帧或者遥控帧)发出之后,如果接收节点Node_B成功接收了该帧报文,那么接收节点Node_B就要在该帧报文ACK槽对应的时间段内向总线上发送一个显性位来应答发送节点Node_A。这样发送节点Node_A就会在ACK槽时间段内从总线上回读到一个显性位。

填充错误(Fill Error): 帧起始到CRC之间,接收节点检测到有6个连续相同的位电平时,也就是违反5位相同位插入1位相反位的“位填充”原则。

CRC错误: 发送节点Node_A在发送数据帧或者遥控帧时,会计算出该帧报文的CRC序列。接收节点Node_B在接收报文时也会执行相同的CRC算法,如果接收节点Node_B计算出的CRC序列值与发送节点Node_A发来的CRC序列值不一致,那么接收节点就检测到一个CRC错误。

格式错误: 在一帧报文发送时,如果在必须发送预定值的区域内检测到了非法值,即与任何一种帧格式都不符;CAN报文中,有预定值的区域包括:

3.2 主被动错误

主动错误: 错误标志由6个连续的显性位组成(这种连续的6个显性位与常规的填充位和其它帧固定格式不相同,正因为如此,硬件才容易区别)。

**被动错误 :**被动错误标志由6个连续的隐性位组成,当发送结束后,处于被动错误状态的节点在下一次再次发送时之前需要等待一些额外时间。

总线关闭: 处于总线关闭状态的节点不允许发送和接收任何形式的帧报文。且只能通过用户请求进行恢复。

在这里插入图片描述
错误计数方式:
在这里插入图片描述

4.CAN数据库

CAN数据库.dbc文件,包含了本节点的CAN发送报文信息,也包含了需要接收其他接待地点CAN报文。

4.1 DBC报文属性

应用报文: GenMsgILSupport:Yes。

网络管理报文: NmAsrMessage:Yes。

XCP报文: 在CANIF模块里手动设置其上层模块Upper Layer(PduUserTxConfirmationUL)为XCP模块。其他属性同。

诊断报文:

  1. 功能寻址:DiagState:Yes。
  2. 物理寻址请求:DiagRequest:Yes。
  3. 物理寻址响应:DiagResponse:Yes。

4.2 DBC Demo文件

存储当前文件命令为demo.dbc供项目使用。

VERSION ""


NS_ : 
	NS_DESC_
	CM_
	BA_DEF_
	BA_
	VAL_
	CAT_DEF_
	CAT_
	FILTER
	BA_DEF_DEF_
	EV_DATA_
	ENVVAR_DATA_
	SGTYPE_
	SGTYPE_VAL_
	BA_DEF_SGTYPE_
	BA_SGTYPE_
	SIG_TYPE_REF_
	VAL_TABLE_
	SIG_GROUP_
	SIG_VALTYPE_
	SIGTYPE_VALTYPE_
	BO_TX_BU_
	BA_DEF_REL_
	BA_REL_
	BA_DEF_DEF_REL_
	BU_SG_REL_
	BU_EV_REL_
	BU_BO_REL_
	SG_MUL_VAL_

BS_:

BU_: Tester TDA4


BO_ 1808 Message_Tester_XCPReq: 8 Tester
 SG_ Signal_Tester_XcpReq : 
  • 25
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值