详情学习
一文读懂CAN总线协议 (超详细配34张高清图)_can总线协议详解-优快云博客
CAN总线协议和应用示例 - fuzidage - 博客园 (cnblogs.com)
问题
同步通信和异步通信
什么是同步通信?什么是异步通信?两者的优缺点是什么?_同步通信和异步通信-优快云博客
异步通信传输方式利用每一帧的起、止信号来建立发送与接收之间的同步。特点是:每帧内部各位均采用固定的时间间隔,而帧与帧之间的间隔时随即的。接收机完全靠每一帧的起始位和停止位来识别字符时正在进行传输还是传输结束。
同步通信进行数据传输时,发送和接收双方要保持完全的同步,因此,要求接收和发送设备必须使用同一时钟。优点是可以实现高速度、大容量的数据传送;缺点是要求发生时钟和接收时钟保持严格同步,同时硬件复杂。
可以这样说,不管是异步通信还是同步通信都需要进行同步,只是异步通信通过传送字符内的起始位来进行同步,而同步通信采用共用外部时钟来进行同步。所以,可以说前者是自同步,后者是外同步。
差分信号
差分信号(Differential Signal)是一种通过两根相对的电缆或线路传输信号的技术。它的核心思想是用两个互为反相的信号来表示信息,而不是使用一个信号和地线的方式。差分信号的优点在于它对外部噪声的抗干扰能力更强,因此在高速数据传输中得到了广泛应用。
差分信号的基本概念
差分信号通过两根导线(通常被称为正信号线和负信号线)传输,分别传输信号的正负两个部分。接收端对这两根信号线的电压差进行比较,从而恢复出原始信号。由于传输的是信号的电压差,而不是单一的信号电压值,差分信号具有以下几个特点:
-
抗噪声能力强:因为噪声通常会同时影响两根信号线,但噪声对两根线的影响是相同的,所以接收端可以通过比较两根线的电压差来抵消外部的共模噪声,从而减少噪声对信号传输的影响。
-
信号质量高:差分信号的高抗干扰能力使得其在长距离传输时可以保持较好的信号质量。
差分信号的工作原理
假设有两个信号线:V+ 和 V-,分别代表差分信号的正负信号。信号通过这两根线同时传输,发送端的电压会在两条线之间产生一定的电压差:
- 发送端的信号是这样表示的:
- V+ = V0 + ΔV
- V- = V0 - ΔV
其中,V0 是公共电平,ΔV 是信号的差分电压。
接收端会对这两根线之间的电压差(即 V+ - V-)进行计算,从而得到原始信号的值 2ΔV。接收端只关心两根线之间的电压差,而不关心它们相对于地的具体电压值,因此可以抵消地面噪声等共模干扰。
差分信号的应用
差分信号广泛应用于高速数据传输中,以下是一些典型的应用场景:
-
USB(Universal Serial Bus):USB接口使用差分信号进行数据传输。USB中的数据线包括两根线(D+ 和 D-),它们传输的是差分信号。
-
Ethernet(以太网):以太网使用差分信号在不同设备之间进行通信。千兆以太网(Gigabit Ethernet)及以上的标准,如1000BASE-T,采用差分信号的技术进行数据传输。
-
HDMI(High-Definition Multimedia Interface):HDMI用于高清晰度视频和音频的传输,它也采用差分信号来确保高质量的信号传输。
-
PCI Express(PCIe):PCIe是一种高速的计算机内部总线标准,它使用差分信号来传输数据,保证高速数据的可靠性和稳定性。
-
LVDS(Low Voltage Differential Signaling):低电压差分信号是一种专门用于高速数据传输的差分信号技术,广泛应用于液晶显示器和高性能计算机的内部连接。
差分信号的优点
-
抗干扰能力强:差分信号能够有效抵消噪声和共模干扰,提高传输信号的可靠性。
-
信号完整性高:差分信号不容易受到外部环境因素(如电磁干扰)的影响,能够在较长的距离上传输而不失真。
-
低功耗:相比单端信号,差分信号的功耗较低,适用于高速、高效的数据传输。
差分信号的缺点
-
布线复杂:差分信号需要使用两根线对来传输,增加了电路的布线复杂性。
-
成本较高:差分信号需要特殊的电缆或线路设计,增加了制造成本。
-
信号驱动要求较高:为了确保信号在长距离传输中保持完整,需要使用差分驱动器,这会增加系统的复杂度和成本。
总结
差分信号是一种通过两根信号线传输电压差的信号方式,具有良好的抗干扰性和信号完整性。它广泛应用于高速数据传输的场合,例如USB、以太网、HDMI、PCIe等标准中。尽管差分信号具有许多优点,但它也需要较为复杂的电路设计和较高的成本。
位时序
关键是如何同步的?
CAN (Controller Area Network) 位时序是指在 CAN 总线通信中数据传输的时间安排与节奏,包括数据位的发送、采样、仲裁和错误检测等过程的具体时序。位时序定义了如何在网络上各个节点之间传输信息,并确保数据的可靠性、有效性和同步性。
CAN 位时序的基本组成部分
-
比特定时(Bit Timing): CAN 总线协议使用的时钟频率为比特定时,也就是每一位数据在总线上传输的时间长度。每一个比特周期可以细分为若干个时间量度单位(称为 "Time Quanta",简称 TQ),每个 TQ 是一个固定时间间隔。
-
时钟分辨率: CAN 总线的时钟精度非常重要,CAN 总线使用分段的方式来控制比特定时,通常分为:
- 同步段(Synchronization Segment):用于同步节点之间的时钟。
- 传播段(Propagate Segment):用于补偿信号传播延迟。
- 访问段(Phase Segment 1 和 Phase Segment 2):用于调整和校正节点时钟偏差。
- 重同步段(Resynchronization Segment):发生位时序调整时使用。
这些时段帮助确保总线上各个节点的同步性,从而避免数据丢失和错误。
CAN 位时序的作用
CAN 位时序具有多项重要作用,主要体现在以下几个方面:
-
确保节点同步: 位时序确保所有连接到总线的节点都能在正确的时间采样和发送比特数据。CAN 协议依赖于节点间的精确同步,以保证网络上所有设备的数据传输准确无误。
-
数据传输速度的控制: 通过调整比特定时,CAN 网络可以支持不同的数据传输速度。高传输速率时,可以降低每个比特的时长;低速时,可以延长每个比特的时长。
-
仲裁机制: CAN 总线采用的是一种多主机、无集中控制器的网络架构。各个节点在总线上具有相等的优先级,但当多个节点同时尝试发送数据时,会发生“仲裁”。在仲裁过程中,节点会根据时序规则和数据位的值进行比对,最终允许优先级高的节点完成数据发送。位时序保证了仲裁过程的正确进行,特别是当多个设备同时尝试在总线上发送时,低电平(0)总是具有更高的优先级,保证了优先级高的数据能够传输。
-
错误检测和纠正: 位时序有助于 CAN 总线对传输错误的快速检测。错误检测机制如位错误(bit error)、形式错误(stuff error)和 CRC 错误等依赖于精确的时序。CAN 总线协议中每个节点都会对收到的比特数据进行校验,如果发现数据不符合期望的时序模式,节点会立即检测到错误并进行适当的错误处理。
-
信号传播与校正: 位时序的分段设计(如传播段、访问段)可以用来校正由于电缆长度、节点间距离等原因引起的信号传播延迟,确保即使在较长的总线网络中,数据传输仍然能够正确同步。
总结
CAN 位时序的主要作用是确保总线上所有节点的数据交换按正确的节奏进行,避免冲突和数据错误。它通过对时序的精确控制实现以下目标:
- 保证所有设备的同步。
- 支持高速和低速的通信。
- 支持仲裁机制,保证优先级高的数据优先传输。
- 提供数据错误检测与纠正功能。
- 优化信号传播,消除信号延迟。
因此,CAN 位时序是整个 CAN 总线协议中至关重要的一部分,直接影响到通信的可靠性和效率。
显性电平和隐性电平
两根信号线的电压差CANH-CANL表示CAN总线的电平,与传输的逻辑信号1或0对应。对应于逻辑1的称为隐性(Recessive)电平,对应于逻辑0成为显性(Dominant)电平。如图5所示,上半部分为实际CANH和CANL的电平,下半部分对于的逻辑电平。
图5.根据 ISO 11898 的额定总线电平
主动错误和被动错误
在 CAN 总线协议中,错误标志用来指示总线上的节点在通信过程中遇到的问题。这些错误标志通过 CAN 帧中的 错误标志位 来传递,其中主要包括 主动错误标志 和 被动错误标志 两种。为了理解这两者的含义,需要先了解 CAN 错误处理机制的基础。
主动错误和被动错误的区别
-
主动错误(Active Error):
-
主动错误标志是指节点当前处于错误状态,并且它积极地参与错误的检测和处理。节点通过发送 主动错误标志 来表示它已经检测到错误,并立即通知其他节点,尽可能采取措施进行恢复。主动错误标志通常表示节点已经经历了某些错误条件,并且其当前状态为“错误活跃”。
-
节点在遇到 主动错误 时,它会:
- 进入错误状态。
- 会增加错误计数器(发送错误计数器和接收错误计数器),并在错误计数器达到预设的阈值时进入“被动错误”状态。
- 发出 主动错误标志(错误标志位被设置为“1”)表示该节点在通信中检测到并响应了错误。
-
-
被动错误(Passive Error):
-
被动错误标志是指节点已经处于一种相对较轻的错误状态,不会主动去干扰总线的正常通信。处于 被动错误 状态的节点不会发送主动错误标志,而是通过一些被动方式参与错误检测。
-
当节点进入 被动错误 状态时,它不会像 主动错误 状态那样主动发送错误标志,而是处于较为“隐形”的错误状态,继续尝试接收信息,但不会影响总线的正常运行。只有在发生严重错误(如 CRC 错误)时,它才会被迫变回“主动错误”状态。
-
在 被动错误 状态下,节点的 错误计数器 会在较少的错误条件下发生增加(比主动错误状态时更宽松),并且一旦计数器达到了某个阈值,节点会变回 正常状态,重新进行数据传输。
-
解释:主动错误标志与被动错误标志
-
主动错误标志(Active Error Flag):
- 发送错误标志的节点在主动错误状态下,会通过总线向其他节点发送一个特殊的错误帧,通常称为“主动错误标志帧”。
- 主动错误标志会在总线上发送两个位:错误标志位 和 填充位。这些位信号告诉总线上其他节点,当前节点已经检测到并发觉了错误。
-
被动错误标志(Passive Error Flag):
- 当节点进入被动错误状态时,它只会在接收到错误帧时按一定规则响应错误,但不再主动发送错误标志位。这是因为节点已经不再主动对总线上的错误进行干预,避免对总线的影响过大。
错误状态转换
节点的 错误状态 根据其错误计数器的值变化,主要有以下几种状态:
-
正常状态(Error Active):
- 错误计数器在正常范围内,节点能够正常发送和接收数据,并在发生错误时主动发送错误标志。
-
主动错误状态(Error Active):
- 如果节点的发送错误计数器(TEC)或接收错误计数器(REC)增加到阈值(通常为 128)时,节点进入 主动错误状态,在该状态下,节点会继续正常通信,同时会检测并报告错误,直到其错误计数器恢复到正常范围。
-
被动错误状态(Error Passive):
- 当节点的错误计数器达到更高的阈值(通常为 256)时,节点会进入 被动错误状态。此时,节点仍然能够接收并处理数据,但它不会主动干扰数据传输,只会被动地响应错误,避免对总线产生过大影响。
-
总线关闭状态(Bus Off):
- 如果错误计数器进一步增加(通常超过 255),节点将被置为 总线关闭状态,它将断开与总线的连接,直到发生外部复位或节点自我恢复。
总结
- 主动错误标志 是节点在处于 主动错误状态 时,主动发出的错误指示,表示节点已检测到并响应了错误,主动干扰总线通信以通知其他节点。
- 被动错误标志 是节点在处于 被动错误状态 时,不主动发送错误标志,只会在检测到错误时采取更温和的响应方式,不影响总线的正常传输。
主动和被动错误的状态转换与错误计数器的值相关,系统会尽量减少因单个节点错误对整个网络的影响。