学习链接:CAN学习笔记(1)_can sjw-CSDN博客
内容全部取自链接,非原创。用于自己学习和记录,如有错误请指正。如果侵权了,请联系我删掉。
CAN主要有两种物理层,1.闭环的ISO11898 2.开环的ISO11519-2
闭环的框图:
备注:
1.可以留意总线网络中有CAN控制器和CAN收发器。通常一些带CAN外设的MCU及代表的是带有CAN控制器。 CAN收发器需要单独的IC。
2.120欧电阻用于总线可以快速的回归隐形状态。提高稳定性。
备注:1.2.2K电阻的作用也是可以让总线快速的回归隐性作用。
2.MCU中的CAN控制器外设给到CAN收发器的是TTL逻辑电平,经过CAN收发器转换成差分信号。
CAN 的隐形和显性介绍:
隐性是逻辑1
显性是逻辑0
CAN一个位的介绍:
CAN的一个位包含了:SS,PTS.PBS1.PBS2
其中SS 占一个tq,tq是时间片。
波特率:一位数据位的主要由SS 段+PTS 段+PBS1 段+PBS2段,进而根据每秒可以传输的数据位的个数来确定通讯中的波特率。
SJW是什么?
---------------------------------------------------------------------------------------------------------------------------------
重要!!!
CAN的同步问题
CAN 同步分为两个部分:
1.硬同步
2.重新同步
硬同步:
硬同步问题1:总线上出现帧起始信号的下降沿,到节点内部原来的同步位置为什么会产生一个比较大的偏移?
这个地方是一个位发生的事情,总线在出现帧起始信号下降沿SOF的时候,假设就是A节点发的,但是B节点在接收这个显性的时候正好在PTS或者PBS段,B节点发现SOF不在SS段,B节点就会同步SS使SOF在SS段。
补充图理解:
重新同步:
针对下图这种相位有点偏移的,需用到重新同步。
充分理解相位超前和相位滞后
为什么会有相位超前和相位滞后这个也要理解一下//这个上面疑问已经解答了,实际就是总线在出现SOF之后,落在某一节点的SS PTS PBS1 PBS2可能的任意一个位置。
为什么有了硬件同步,还需要重新同步?
当硬同步结束后,在后续的数据传输过程中,必须保证每一个由隐性电平到显性电平的跳变沿也必须落在SS段内。否则,产生重新同步。
疑问1:硬同步不是在每个CAN位都会硬同步的吗?
按照另一个博主的阐述好像确实只会硬同步一次。4 CAN同步机制-CSDN博客
还是有一个问题就是,硬同步是在每一帧的第一个帧吗?
是的。
来自文心一言的回答:
CAN硬同步通常是在每一帧的第一个位,即帧起始位(SOF)进行的。这一同步机制是CAN总线通信中的重要组成部分,用于确保所有节点在接收到新的数据帧时能够重新同步其位时序。
CAN硬同步的详细解释:
- 同步目的:
- 由于CAN总线属于异步通讯,没有专门的时钟信号线,因此节点间必须约定好波特率以确保通信顺畅。然而,由于每个节点的晶振可能存在微小差异,长时间通信后会产生累计误差。硬同步的目的就是在每一帧开始时,通过帧起始位的同步,消除或减小这些累计误差。
- 同步过程:
- 当总线处于空闲状态时,一旦有节点开始发送数据帧,该帧的起始位(SOF)会触发一次硬同步。此时,所有接收节点都会调整自己的同步段(SS)位置,使其与发送节点的帧起始位SS段对齐。
- 这种对齐操作通常是通过接收节点检测帧起始位的下降沿,并据此调整自己的时序来实现的。无论接收节点之前的位时序如何,一旦检测到帧起始位,都会立即进行硬同步,重新开始计算位时间。
- 同步效果:
- 硬同步确保了所有节点在接收新数据帧时都能从同一起点开始计算位时间,从而消除了前一帧可能产生的累计误差。
- 然而,由于晶振差异和线路延迟等因素的存在,硬同步并不能保证后续位时序的完全同步。因此,在CAN总线通信中,还需要通过重同步机制来进一步调整位时序。
注意事项:
- 硬同步只在总线空闲且检测到帧起始位时才进行。
- 在消息帧的随后位中,如果检测到从1到0的跳变(且该跳变落在同步段之外),则会引起重同步操作。
- CAN总线通信中的位填充机制也有助于提高同步质量,通过增加从1到0的跳变机会来增多重同步的数量。
综上所述,CAN硬同步确实是在每一帧的第一个帧起始位进行的,它是CAN总线通信中确保节点间同步的重要机制之一。
相位超前:
总线的边沿跳变落在了节点的PTS段,可以说是相位超前,此时通过重新同步在PBS1中增加2tq。目的使节点与总线时序重新同步。使后1位时序节点的SS 和总线的边沿跳变同步。
相位滞后:
总线的边沿跳变落在了某个节点的PBS2段,称为相位滞后。滞后的情况下第一位的PBS2会减去2tq。
这里补充一个SJW的概念,SJW是什么。在重新同步的时候,对PBS1增加和PBS2或者减少的这段时间长度称为“再同步补偿宽度”SJW“ (reSynchronization Jump Width)。
SJW特性:
1.SJW有最大值
2.当设置SJW比较大的时候,可以吸收的误差加大,但是通讯的速度会下降。
重要!!!!
CAN以数据帧的方式进行传输。//CAN的总线协议帧我在另一个文章里具体在写一下。链接:CAN总线协议帧格式-CSDN博客
CAN协议各种数据帧和用途
数据帧最重要,特性是一个显性位开始,7个连续的隐性位结束。中间有七个部分组成。
1.帧起始(SOF) 2.仲裁段 3.控制端 4.数据段 5.CRC段 6.ACK段 7.帧结束 (EOF)
帧的话,肯定有开始和结束,分别是帧开始和帧结束,帧开始之后先进行仲裁,仲裁之后紧接发送控制,发送数据,对报文进行CRC校验,然后ACK应答,帧结束。
1. SOF段(Start Of Frame),译为帧起始,帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。
2.仲裁段 。仲裁段作用是当总线上同时存在两个报文,总线会根据仲裁段的内容决定哪个数据包能被传输。
仲裁段的内容主要为本帧数据的ID信息,也就是标识符,这个ID信息包含哪些信息,一个是发送目的CAN节点的地址和确认发送的帧类型,是数据帧还是遥控帧,并确认发送的帧格式是标准帧还是扩展帧。//CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。仲裁场从基本ID第一位开始,到标准帧的IDE位或扩展帧的RTR位结束。
补充1:帧类型,帧格式,什么区别?//看图说话
其中,RTR 位(Remote Transmission Request Bit),远程传输请求位,用于区分数据帧和遥控帧,显性电平位数据帧,隐性电平为遥控帧。基于线与的规则,即数据帧优先级高于遥控帧。
IDE 位(Identifier Extension Bit),译为标识符扩展帧,用于区分标准格式和扩展格式,显性代表标准格式,隐性代表扩展格式。基于线与的规则,即标准格式优先级高于扩展格式。
SRR位(Substitue Remote Request Bit),只用于扩展格式。
补充2:CAN总线有线与的特性,及显性0具有高优先级。
3.控制端
图中的r0 r1是什么,r0和r1 是保留位,默认设置是显性。最重要的是DLC(Data Length Code)段,DLC作用是什么,用于表示报文的数据段含有多少个字节。DLC段表示的数字为0-8.
4.数据段:
数据段字如其名,放数据。
能放多少? 答:2-8字节//标准帧
LSB还是MSB ? 答: MSB
5.CRC段:
15位的CRC校验码,接收节点算出CRC和总线发送的CRC码不同,则会向总线的发送节点反馈一个出错的信息。利用错误帧请求总线的发送节点再次发送。
补充:
出现了一个CRC界定符的东西,这个是做什么用的?
主要是为了和后面的ACK段间隔起来,他是隐形的。
6.ACK段
ACK段有两个位,一个是ACK槽 ,第二个是ACK界定符。
规则是什么:在ACK槽位中,发送节点发送的是隐性位,而接收节点则是在这一位中发送显性位以示应答。在ACK槽和帧结束之间有ACK界定符间隔开。
7.帧结束
EOF 段(End Of Frame),帧结束有发送节点发送7个隐性为表示结束。
CAN总线协议帧格式比较重要,内容也比较多,会放在CAN总线协议帧格式-CSDN博客这个链接在具体的去描述。回见。