8. CAN
8.1 基本概念
全称Controller Area Network,是一种半双工,异步通讯。没有主从的说法,每个设备都可以发送和接收。
8.1.1 物理层
两条信号线,CAN_High和CAN_Low两条差分信号线,以差分形式通讯
两种网络形式:
闭环:允许总线最长40m,最高速1Mbps
∘ \circ ∘ 规定总线两端各有一个120Ω电阻。
∘ \circ ∘ CAN控制器是各个连接到总线上的设备的控制器,一般需要配备一个CAN收发器(比如咱们战队码盘上的CAN收发器用的是TJA1050),用于将CAN控制器的二进制码流转换为CAN总线的差分电平,在两条有差分电压的总线电缆上传输数据
开环:最大传输距离1Km,最高速125Kbps
∘ \circ ∘ 规定每根线串联一个2.2kΩ的电阻
CAN协议差分信号
∘ \circ ∘ 显性电平对应“0”,隐性电平对应“1”。隐性电平(1)两条线电压都是2.5V,即压差为0;显性电平(0)CAN_High和CAN_Low分别为3.5V和1.5V,压差为2V。
∘ \circ ∘ 总线上,只要有一个节点输出显性,则总线上为显性电平;只有所有节点都是隐性电平,总线才为隐性电平
∘ \circ ∘ 由于CAN是半双工的,收发分开进行,且是总线通讯,所以一个时刻只能有一个节点发送,其他节点在此时只能接收
8.1.2 协议层
位时序
意义:为了实现正确的总线电平采样,确保通讯正常。最小单位是Tq(Time Quantum),一个完整位由8~25个Tq组成
组成:SS段、PTS 段、PBS1段、PBS2段
段名 | 意义 | 作用 |
---|---|---|
SS(1Tq) | 同步段 | 使总线各节点同步 |
PTS(1~8Tq) | 传播时间段 | 补偿物理延时,是传播时间、收发器延时之和的两倍 |
PBS1(1~8Tq) | 相位缓冲段1 | 补偿变压阶段误差 |
PBS2(2~8Tq) | 相位缓冲段2 | 补偿边沿阶段误差 |
SJW(1~4Tq) | 再同步补偿宽度 | 补偿时钟频率偏差、传输延迟等 |
例如
通讯波特率的计算:CAN使用的时钟线是APB1 peripheral clocks(假设是APC),即一般是SYSCLK的四分频。而CAN通讯还要对此进行预分频(假设是Prescaler),则一个Tq为 Prescaler / APC(单位s)。而一个数据位占(SS+PTS+PBS1+PBS2+SJW)个Tq。则一秒可以传输的位数就是 1 T q ∗ 一 个 位 得 T q 数 \frac{1}{Tq*一个位得Tq数} Tq∗一个位得Tq数1