一、基础电平介绍
显性电平--逻辑0 隐性电平--逻辑1
CAN空闲状态时,总线上为显性电平状态。
二、数据帧介绍(最常用也最常见)
参考链接:
(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段,即ID+RTR。
(3) 控制段。表示数据的字节数及保留位的段,即IDE+DLC。
(4) 数据段。数据的内容,一帧可发送0~8个字节的数据。
(5) CRC段。检查帧的传输错误的段。
(6) ACK段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段。
RTR:0--数据帧 1--远程帧(遥控帧)
IDE:0--标准帧 1--扩展帧
DLC:数据段长度 0~8 (接受到9~15时也认为合法)
这三个数据部分芯片CAN模块会自动解析或填充在头信息寄存器中,直接获取或填充即可确定此帧的这三个参数。
ACK段的错误信息
在一帧数据的发送中,发送端的ACK段的电平需要发送2个位的隐性位,而接收到正确消息的单元在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束。发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送ACK)。
所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。
大部分芯片可以直接解析出CAN数据发生错误的位置(诸如数据填充错误,CRC校验错误等等)以及发送错误时的状态(接收/发送)。
如何根据错误信息发现问题原因?
这里举例实际调试过程中出现的情况,如双节点采用同ID回复时(这个设计时错误的),当同时发送给两个CAN节点,并要求两个CAN节点都回复,由于ID一致,帧类型以及数据长度也一致,但数据不一致,在发送时有概率触发发送状态错误,计数+8,错误发生位置为Data Field,说明数据填充处出现问题。
具体错误相关介绍见如下链接:
三、CAN位时序介绍
一个位可分为 4 段。
l 同步段(SS)
l 传播时间段(PTS)
l 相位缓冲段1(PBS1)
l 相位缓冲段2(PBS2)
这些段又由可称为 Time Quantum(以下称为Tq)的最小时间单位构成。
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。
通常在CAN实现中,传播段(PROP_SEG)和相位缓冲段1(PHASE_SEG1)被统一编程,可称为Time segment 1,长度可编程为4-16tq。Time segment 1代表相位缓冲段(PHASE_SEG2),长度可编程为2-8tq。在位时间中,时间份额的总数必须为8-25tq。
PTS+PBS1 = BS1 = TSEG1 = SEG1+1 (SEG1通常用于芯片寄存器BTR1[3:0] -- 0~15)
PBS2 = BS2 = TSEG2 = SEG2+1 (SEG2通常用于芯片寄存器BRT1[6:4] -- 0·7)
采样点计算公式:
sample = (1+BS1)/(1+BS1+BS2)
对于采样点的选择,采样点越靠前,可传输距离越短,但是同步误差容错率高,越靠后,可传输距离越长,同步误差容错率越低。因为采样点越靠前,由于距离产生的信号延迟越容易落在采样点后方,但留给同步的时间就越多。建议采样点范围在70%--87.5%,根据波特率大小,越大,采样点越靠前。
参考链接如下: