第四课 communcation服务-can基础第一弹

根据nxp can开发白皮书,介绍s32k1系列芯片的can通信速率、外部晶振、同步段、传播段、相位段之间的关系。

1.Can通信基础概念:

通信速率:单位时间内可以传输的数据量

最小位时间:Tq(Time Quantum,时间量子)是CAN控制器的最小时间周期。

逻辑电平:CAN总线差分的模拟信号

CAN数据传输:

采样点:是读取总线电平,并将其解析为数值的时间点。

报文:在CAN总线上传输的信息称为报文。

故障界定:

位同步:CAN的位同步是指使接收单元对每一位数据和发送单元保持同步。

位编码:位编码定义了CAN总线上数据如何以二进制位的形式进行传输。在CAN通信中,每个字节(8位)都遵循特定的位编码规则。
位填充:位填充是CAN通信协议中的一种错误检测和防止机制。

2. Can通信实例讲解

2.1通信速率:

在CAN总线领域,波特率(Baudrate)是一个重要的参数,它指的是单位时间内传输的码元数,也称为调制速率、波形速率或符号速率,其单位是波特(Baud,或symbol/s,码元数每秒)。

在CAN通信中,一个码元通常表示0和1两个状态,因此需要一个Bit来表示。由于这种对应关系,在CAN通信中,比特率(即单位时间内传送的比特数,基本单位为bps、bit/sec、bit/s或b/s)和波特率在数值上通常是相等的。

在实际应用中,为了实现CAN总线设备与串口设备之间的正常通讯和转换,需要确保两侧设备的波特率一致。波特率的设置通常依赖于具体的CAN总线设备和串口设备的规格,并可以通过配置软件进行设置。在CAN波特率设置中,涉及到对CAN位定时寄存器和CAN波特率预分频扩展寄存器的配置,以得到所需的通信波特率。

综上,CAN的波特率可以理解为CAN总线上单位时间内传输的码元数,它对于确保CAN通信的稳定性和可靠性至关重要。

在晶振为16Mhz的条件下,配置一个500kb的通信速率的CAN节点:

晶振频率=16Mhz,那么每一个时间片最小时间就为0.0625μs. 

通信波特率为500Kbit/s,那么每一个bit的时间就为2μs.

因此,每一个bit的总的时间片数目就为32。

时间片数= BRP*位时间总数目

CAN通信有两个标准,分别为ISO11898(高速 CAN 通信标准125kbps ~ 1Mbps)和 ISO11519(低速 CAN 通信标准10kbps ~ 125kbps)

2.2 位时间:

要了解位时间,首先了解CAN通信最小的时间份额Tq。

在CAN系总线系统中的两个时钟:晶振时钟周期和CAN时钟周期:

如图所示,一个CAN周期叫一个Tq,一个Tq是一个晶振的倍数。

Tq(Time Quantum,时间量子)是CAN控制器的最小时间周期。它是通过对芯片晶振周期进行分频而得来的,代表了一个基础的时间单位。在博主的理解中就是等于1/晶振周期,控制器运行指令的速度。

一个位时间(即发送一个二进制位所需的时间)由若干个Tq组成,通常为8到25个。

一个位时间又被分为四个功能阶段:同步段(Sync_Seg)、传播段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2)。

同步段(Sync_Seg):用于实现时序调整,总线上各个节点的跳变沿产生在同步段内,通常为1个Tq。


传播段(Prop_Seg):用于补偿网络上的物理延迟时间,这些延迟时间包括信号在总线上的传输延迟和CAN节点内部的物理延迟。

它通常包括总线输入比较器的延迟和输出驱动器延迟的总和的两倍。

输入比较器的延迟:当信号到达CAN节点时候,节点的输入电路需要一定的时间比较和识别这个信号的电平。这个比较的过程需要的时间就是输入比较延迟。输入比较器负责将接收到的模拟信号转换为数字信号,以供节点内的数字电路处理。

输出驱动延迟:一旦CAN节点决定发送一个信号到总线上,它的输出驱动器需要一定的时间来产生并驱动这个信号到总线上。这个驱动过程需要的时间就是输出驱动延迟。输出驱动器负责将节点内的数字信号转换为总线上的模拟信号,并去报信号具有足够的强度和稳定性。

