CAN 总线协议详解

发布时间:2024-10-15 08:11:50  



概述


CAN 协议即控制器局域网络 ( Controller Area Network )简称,由研发和生产汽车电子产品著称的德国 BOSCH 公司开发,成为国际标准ISO11519以及ISO11898。


图片


CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线。


图片






CAN协议构成


can协议分为物理层和协议层


CAN协议物理层


1.通讯方式


CAN使用异步通信,利用CAN_High和CAN_Low两条信号线组成的差分信号线进行通讯(和传统的时钟通信不同)。


图片


传输速率


500kbps和125kbps的总线分别针对不同类型的ECU。


◆500kbps CAN总线 连接了ABS(防抱死制动系统),SAS(转向角传感器), ETM (发动机电子控制模块)和ECM(电子控制模块),通常用于传输速率要求较高的控制信号。


◆125kbps CAN接口连接了DDM(所有权门模块)和PDM(电梯门模块),通常用于传输速率要求较低的控制信号。


差分信号


差分信号通信是一种通过两条导线(或信号线)传输数据的方式,主要用于提高抗干扰能力和信号完整性。


概念


在差分信号通信中,同一信号的两个版本会同时在两条导线上传输:

正信号(+): 原始信号

负信号(-): 原始信号的反相版本


例如:

如果正信号是高电平(+5V),负信号就是低电平(0V)

如果正信号是低电平(0V),负信号就是高电平(+5V)


信号的产生

发送端通过一个差分驱动器(或发送器)生成差分信号:

正信号线(D+): 直接传输原始信号

负信号线(D-): 传输原始信号的反相信号


例如:

当发送逻辑“1”时,D+线上为高电平,D-线上为低电平

当发送逻辑“0”时,D+线上为低电平,D-线上为高电平


信号的传输

差分信号通过两条导线同时传输,导线之间的电压差(即差分电压)决定了信号的逻辑状态:


差分电压 = D+ 电压 - D- 电压


◆逻辑“1”通常表现为正的差分电压(例如 +2V)

◆逻辑“0”通常表现为负的差分电压(例如 -2V)


信号的接收

接收端使用差分接收器来解读信号

差分接收器不直接读取D+或D-的电压值,而是 读取它们之间的电压差


◆如果D+的电压高于D-的电压,接收器将其解读为逻辑“1”

◆如果D+的电压低于D-的电压,接收器将其解读为逻辑“0”


抗噪声原理

当外部噪声(如电磁干扰)影响到传输线时,通常会同时影响到D+和D-两条线,使它们的电压同时上升或下降。


但由于接收器只关注两条线之间的电压差,这种共模噪声不会改变信号的逻辑状态,因此可以被有效抑制。


CAN 协议中的差分信号规范


图片


图片


CAN 总线协议的物理层,只有 1 对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN 通讯是 半双工 的,收发数据需要分时进行。


CAN 的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。


2.总线网络

can的物理层的形式有两种


◆ISO11898 标准的高速、短距离“闭环网络”

◆ISO11519-2 标准的低速、远距离“开环网络”


闭环网络


图片


◆总线最大长度为 40m

◆通信速度最高为 1Mbps

◆闭环总线两端各有一个120Ω的电阻


开环网络


图片


总线最大长度为 1km

最高通讯速率为 125kbps

每根总线串联一个2.2kΩ的电阻


3. 通讯节点


图片


通讯节点构成

◆一个 CAN 控制器及 CAN 收发器构成

◆通过 CAN_Tx 及CAN_Rx 信号线连接控制器与收发器

◆通过 CAN_High 及 CAN_Low 信号线连接收发器和 CAN 总线

◆CAN_Tx 及 CAN_Rx 使用普通的类似 TTL 逻辑信号

◆CAN_High 及 CAN_Low 是一对差分信号线


多通讯节点挂载

一个总线可以挂载多个节点, CAN 通讯协议不对节点进行地址编码,对数据内容进行编码的。 节点个数理论上不受限制(总线的负载足够即可,通过中继器增强负载)


通讯节点通讯流程


接收和发送流程相反


发送数据

◆控制器把要发送的二进制编码通过 CAN_Tx 线发送到收发器。

◆收发器把这个普通的逻辑电平信号转化成差分信号。

◆通过差分线 CAN_High 和 CAN_Low 线输出到 CAN 总线网络。


接收数据

CAN 总线网络将数据通过差分线CAN_High 和 CAN_Low 发送。 收发器把总线上收到的 CAN_High 及 CAN_Low 信号转化成普通的逻辑电平信号, 最后通过 CAN_Rx 线输出到控制器中。


CAN电平转换芯片(部分)

图片


CAN协议协议层


1.波特率及位同步


通讯的波特率


==总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以确定 CAN 通讯的波特率==

图片

SJW[1:0]再同步补偿宽度
TS1[3:0]时间段1
TS2[2:0]时间段2
BRP[9:0]波特率分频器
SS同步段恒等于1
设置APB1的时钟频率,STM32F1通常为36MHz(外部8M晶振)


详细计算方式参考:CAN总线波特率的设定——以STM32F103为例 - 知乎 (zhihu.com)


示例:

