物理层特征
信号传输原理:
CAN控制器根据CAN_L和CAN_H上的电位差来判断总线电平,总线电平分为显性电平(CAN_H与CAN_L压差 = 2v)、隐性电平(CAN_H与CAN_L压差 = 0v),发送方通过总线电平的变化,将消息传递给接收方,其中显性电平对应逻辑0、隐形电平对应逻辑1。
硬件连接:
单片机的CAN接口通过TJA1050芯片与CAN总线进行连接,TJA1050会将单片机的逻辑信号转换成CAN_H和CAN_L。
CAN帧
CAN帧有数据帧、遥控帧、错误帧、过载帧、间隔帧这五种,
数据帧、遥控帧有标准格式和扩展格式这两种,标准格式有11个标识符(ID),扩展格式有29个ID,这个ID决定了信息的优先级。
数据帧的组成:
数据帧由7部分组成,含义如下:
- 帧起始:
表示数据帧的开始,一个位的显性电平
- 仲裁段:
表示该帧优先级的段(ID)。
标准格式下该段由11个基本ID、RTR组成,其中:基本ID禁止高7位都为隐性(1111111xxxx不允许),RTR表示远程请求位(0表示数据帧,1表示远程帧)
扩展格式下该段由1个基本ID、SRR、扩展ID、RTR组成,其中:基本ID与标准格式的基本ID完全一样,SRR替代RTR(应设置为1),IDE表示标识符选择位(这里应为1,代表扩展标识符)
- 控制段:
表示数据的字节数及保留位的段
标准格式下该段由IDE、r0、DLC组成,其中r0为保留位(发送必须为0,接收无要求),DLC为数据长度码(范围是0~8,代表接收/发送的数据长度,单位为字节),IDE表示标识符选择位(这里应为0,代表标准标识符)。
扩展格式下该段由r0、r1、DLC组成,其中r0、r1为保留位与标准格式要求一致,DLC也与标准格式含义一致。
- 数据段:
数据的内容,一帧可以发送0~8个字节的数据,高位先输出。
- CRC段:
检查帧的传输错误的段,检查范围是帧起始、仲裁段、控制段、数据段这4个段做CRC运算,存放到CRC区域。
接收方以相同的方式对接收到的这4个段进行CRC运算,并把运算结果与数据帧的CRC段进行比较,如果结果不一致则报错。
- ACK段:
表示确认正常接收的段,由ACK槽、ACK界定符组成。发送方将数据帧的ACK段设置为11,接收方接收到正确的消息后,在ACK槽发送0。
注意:发送ACK的是接收到正常消息的、不处于总线关闭态和休眠态的所有接受单元,发送单元只设置ACK段,不发送ACK段。正常消息代表无填充错误、格式错误、CRC错误。
- 帧结束:
表示数据帧结束的段,由7个1组成。
下图为帧的结构框图,其中D代表显性电平,R代表隐性电平。
总线仲裁
总线空闲时,一个发送单元开始发送数据,其余发送单元无法抢占,直到该发送单元发送完毕。
多个发送单元同时发送时,从ID位开始比较,显性单元(0)多的单元优先级高。
位时序
位速率:
发送单元在非同步的情况下发送的每秒钟的位数,也就是波特率。
位时序:
一个位可以分成同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2),这些段由Time Quantum(Tq)的最小时间单位构成。
这种一个位分为4个段,每个段分为多个Tq的时序叫做位时序。通过设置位时序,多个单元可以同时采样,也可以任意设置采样点。
位时间:
位时间 = 1/波特率。
如果1bit被分为了10Tq,1个Tq=0.1us,那么计算可得波特率=1MHz。