传播延迟:CAN信号在总线上运行的时间。

{Note:传播段的长度通常是输入比较延迟和输出比较延迟总和的两倍。传播段的时间长度通常对应1到8个Tq。}


相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2):这两个阶段用于补偿跳变沿的相位误差,其长度会在重同步的实现过程中延长或缩短。

相位缓冲段1:主要是用于补偿边沿阶段误差,在重同步时,它的长度可以加长或者缩短。

边沿误差主要是由于晶振频率的差异、传输延迟等导致信号从显性到隐性或者从隐性到显性的转变的位置与预期位置之间的偏差。当发送节点和接收节点之间的晶振频率存在差异时候,为了保证通信速率的同步性,接收节点会根据接收到的信号对本地时钟进行调整。如果接收到的信号边沿比预期到达的早,那么接收节点就会通过缩短相位缓冲段1的时间长度来补偿这个误差,以确保在争取的位置采样电平。

相反,如果接收的信号比预期晚到达,接收节点则会通过加长相位缓冲段1的时间长度来补偿这个误差。

相位缓冲段2:主要是用于补偿边沿阶段误差,在重同步时,它的长度只能缩短。

{Note:相位缓冲段1和相位缓冲段2的最小长度分别为3个Tq和2个Tq。}

根据上面写的32=时间片数= BRP*位时间总数目

我们可以选择位时间 = 8,BRP = 4的数值,如图所示:

2.3 逻辑电平:

在CAN总线上,利用CAN_H和CAN_L两根线上的电位差来表示CAN信号。CAN总线上的电位差分为显性电平和隐性电平。其中显性电平为逻辑0,隐性电平为逻辑1。

ISO11898标准电平和逻辑电平关系:

ISO11519标准电平和逻辑电平关系:

影响:根据查分电平,逻辑0为显性,可以了解到can通信仲裁时候,消息ID越小越有优势。

2.4 CAN信号传输
发送过程:

CAN控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。
接收过程:
CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

2.5 采样点:

是读取总线电平,并将其解析为数值的时间点。它位于PHASE_SEG1的终点。采样点的准确位置对于确保数据的正确接收至关重要。

综上所述,采样点和位时间的关系:

采样点 = Syn_Seg +Prop_Seg+Phase_Seg1/Syn_Seg +Prop_Seg+Phase_Seg1+Phase_Seg2.

CAN采样点位置对CAN数据数传的影响主要体现在以下几个方面:

2.5.1 数据准确性:

CAN采样点位置决定了CAN节点判断信号逻辑(1或0)的位置。如果采样点设置不当,可能会因为线缆原因或SJW(重同步跳转宽度)原因,导致采样错误,进而影响数据的准确性。


2.5.2 同步性:

CAN通讯属于异步通讯,需要通过不断的重新同步来保证节点的采样准确。采样点的位置会影响节点之间的同步性。如果采样点太靠前,可能因为线缆原因,DUT(待测设备)外发报文尚未稳定,容易发生采样错误;如果采样点太靠后,则因为SJW原因,也容易引起接收节点同步跳转宽度的调整,调整不好就容易出现错误。


2.5.3 通信稳定性:

采样点位置的设置还会影响CAN网络的通信稳定性。如果网络中所有节点的采样点设置不一致或相差较大,可能会导致数据交互失败或通信不稳定。

2.5.4 通信距离和速率:

采样点的位置还需要考虑通信距离和速率。在较长距离通信和较高波特率的情况下,可能需要调整采样点的位置以适应传播延迟和信号衰减。

2.6 报文种类:

CAN协议中五种类型的帧结构:数据帧、遥控帧、错误帧、过载帧、帧间隔。

2.6.1 数据帧:

包含了我们要传输的数据的帧,其作用当然也就是承载发送节点要传递给接收节点的数据。数据帧的帧结构如下图所示,包含七个段:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束

2.6.2 遥控帧

请求其它节点发出与本遥控帧具有相同ID号的数据帧。

遥控帧相比于数据帧,从帧结构上来看,只是少了数据段,包含六个段:帧起始、仲裁段、控制段、CRC段、ACK段、帧结束遥控帧相比于数据帧除了缺少数据段之外,遥控帧的RTR位恒为隐性1,数据帧的RTR位恒为显性0。