假设1Tq=1us,而每个数据位由 19 个 Tq 组成,则传输一位数据需要时间;


T1bit=19us,从而每秒可以传输的数据位个数为:1x10次方/19 = 52631.6 (bps)


每秒可传输的数据位的个数即为通讯中的波特率, CAN 属于异步通讯,没有时钟信号线。 连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用好的波特率进行通讯。 (同时使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常)


位时序分解


CAN 协议把每一个数据位的时序分解成SS 段,PTS 段,PBS1 段,PBS2 段

,四段的长度加起来即为一个 CAN 数据位的长度。


分解后的最小时间单元为Tq(一个完整的位由 8~25 个 Tq组成)


图片

(此处高低电平直接代表信号逻辑 0 或逻辑 1)


示例的的数据:位长度为19Tq


◆SS 段占 1Tq

◆PTS 段占 6Tq

◆PBS1段占 5Tq

◆PBS2 段占 7Tq


SS段

同步段(大小固定为 1Tq)

==检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的==


PTS段

传播时间段(大小为 1~8Tq)

==补偿网络的物理延时时间==,总线上输入比较器延时和输出驱动器延时总和的两倍


PBS1 段 (PHASE SEG1)

相位缓冲段(大小为 1~8Tq)

==补偿边沿阶段的误差==,它的时间长度在重新同步的时候可以加长


PBS2 段 (PHASE SEG2)

另一个相位缓冲段(大小为 2~8Tq)

==也是用来补偿边沿阶段误差的==,时间长度在重新同步时可以缩短


同步过程分析


简述同步:使数据接收方能够正确地解释和处理从发送方接收到的数据,确保接收方能够准确地识别出每个数据位的开始和结束。


CAN的同步分为两种:硬同步和软同步


硬同步(针对短帧传输)

硬同步是当CAN节点在总线上检测到一个 显性边沿 (即从隐性位跳变到显性位)时进行的同步操作


隐性位跳变到显性位:

显性位(Dominant Bit): 表示逻辑“0”

◆**隐性位(Recessive Bit):**表示逻辑“1”

边沿(Edge): 边沿是指信号从一个状态转换到另一个状态。例如,从隐性位(逻辑1)跳变到显性位(逻辑0)时,这种转换称为“显性边沿”


工作原理:

◆帧起始位(SOF):

◆触发硬同步:


示例:

假设有两个CAN节点,节点A(发送方)和节点B(接收方)(同一个CAN总线上通信)。

节点A准备发送一帧数据,节点B则负责接收该帧数据。


1.总线处于空闲状态


在开始通信之前,CAN总线处于 空闲状态 ,此时总线的电压处于隐性位(逻辑1),节点A和节点B都在等待总线的变化。


1.节点A发送数据帧起始位(SOF)


节点A开始发送一个数据帧。CAN通信的规则规定,帧的开始由一个 显性位 表示,称为 帧起始位(SOF) 。因此,节点A从隐性位(逻辑1)切换到显性位(逻辑0),即电压变化使CAN H和CAN L线之间的差异增加。


1.节点B检测到显性边沿并进行硬同步


当节点B在总线上检测到这一从隐性位跳变到显性位的电压变化(显性边沿)时,它会执行“ 硬同步 ”操作:


◆节点B内部的 位时钟 会被立即 重置 ,并开始一个新的计时周期

◆这个计时周期与节点A发送数据时的周期对齐,确保节点B能与节点A同步读取接下来的数据位


重新同步(针对长帧传输)

在长帧传输时,(时钟漂移导致节点的时钟和总线的时钟出现偏差)确保节点的时钟与总线保持同步


基本原理:

CAN节点的内部时钟(位时钟)与总线上的信号发生了偏移,

重新同步通过检测==普通数据位的跳变沿(从高电平到低电平,或从低电平到高电平)==来对齐时钟


相位超前(时钟快):

节点的时钟比总线时钟快,这意味着节点会比总线更早检测到数据位的跳变沿

==通过延长相位缓冲段1(PBS1)的时间来使节点的时钟与总线对齐==

图片


相位滞后(时钟慢):

节点的时钟比总线时钟慢,节点在总线跳变沿之后才检测到信号

==通过减少相位缓冲段1(PBS1)的时间来赶上总线时钟==


图片


重新同步补偿宽度(SJW)

调整时钟的一种机制,用来修正节点时钟与总线信号之间的偏差


最大SJW的限制

CAN控制器通常会为SJW设置一个最大值(单次同步操作中,时钟的调整范围不能超过设置的最大值)


偏差超过最大值(不能再一次完成),只能通过多次小幅度的调整完成

PBS1 和 PBS2 的调整


PBS1 (相位缓冲段1):

PBS2 (相位缓冲段2):


2.报文种类及结构


SPI 通讯,片选、时钟信号、数据输入及数据输出这 4 个信号均有单独的信号线。


I2C 协议,包含有时钟信号及数据信号 2 条信号线,异步串口包含接收与发送 2 条信号线。


但是CAN只有两条差分信号线(只能表达一个信号),所以CAN协议==对数据、操作命令 (如读/写) 以及同步信

文章来源于:电控知识搬运工    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>