比如:在某一个时刻,节点Node_A向总线发送了一个ID号为ID_2的遥控帧,那么就意味着Node_A请求总线上的其他节点发送ID号为ID_2的数据帧。
节点Node_B能够发出ID号为ID_2的数据帧,那么Node_B就会在收到Node_A发出的遥控帧之后,立刻向总线上发送ID号为ID_2的数据帧。

不管是数据帧还是遥控帧都分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)两种结构。标准帧和扩展帧的区别主要是以下两个:

标识符长度:

CAN标准帧的标识符长度为11位,用于唯一标识一个帧。而CAN扩展帧的标识符长度则超过了11位,通常为29位,这使其能够处理更多的消息和更复杂的系统。


帧结构:

两者在帧结构上也有所不同。标准帧由起始位、帧类型位、标识符和数据域组成,而扩展帧则具有更复杂的结构,包括信息部分和数据部分。在信息部分,字节1为帧信息,字节2至5为报文识别码,数据部分则由字节6至13表示实际数据。

2.6.3 错误帧

在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。
错误帧由错误标志和错误界定符两个部分组成。

·主动错误标志:6个连续的显性位;被动错误标志:6个连续的隐性位;错误界定符:8个连续的隐性位。

2.7 故障界定:

CAN节点总共有这四种状态:上电初始化状态、主动错误状态、被动错误状态、总线关闭状态。其中四种状态的状态切换如下图所示:

主动错误:

当接收错误计数器和发送错误计数器计数值全部小于等于127时,节点处在主动错误状态下。此时,设备可以正常在总线上进行通信,并且可以不受任何限制地发送报文和主动错误帧(由显性位构成)。当处于主动错误状态的单元检测出错误时,它会输出主动错误标志,并“主动地”发出错误标识,以通知其他节点发生了错误。

被动错误:

当接收错误计数器或发送错误计数器任意计数器值大于127时,节点处在被动错误状态。此时,节点虽能参加总线通信,但为不妨碍其他单元通信,在接收时不能积极地发送错误通知。即使检测出错误,如果其他处于主动错误状态的单元没有发现错误,整个总线也被认为是没有错误的。处于被动错误状态的单元检测出错误时,会输出被动错误标志,并在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8个位的隐性位)。


主动错误节点:可以正常参加总线通信,并发送报文和主动错误帧。主动错误节点:能够积极地发现并报告错误,帮助维护总线的正常运行。
被动错误节点:虽然可以参加总线通信,但在发送和接收方面会受到一定限制,例如不能连续向总线发送数据,需要等待一定周期。被动错误节点:在发现错误时不能立即报告,需要等待其他主动错误节点报告后才能确认错误,其错误处理相对被动。

2.8 位编码:

CAN总线位编码主要是将信息以二进制位的形式在CAN总线上进行传输。在位编码方面,CAN总线遵循特定的规则。

例如,BOSCH CAN2.0规范规定,DATA FRAME或REMOTE FRAME中的位字段(如START OF FRAME、ARBITRATION FIELD、CONTROL FIELD、DATA FIELD和CRC SEQUENCE)都需要通过比特填充(Bit Stuffing)的方法编码。每当发送器在要发送的比特流中检测到相同值的五个连续比特时,则自动在实际发送的比特流中插入一个相反的比特位,以避免总线上的信号混淆和错误。

{Note:在需要执行位填充原则的帧段(数据帧遥控帧的SOF~CRC序列),检测到连续六个同性位,则检测到一个填充错误。}

此外,CAN总线还采用了不归零(Non-Return-to-Zero, NRZ)法进行编码,这意味着在总线上的信号保持在高电平或低电平,直到下一个信号的开始。这种编码方式有助于提高数据传输的效率和稳定性。

{Note:节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较,如果发现二者不一致,那么这个节点就会检测出一个位错误}

Tips: 有三种例外情况不属于位错误:

·在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示该节点仲裁失败;

·在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示,该节点当前发送的这一帧报文至少被一个其它节点正确接收;

·该节点发送被动错误标志,节点Node_A向总线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平“吃掉”;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值