CN101719858A - Can控制器的位时序的同步处理方法 - Google Patents

Can控制器的位时序的同步处理方法 Download PDF

Info

Publication number
CN101719858A
CN101719858A CN200910198239A CN200910198239A CN101719858A CN 101719858 A CN101719858 A CN 101719858A CN 200910198239 A CN200910198239 A CN 200910198239A CN 200910198239 A CN200910198239 A CN 200910198239A CN 101719858 A CN101719858 A CN 101719858A
Authority
CN
China
Prior art keywords
state
bit
cnt
synchronous
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200910198239A
Other languages
English (en)
Other versions
CN101719858B (zh
Inventor
胡越黎
闫科
徐晓勇
孙斌
朱卫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Shanghai for Science and Technology
Original Assignee
University of Shanghai for Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by University of Shanghai for Science and Technology filed Critical University of Shanghai for Science and Technology
Priority to CN2009101982393A priority Critical patent/CN101719858B/zh
Publication of CN101719858A publication Critical patent/CN101719858A/zh
Application granted granted Critical
Publication of CN101719858B publication Critical patent/CN101719858B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Synchronisation In Digital Transmission Systems (AREA)

Abstract

本发明涉及一种CAN控制器的位时序的同步处理方法。本方法通过将标称位时间划分成3个互不重叠的段:同步段(SYNC),时间缓冲段1(TSEG1)和时间缓冲段2(TSEG2)。以这三个段为基础构建一个同步状态机(SYNC_state),然后在总线传输过程中检测从隐性跳变为显性的跳变沿,根据跳变沿所处的标称位时间的时间段或者所在的状态机的状态来执行相应的同步操作。本发明的方法不影响CAN的数据通信的可靠性、稳定性,而使得CAN总线通信的位时序处理更简捷,还加强了CAN控制器的通用性。相对于CAN协议规范标称位时间的四个互不重叠的段,整个位时序处理过程使用的寄存器减少了,执行位同步的步骤也得到了简化。本方法可应用于独立CAN控制器,也可应用于其他嵌入微处理器的CAN控制器领域。

Description

CAN控制器的位时序的同步处理方法
技术领域
本发明涉及一种CAN控制器的位时序的同步处理方法,可应用于独立CAN控制器,也可应用于其他嵌入微处理器的CAN控制器领域。
背景技术
控制器局域网CAN(Controller Area Network)总线是一种串行多主总线,由于具有高可靠性、无破坏仲裁性、多主、易实现等优越性,在工业控制和汽车行业中得到了广泛使用,已成为现今应用最广泛的现场总线之一。CAN总线通信中位时序的处理关系到CAN是否能正确收发数据,其中位时序的处理包括CAN总线协议中对位定时和位同步的控制。它对CAN总线通信中每个位的传输时间进行了控制,在发送数据时按照标称位时间对每个发送数据位进行定时,在接收数据时同步于总线上的数据,执行同步(硬同步和重新同步)功能。所有的操作都是以标称位时间位基础的,因此,合理的划分标称位时间的周期结构,有利于CAN总线通信中位时序的处理,用来实现CAN通信的位定时和位同步。
发明内容
本发明的目的在于提供一种CAN控制器的位时序的同步处理方法。本方法0不影响CAN的数据通信的可靠性、稳定性,而使得CAN总线通信的位时序处理更简捷,还加强了CAN控制器的通用性。相对于CAN协议规范标称位时间的四个互不重叠的段,整个位时序处理过程使用的寄存器减少了,执行位同步的步骤也得到了简化。
为达到上述目的,本发明的构思如下:
将标称位时间划分成3个互不重叠的段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2,其中这三个段都用整数个基本时间单位即时间额数TQ来表示。时间额数TQ的持续时间是CAN系统时钟周期TSCL。以这三个段为基础构建一个同步状态机SYNC_state,然后在通信过程中检测到的总线信号从隐性跳变为显性的跳变沿,根据所处的时间段和状态来执行相应的同步操作。
如果在总线空闲或者帧间间歇的最后一位检测到隐性到显性的跳变沿,接收器会将它解释成报文帧的起始符,则CAN控制器要执行接受数据硬同步,使接收器接收到的数据同步于总线上的数据。如果在接收数据的过程中TSEG1段检测到隐性值到显性值的跳变沿,接收器会把它解释成是一个慢速的发送器发送的滞后边沿,要延长TSEG1段,即执行重新同步之同步延长。如果在接收数据的过程中TSEG2段检测到隐性值到显性值的跳变沿,接收器会将它解释成是一个快速的发送器发送的下一个位周期的提前边沿,则要缩短TSEG2段,即执行重新同步之同步缩短。同步延长与同步缩短的最大宽度由同步跳转宽度SJW给出。当相位差大于或等于SJW时,同步延长或缩短SJW,当相位差小于SJW时,同步延长或者缩短计算所得到的相位差值。
在没有同步产生时,SYNC、TSEG1和TSEG2这三个时间段依次循环执行,SYNC占一个时间额数TQ,TSEG1和TSEG2的大小由位时序控制寄存器BTR1输入。
根据上述构思,本发明采用下述技术方案:
一种CAN控制器的位时序的同步处理方法,其特征在于将标称位时间划分成3个互不重叠的段,将这三个段都用整数个基本时间单位即时间额数TQ来表示,将TSEG1的结尾设置为采样点(见图1),然后以这三个段为基础设置一个状态机SYNC_state,并检测总线上“隐性”到“显性”的跳变沿,根据跳变沿出现的时间段和状态来执行同步操作;其具体步骤为:
a.设定两个总线时序寄存器BTR0和BTR1,BTR0用来存储用户设置的波特率预置数值BRP和同步跳转宽度SJW,BTR1用来存储用户设置的时间缓冲段1TSEG1和时间缓冲段2TSEG2时间额数大小及采样位;
b.根据标称位时间的3个段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2和CAN通信规范的要求设置一个同步状态机SYNC_state,以实现CAN位时序的同步;
c.设定一个波特率发生器用来产生CAN通信系统的时钟信号clk_en,即设置基本时间单位,也就是时间额数TQ的持续时间,用来量化标称位时间和同步跳变沿的检测;
d.设定一个TSEG1段时间额数计数寄存器bit_seg1_cnt和一个TSEG2段时间额数计数寄存器bit_seg2_cnt,bit_seg1_cnt用来存储位时序处理过程中TSEG1的所经过的时间额数的大小,bit_seg2_cnt用来存储位时序处理过程中TSEG2的所经过的时间额数的大小;
e.设定一个同步延长寄存器delay_cnt和一个同步缩短寄存器decrease_cnt,delay_cnt用来存储位时序处理的同步延长操作中需要延长的时间额数的大小;decrease_cnt用来存储位时序处理的同步缩短操作中需要延缩短的时间额数的大小;
f.通过“复位”来进入位时序处理过程,然后通信过程中,同步状态机SYNC_state根据总线上“隐性”到“显性”的跳变沿情况进行位时序的相应同步操作,并设定相关信号。
上述的设定两个总线时序寄存器BTR0和BTR1的方法为:
定义BTR0和BTR1为两个8位的寄存器,BTR0用来存储用户设置的波特率预置数值BRP和同步跳转宽度SJW,BTR1用来存储用户设置的TSEG1段和TSEG2段时间额数大小及采样位。
BTR0的低六位用来存储用户设置的波特率预置数值BRP,高两位存储用户设置的同步跳转宽度SJW,它的定义如下:
  SJW.1-SJW.0   BRP.5-BRP.4-BRP.3-BRP.2-BRP.1-BRP.0
BTR1的低四位用来存储用户设置的TSEG1段时间额数time_segment1,最高两位存储用户设置的采样位,剩余的三位用来存储用户设置的TSEG2段时间额数time_segment2它的定义如下:
  SAM   time_segment2.2-time_segment2.0   time_segment1.3-time_segment1.0
上述设置一个同步状态机SYNC_state的方法为:
同步状态机SYNC_state有五种状态,分别是:同步段状态SYNC,缓冲段1状态SGE1,同步延长状态WINDOW1,缓冲段2状态SEG2和同步缩短状态WINDOW2(见图3)。通过复位进入初始状态缓冲段1状态SEG1,如果有硬同步出现则重新进入缓冲段1状态SEG1;若在接受数据信号过程中,出现重新同步则进入同步延长状态WINDOW1,执行同步延长操作;否则TSEG1段时间额数计数寄存器bit_seg1_cnt计满后进入缓冲段2状态SEG2。处在SEG2状态时,如果没有同步信号产生,则TSEG2段时间额数计数寄存器bit_seg2_cnt计满后进入同步段状态SYNC状态;如果检测到硬同步出现,状态机进入缓冲段1状态SGE1。如果在接收报文的过程中检测重新同步信号,状态机进入WINDOW2状态,执行同步缩短操作。
WINDOW1状态,是执行同步延长的状态,在TSEG1段延长结束后进入SEG2状态,最大延长长度为SJW;WINDOW2状态,是执行同步缩短的状态,在TSEG2段缩短结束后进入SEG1状态,最大缩短长度为SJW;在SYNC状态,只要下一个时钟沿来到则进入SEG1状态。
与同步状态机SYNC_state相关的一些信号和寄存器的定义如下:
(a).state/nxt_state:分别是同步状态机SYNC_state指示的正在执行的状态和下一个执行状态;
(b).resync/hard_sync:分别是同步状态机SYNC_state接收数据时的重新同步信号和硬同步信号;
(c).time_segment1/time_segment2:分别是没有同步时TSEG1段和TSEG2段的时间额数寄存器,由用户定义的,存储在CAN控制器时序寄存器BTR1中;
(d).bit_seg1_cnt/bit_seg2_cnt:分别是TSEG1段时间额数计数寄存器和TSEG2段时间额数计数寄存器,存储位时序处理过程中TSEG1段和TSEG2段的所经过的时间额数的大小;
(e).delay_cnt/decrease_cnt:分别是同步延长寄存器和同步缩短寄存器,存储位时序处理的同步延长操作中需要延长的时间额数的大小和位时序处理的同步缩短操作中需要延缩短的时间额数的大小。
上述的设定一个波特率发生器用来产生CAN通信系统的时钟信号clk_en的方法为:
该波特率发生器采用由振荡器周期分频方式产生CAN通信系统的时钟信号clk_en,时钟分频数由用户设置的波特率预置数值BRP加1之后再乘以2得到。CAN通信系统的时钟信号clk_en的周期长度就是基本时间单位,也就是时间额数TQ的持续时间,它用来量化标称位时间和同步跳变沿的检测。
与波特率发生器相关的一些信号和寄存器的定义如下:
(a).preset_cnt:波特率预置数值BRP加1之后再乘以2得到的数值;
(b).baud_r_presc:用户定义的波特率预置数值BRP寄存器;
(c).osc_clk:振荡器时钟频率;
(d).clk_cnt:时钟分频的计数器,用来存储已计算的振荡器时钟数,在计数值与preset_cnt减1的值相等时清零;
(e).clk_en:CAN通信系统的时钟信号clk_en,它的周期长度就是一个TQ。
上述的设定一个TSEG1段时间额数计数寄存器bit_seg1_cnt的方法为:
定义bit_seg1_cnt为一个5位的寄存器,它被用来存储位时序处理过程中TSEG1段的所经过的时间额数的大小的二进制编码,并将随着CAN系统时钟进行计数。
bit_seg1_cnt寄存器根据以下三种情况来计数或者清零:
(a).若复位信号或者硬同步到来了,bit_seg1_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段1状态SEG1或者同步缩短状态WINDOW1,则经过一个CAN系统时钟周期bit_seg1_cnt计数寄存器就加1;
(c).若同步状态机SYNC_state进入缓冲段2状态SEG2,bit_seg1_cnt计数寄存器清零。上述的设定一个TSEG2段时间额数计数寄存器bit_seg2_cnt的方法为:
定义bit_seg2_cnt为一个4位的寄存器,它被用来存储位时序处理过程中TSEG2段的所经过的时间额数的大小的二进制编码,并将随着CAN系统时钟进行计数。
bit_seg2_cnt寄存器根据以下三种情况来计数或者清零:
(a).若复位信号或者硬同步到来了,bit_seg2_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段2状态SEG2或者同步缩短状态WINDOW2,则经过一个CAN系统时钟周期bit_seg2_cnt计数寄存器就加1;
(c).若同步状态机SYNC_state进入缓冲段1状态SEG1或者同步段状态SYNC,bit_seg2_cnt计数寄存器清零。
上述的设定一个同步延长寄存器delay_cnt的方法为:
定义delay_cnt为一个3位的寄存器,它被用来存储位时序处理的同步延长操作中需要延长的时间额数的大小;它的最大值是同步跳转宽度SJW控制,其中同步跳转宽度SJW是由用户定义的,存储在CAN控制器时序寄存器BTR中。
delay_cnt寄存器根据以下三种情况来设置或者清零:
(a).若复位信号或者硬同步到来了,或者同步状态机SYNC_state进入了缓冲段2状态SEG2,delay_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段1状态SEG1,出现重新同步置1,且重新同步信号来到时bit_seg1_cnt寄存器计数的值大于同步跳转宽度SJW的值,则delay_cnt寄存器的值等于跳转宽度SJW的值加1;
(c).若同步状态机SYNC_state处在缓冲段1状态SEG1,出现重新同步置1,且重新同步信号来到时bit_seg1_cnt寄存器计数的值小于或等于同步跳转宽度SJW的值,则delay_cnt寄存器的值等于bit_seg1_cnt寄存器计数的值加1。
上述的设定一个同步缩短寄存器decrease_cnt的方法为:
定义decrease_cnt为一个3位的寄存器,它被用来存储位时序处理的同步缩短操作中需要缩短的时间额数的大小;它的最大值是同步跳转宽度SJW控制,其中同步跳转宽度SJW是由用户定义的,存储在CAN控制器时序寄存器BTR中。
decrease_cnt寄存器根据以下三种情况来设置或者清零:
(a).若复位信号或者硬同步到来了,或者同步状态机SYNC_state进入了缓冲段1状态SEG1,decrease_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段2状态SEG2,出现重新同步置1,且重新同步信号来到时time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值大于或等于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于跳转宽度SJW的值加1;
(c).若同步状态机SYNC_state处在缓冲段2状态SEG2,出现重新同步置1,且重新同步信号来到时time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值小于或等于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值。
上述在位时序处理过程中根据总线上跳变沿情况进行位时序的相应同步操作有如下三种:
(a)时刻检测总线传输的信号,在没有同步产生时,状态机SYNC_state在SEG1、SEG2和SYNC三个状态之间依次循环执行,即SYNC、TSEG1和TSEG2这三个时间段依次循环执行,SYNC段占一个时间额数TQ,TSEG1段和TSEG2段的大小由位时序控制寄存器BTR1输入。如果在空闲周期后,检测到总线传输出现从隐性到显性的跳变时,执行硬同步。无论状态机SYNC_state处于何种状态都会在下一个时钟沿到来时进入状态SGE1状态。一个标称位时间只执行一次同步。
与总线传输相关的信号为:
hard_sync:接收端硬同步信号,高电平有效;
rx:接收端口信号;
rx_idle:总线空闲信号;
last_bit_of_inte:帧间间歇最后一位;
sampled_bit:采样值;
在总线收发过程中,时刻检测接收端口rx的信号,总线空闲rx_idle时检测到总线传输出现从隐性到显性的跳变,或者在帧间间歇最后一位last_bit_of_inte检测到总线传输出现从隐性到显性的跳变,即当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会将它解释成报文帧的起始符,即执行硬同步“hard_sync=1”,接收器接收到的数据同步于总线上的位流。
(b)在硬同步操作执行完之后,接收器就进入数据接收过程。在同步状态机SYNC_state处于SEG1状态时,如果接收报文帧时,检测到总线传输的信号出现隐性值到显性值的跳变沿;即跳变沿发生在TSEG1段内,在SYNC段后但在接收器的采样点前;亦即在同步状态机SYNC_state处于SEG1状态,当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会把它解释成是一个慢速的发送器发送的滞后边沿,执行重新同步“resync=1”,要延长TSEG1段,即为同步延长,状态机进入WINDOW1状态。这种情况下,TSEG1段等于time_segment1加上delay_cnt,TSEG2段等于time_segment2,如图4所示。
与检测到重新同步的相关的信号为:
resync:接收端硬同步信号,高电平有效;
sync_blocked:同步阻塞信号;
resync_blocked:重新同步阻塞信号;
(c)在硬同步操作执行完之后,接收器就进入数据接收过程。在同步状态机SYNC_state处于SEG2状态时,如果在接收报文的过程中检测到总线传输的信号出现隐性值到显性值的跳变沿,即跳变沿发生在TSEG2段内,在采样点之后;亦即在同步状态机SYNC_state处于SEG1状态,当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会将它解释成是一个快速的发送器发送的下一个位周期的提前边沿,则要缩短TSEG2段,即为同步缩短,执行重新同步“resync=1”,状态机进入WINDOW2状态。这种情况下,TSEG1段等于time_segment1,TSEG2段等于time_segment2减去dec_cnt,如图5所示。
本发明与现有技术相比较,具有以下的特点:通过将标称位时间划分成3个互不重叠的段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2,将这三个段都用整数个基本时间单位即时间额数TQ来表示,将TSEG1的结尾设置为采样点,然后以这三个段为基础设置一个状态机SYNC_state,并检测总线传输的信号“隐性”到“显性”的跳变沿,根据跳变沿出现的时间段和状态来执行同步操作。在不影响CAN的数据通信的可靠性、稳定性的情况下,相对于CAN协议规范标称位时间的四个互不重叠的段,整个位时序处理过程使用的存储器减少了,执行同步的步骤也得到了简化,使得CAN总线通信的位时序处理更简捷,还加强了CAN控制器的通用性。
附图说明:
图1是标称位时间结构图。
图2是位时序处理器结构图。
图3是同步状态机状态跳转图。
图4是重新同步之同步延长图。
图5是重新同步之同步缩短图。
具体实施方式
本发明的一个优选实施例结合附图详述如下:
参见图1,本CAN控制器位时序的同步处理方法,通过将标称位时间划分为三个互不重叠的段,采用下述的工作流程来实现对总线收发位时序的同步:
1)由用户设定位时序处理过程中使用的参数值,即设定总线时序寄存器BTR0,BTR1。在本实施例中设定BTR0=“01000011”,BTR1=“00101111”。即设定了同步跳转宽度SJW=“01”,波特率预置数值BRP=“000011”,采样位SAM=“0”,时间缓冲段2时间额数大小time_segment2=“010”,时间缓冲段1时间额数大小time_segment1=“1111”。
2)由用户设定在总线上传输的数据,用户可以根据实际情况设置总线上传输的数据,设定好后通过复位信号来启动位时序处理过程。
3)复位以后,同步状态机SYNC_state进入初始状态SEG1状态,TSEG1段时间额数计数器bit_seg1_cnt开始计数,在数据接收过程中,若没有检测到总线上隐性到显性的跳变沿,则bit_seg1_cnt计数值等于time_segment1时进入SEG2状态,bit_seg2_cnt计数值等于time_segment2时进入SYNC状态,即CAN控制器的位时序按照标称位时间的同步段SYNC、时间缓冲1段TSEG1和时间缓冲2段TSEG2这三个段依次循环执行。
4)在数据接收过程中,如果在总线空闲,或者在帧间空间的最后一位检测到总线传输的数据出现隐性到显性的跳变沿,表示一帧数据的起始到来,则CAN控制器位时序处理时执行硬同步,接收节点开始接收数据,在下一个clk_en时同步状态机SYNC_state重新进入初始状态SEG1状态,bit_seg1_cnt开始计数。
5)在硬同步操作执行完以后,开始接收总线传输的这一帧数据,如果在接收过程中检测到总线传输出现隐性到显性的跳变沿,则根据跳变沿出现的时间段执行相应的操作。若跳变沿出现在同步段SYNC中,不执行同步操作;
6)在硬同步操作执行完以后,若检测到总线传输出现隐性到显性的跳变沿跳变沿出现在时间缓冲1段TSEG1中,则CAN控制器执行位时序重新同步的同步延长,延长时间缓冲1段TSEG1,同步状态机进入同步延长状态WINDOW1状态,在bit_seg1_cnt计数器的值等于time_segment1加上delay_cnt时,进入同步状态机的SEG2状态;
7)在硬同步操作执行完以后,若检测到总线传输出现隐性到显性的跳变沿跳变沿出现在时间缓冲2段TSEG2中,则CAN控制器执行位时序重新同步的同步缩短,缩短时间缓冲2段TSEG2,同步状态机进入同步缩短状态WINDOW2状态,在bit_seg2_cnt计数器的值等于time_segment2减去dec_cnt时,进入同步状态机的SYNC状态。
本实施例中位时序处理器的工作过程包括:系统时钟周期的设定、跳变沿检测与同步的执行和数据的采样。其内部结构框架示意图见图2。在位时序的处理过程中,首先要知道系统时钟周期。波特率产生逻辑根据位时序寄存器所定义的波特率,由振荡器周期分频得出系统时钟周期,即一个时间份额长度TQ。采样逻辑在TSEG1段到TSEG2段的转换处进行采样,采样模式通过位时序控制寄存器的SAM位控制。
1)同步检测和同步锁存器执行同步信号的检测与锁存。同步检测和锁存的过程如下:
首先,只有在复位之后才能进行正常检测,复位或者在上一次正常工作以后,此时总线空闲或者处在帧间空间阶段,同步阻塞信号sync_blocked清0,重新同步阻塞信号resync_blocked置1,即只能进行硬同步信号的检测,不能进行重新同步的检测。然后,检测“rx”端口接收到的信号和采样值sampled_bit的值,若在总线空闲或者在帧间间歇最后一位时,采样值sampled_bit=1且接收端口rx=0,则硬同步信号hard_sync置1,总线不在处于空闲状态,CAN控制器开始接收数据,同时同步阻塞信号sync_blocked置1,重新同步阻塞信号resync_blocked清0,同步阻塞信号sync_blocked在这个数据位传输完以后再清0。接着,继续检测“rx”端口接收到的信号和采样值sampled_bit的值,若在标称位时间的时间缓冲1段或者时间缓冲2段,检测到采样值sampled_bit=1且接收端口rx=0,则重新同步信号resync置1,同时同步阻塞信号sync_blocked置1且在这个数据位传输完以后再清0。直到这帧数据正常接收完以后,再次检测硬同步信号。
2)相位差检测电路计算同步延长或同步缩短的相位差,在硬同步执行之后接收一帧数据时出现重新同步才需要执行相位差检测,同步延长与同步缩短的最大宽度由位时序控制寄存器的SJW位给出。相位差检测的过程如下:
首先,在复位之后进入正常工作状态。然后在硬同步信号检测到以后,CAN控制器开始接收数据,并检测总线上是否出现重新同步信号。在同步状态机进入SEG1状态时,寄存器bit_seg1_cnt开始计数,每一个CAN系统时钟周期bit_seg1_cnt计数寄存器就加1,若此时检测到重新同步信号,将此时的bit_seg1_cnt计数寄存器的值与同步跳转宽度SJW的值进行比较,bit_seg1_cnt寄存器计数的值大于同步跳转宽度SJW的值时,则同步延长寄存器delay_cnt的值等于跳转宽度SJW的值加1;否则delay_cnt寄存器的值等于bit_seg1_cnt寄存器计数的值加1。在同步状态机进入SEG2状态时,寄存器bit_seg2_cnt开始计数,每一个CAN系统时钟周期bit_seg2_cnt计数寄存器就加1,若此时检测到重新同步信号,将time_segment2寄存器中的值减去此时的bit_seg2_cnt计数寄存器的值的结果与同步跳转宽度SJW的值进行比较,time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值大于或等于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于跳转宽度SJW的值加1;否则decrease_cnt寄存器的值等于time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值。
为了实现CAN控制器位时序的同步处理,本实施例采用了下述的同步状态机SYNC_state(见图3):
●SEG1/SEG2:分别是时间缓冲1段和时间缓冲1段对应的同步状态机SYNC_state的状态;
●SYNC:同步段对应的同步状态机SYNC_state的状态;
●WINDOW1/WINDOW2:分别是同步延长和同步缩短对应的同步状态机SYNC_state的状态;
●rst:复位信号;
●hard_sync/resync:分别硬同步信号和重新同步信号;
●time_segment1/time_segment2:分别是没有同步时TSEG1段和TSEG2段的时间额数寄存器;
●bit_seg1_cnt/bit_seg2_cnt:分别是TSEG1段时间额数计数寄存器和TSEG2段时间额数计数寄存器;
●delay_cnt/decrease_cnt:分别是同步延长寄存器和同步缩短寄存器。
从图3中可以看出,该状态机执行两种同步操作:硬同步和重新同步。硬同步只有在帧起始时才执行,每一个传输位只执行一次同步。
1)硬同步处理的过程:
首先,复位后进入状态机正常工作。无论同步状态机SYNC_state处在何种状态,只要检测到硬同步信号,则寄存器bit_seg1_cnt,bit_seg2_cnt,delay_cnt,decrease_cnt清0,状态机SYNC_state重新进入SEG1状态;即检测到帧起始,然后开始接收这一帧数据并检测重新同步信号,直到这一帧数据接收完以后才能再次检测硬同步信号。
2)重新步处理的过程:
在硬同步处理完之后,才能开始检测重新同步信号。若同步状态机SYNC_state处在SEG1状态时检测到了重新同步信号resync等于1,则状态机SYNC_state进入WINDOW1状态,执行重新同步之同步延长,在时间缓冲1段TSEG1延长delay_cnt个时间额数后进入时间缓冲2段TSEG2(见图4),即在bit_seg1_cnt等于time_segment1加上delay_cnt时进入SEG2状态,这时在SEG2状态不检测同步信号,在SEG2状态后进入SYNC状态;若同步状态机SYNC_state处在SEG1状态时没有检测到同步信号但处在SEG2状态时检测到了重新同步信号resync等于1,则状态机SYNC_state进入WINDOW2状态,执行重新同步之同步缩短,在时间缓冲2段TSEG2缩短decrease_cnt个时间额数后进入时间缓冲1段TSEG1(见图5),即在bit_seg2_cnt等于time_segment2减去decrease_cnt时进入SEG1状态;若同步状态机SYNC_state处在SYNC状态时检测到了重新同步信号resync等于1,不执行重新同步处理。

Claims (9)

1.一种CAN控制器的位时序的同步处理方法,其特征在于将标称位时间划分成3个互不重叠的段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2,将这三个段都用整数个基本时间单位即时间额数TQ来表示,将TSEG1的结尾设置为采样点,然后以这三个段为基础设置一个同步状态机SYNC_state,并检测总线上“隐性”到“显性”的跳变沿,根据跳变沿出现的时间段和状态来执行同步操作;其具体步骤为:
a.设定两个总线时序寄存器BTR0和BTR1,BTR0用来存储用户设置的波特率预置数值BRP和同步跳转宽度SJW,BTR1用来存储用户设置的时间缓冲段1TSEG1和时间缓冲段2TSEG2时间额数大小及采样位;
b.根据标称位时间的3个段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2和CAN通信规范的要求设置一个同步状态机SYNC_state,以实现CAN位时序的同步;
c.设定一个波特率发生器用来产生CAN通信系统的时钟信号clk_en,即设置基本时间单位,也就是时间额数TQ的持续时间,用来量化标称位时间和同步跳变沿的检测;
d.设定一个TSEG1段时间额数计数寄存器bit_seg1_cnt和一个TSEG2段时间额数计数寄存器bit_seg2_cnt,bit_seg1_cnt用来存储位时序处理过程中TSEG1的所经过的时间额数的大小,bit_seg2_cnt用来存储位时序处理过程中TSEG2的所经过的时间额数的大小;
e.设定一个同步延长寄存器delay_cnt和一个同步缩短寄存器decrease_cnt,delay_cnt用来存储位时序处理的同步延长操作中需要延长的时间额数的大小;decrease_cnt用来存储位时序处理的同步缩短操作中需要延缩短的时间额数的大小;
f.通过“复位”来进入位时序处理过程,然后通信过程中,同步状态机SYNC_state根据总线上“隐性”到“显性”的跳变沿情况进行位时序的相应同步操作,并设定相关信号。
2.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤a中设定两个总线时序寄存器BTR0和BTR1的方法为:定义BTR0和BTR1为两个8位的寄存器,BTR0用来存储用户设置的波特率预置数值BRP和同步跳转宽度SJW,BTR1用来存储用户设置的TSEG1段和TSEG2段时间额数大小及采样位;
BTR0的低六位用来存储用户设置的波特率预置数值BRP,高两位存储用户设置的同步跳转宽度SJW,它的定义如下:
  SJW.1-SJW.0   BRP.5-BRP.4-BRP.3-BRP.2-BRP.1-BRP.0
BTR1的低四位用来存储用户设置的TSEG1段时间额数time_segment1,最高两位存储用户设置的采样位,剩余的三位用来存储用户设置的TSEG2段时间额数time_segment2,它的定义如下:
  SAM   time_segment2.2-time_segment2.0   time_segment1.3-time_segment1.0
3.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤b中设置一个同步状态机SYNC_state的方法为:同步状态机SYNC_state有五种状态,分别是:同步段状态SYNC,缓冲段1状态SGE1,同步延长状态WINDOW1,缓冲段2状态SEG2和同步缩短状态WINDOW2。通过复位进入初始状态缓冲段1状态SEG1,如果有硬同步出现则重新进入缓冲段1状态SEG1;若在接受数据信号过程中,出现重新同步则进入同步延长状态WINDOW1,执行同步延长操作;否则TSEG1段时间额数计数寄存器bit_seg1_cnt计满后进入缓冲段2状态SEG2;处在SEG2状态时,如果没有同步信号产生,则TSEG2段时间额数计数寄存器bit_seg2_cnt计满后进入同步段状态SYNC状态;如果检测到硬同步出现,状态机进入缓冲段1状态SGE1;如果在接收报文的过程中检测重新同步信号,状态机进入WINDOW2状态,执行同步缩短操作;
WINDOW1状态,是执行同步延长的状态,在TSEG1段延长结束后进入SEG2状态,最大延长长度为SJW;WINDOW2状态,是执行同步缩短的状态,在TSEG2段缩短结束后进入SEG1状态,最大缩短长度为SJW;在SYNC状态,只要下一个时钟沿来到则进入SEG1状态;
与同步状态机SYNC_state相关的一些信号和寄存器的定义如下:
(a).state/nxt_state:分别是同步状态机SYNC_state指示的正在执行的状态和下一个执行状态;
(b).resync/hard_sync:分别是同步状态机SYNC_state接收数据时的重新同步信号和硬同步信号;
(c).time_segment1/time_segment2:分别是没有同步时TSEG1段和TSEG2段的时间额数寄存器,由用户定义的,存储在CAN控制器时序寄存器BTR1中;
(d).bit_seg1_cnt/bit_seg2_cnt:分别是TSEG1段时间额数计数寄存器和TSEG2段时间额数计数寄存器,存储位时序处理过程中TSEG1段和TSEG2段的所经过的时间额数的大小;
(e).delay_cnt/decrease_cnt:分别是同步延长寄存器和同步缩短寄存器,存储位时序处理的同步延长操作中需要延长的时间额数的大小和位时序处理的同步缩短操作中需要延缩短的时间额数的大小。
4.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤c中设定一个波特率发生器用来产生CAN通信系统的时钟信号clk_en的方法为:
该波特率发生器采用由振荡器周期分频方式产生CAN通信系统的时钟信号clk_en,时钟分频数由用户设置的波特率预置数值BRP加1之后再乘以2得到。CAN通信系统的时钟信号clk_en的周期长度就是基本时间单位,也就是时间额数TQ的持续时间,它用来量化标称位时间和同步跳变沿的检测;
与波特率发生器相关的一些信号和寄存器的定义如下:
(a).preset_cnt:波特率预置数值BRP加1之后再乘以2得到的数值;
(b).baud_r_presc:用户定义的波特率预置数值BRP寄存器;
(c).osc_clk:振荡器时钟频率;
(d).clk_cnt:时钟分频的计数器,用来存储已计算的振荡器时钟数,在计数值与preset_cnt减1的值相等时清零;
(e).clk_en:CAN通信系统的时钟信号clk_en,它的周期长度就是一个TQ。
5.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤d中设定一个TSEG1段时间额数计数寄存器bit_seg1_cnt的方法为:定义bit_seg1_cnt为一个5位的寄存器,它被用来存储位时序处理过程中TSEG1段的所经过的时间额数的大小的二进制编码,并将随着CAN系统时钟进行计数;
bit_seg1_cnt寄存器根据以下三种情况来计数或者清零:
(a).若复位信号或者硬同步到来了,bit_seg1_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段1状态SEG1或者同步缩短状态WINDOW1,
则经过一个CAN系统时钟周期bit_seg1_cnt计数寄存器就加1;
(c).若同步状态机SYNC_state进入缓冲段2状态SEG2,bit_seg1_cnt计数寄存器清零。
6.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤d中设定一个TSEG2段时间额数计数寄存器bit_seg2_cnt的方法为:定义bit_seg2_cnt为一个4位的寄存器,它被用来存储位时序处理过程中TSEG2段的所经过的时间额数的大小的二进制编码,并将随着CAN系统时钟进行计数;
bit_seg2_cnt寄存器根据以下三种情况来计数或者清零:
(a).若复位信号或者硬同步到来了,bit_seg2_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段2状态SEG2或者同步缩短状态WINDOW2,则经过一个CAN系统时钟周期bit_seg2_cnt计数寄存器就加1;
(c).若同步状态机SYNC_state进入缓冲段1状态SEG1或者同步段状态SYNC,bit_seg2_cnt计数寄存器清零。
7.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤e中设定一个同步延长寄存器delay_cnt的方法为:定义delay_cnt为一个3位的寄存器,它被用来存储位时序处理的同步延长操作中需要延长的时间额数的大小;它的最大值是同步跳转宽度SJW控制,其中同步跳转宽度SJW是由用户定义的,存储在CAN控制器时序寄存器BTR中;
delay_cnt寄存器根据以下三种情况来设置或者清零:
(a).若复位信号或者硬同步到来了,或者同步状态机SYNC_state进入了缓冲段2状态SEG2,delay_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段1状态SEG1,出现重新同步置1,且重新同步信号来到时bit_seg1_cnt寄存器计数的值大于同步跳转宽度SJW的值,则delay_cnt寄存器的值等于跳转宽度SJW的值加1;
(c).若同步状态机SYNC_state处在缓冲段1状态SEG1,出现重新同步置1,且重新同步信号来到时bit_seg1_cnt寄存器计数的值小于或等于同步跳转宽度SJW的值,则delay_cnt寄存器的值等于bit_seg1_cnt寄存器计数的值加1;
8.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤e中设定一个同步缩短寄存器decrease_cnt的方法为:定义decrease_cnt为一个3位的寄存器,它被用来存储位时序处理的同步缩短操作中需要缩短的时间额数的大小;它的最大值是同步跳转宽度SJW控制,其中同步跳转宽度SJW是由用户定义的,存储在CAN控制器时序寄存器BTR中;
decrease_cnt寄存器根据以下三种情况来设置或者清零:
(a).若复位信号或者硬同步到来了,或者同步状态机SYNC_state进入了缓冲段1状态SEG1,decrease_cnt计数寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段2状态SEG2,出现重新同步置1,且重新同步信号来到时time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值大于或等于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于跳转宽度SJW的值加1;
(c).若同步状态机SYNC_state处在缓冲段2状态SEG2,出现重新同步置1,且重新同步信号来到时time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值小于或等于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于time_segment2寄存器中的值减去bit_seg2_cnt寄存器计数的值;
9.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤f中位时序处理过程中,位时序处理器根据总线上跳变沿情况进行位时序的相应同步操作有如下三种:
(a).时刻检测总线传输的信号,在没有同步产生时,状态机SYNC_state在SEG1、SEG2和SYNC三个状态之间依次循环执行,即SYNC、TSEG1和TSEG2这三个时间段依次循环执行,SYNC段占一个时间额数TQ,TSEG1段和TSEG2段的大小由位时序控制寄存器BTR1输入;如果在空闲周期后,检测到总线传输出现从隐性到显性的跳变时,执行硬同步;无论状态机处于何种状态都会在下一个时钟沿到来时进入状态SGE1状态;一个标称位时间只执行一次同步;
与总线传输相关的信号为:
hard_sync:接收端硬同步信号,高电平有效;
rx:接收端口信号;
rx_idle:总线空闲信号;
last_bit_of_inte:帧间间歇最后一位;
sampled_bit:采样值;
在总线收发过程中,时刻检测接收端口rx的信号,总线空闲rx_idle时检测到总线传输出现从隐性到显性的跳变,或者在帧间间歇最后一位last_bit_of_inte检测到总线传输出现从隐性到显性的跳变,即当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会将它解释成报文帧的起始符,即执行硬同步“hard_sync=1”,接收器接收到的数据同步于总线上的位流;
(b).在硬同步操作执行完之后,接收器就进入数据接收过程;在同步状态机SYNC_state处于SEG1状态时,如果接收报文帧时,检测到总线传输的信号出现隐性值到显性值的跳变沿;即跳变沿发生在TSEG1段内,在SYNC段后但在接收器的采样点前;亦即在同步状态机SYNC_state处于SEG1状态,当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会把它解释成是一个慢速的发送器发送的滞后边沿,执行重新同步“resync=1”,要延长TSEG1段,即为同步延长,状态机进入WINDOW1状态;这种情况下,TSEG1段等于time_segment1加上delay_cnt,TSEG2段等于time_segment2;
与检测到重新同步的相关的信号为:
resync:接收端硬同步信号,高电平有效;
sync_blocked:同步阻塞信号;
resync_blocked:重新同步阻塞信号;
(c).在硬同步操作执行完之后,接收器就进入数据接收过程;在同步状态机SYNC_state处于SEG2状态时,如果在接收报文的过程中检测到总线传输的信号出现隐性值到显性值的跳变沿,即跳变沿发生在TSEG2段内,在采样点之后;亦即在同步状态机SYNC_state处于SEG1状态,当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会将它解释成是一个快速的发送器发送的下一个位周期的提前边沿,则要缩短TSEG2段,即为同步缩短,执行重新同步“resync=1”,状态机进入WINDOW2状态;这种情况下,TSEG1段等于time_segment1,TSEG2段等于time_segment2减去dec_cnt。
CN2009101982393A 2009-11-03 2009-11-03 Can控制器的位时序的同步处理方法 Expired - Fee Related CN101719858B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009101982393A CN101719858B (zh) 2009-11-03 2009-11-03 Can控制器的位时序的同步处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009101982393A CN101719858B (zh) 2009-11-03 2009-11-03 Can控制器的位时序的同步处理方法

Publications (2)

Publication Number Publication Date
CN101719858A true CN101719858A (zh) 2010-06-02
CN101719858B CN101719858B (zh) 2012-05-23

Family

ID=42434379

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009101982393A Expired - Fee Related CN101719858B (zh) 2009-11-03 2009-11-03 Can控制器的位时序的同步处理方法

Country Status (1)

Country Link
CN (1) CN101719858B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104092594A (zh) * 2014-07-22 2014-10-08 中国第一汽车股份有限公司 Can报文仲裁影响因素检测系统及其方法
CN108476155A (zh) * 2015-12-25 2018-08-31 松下知识产权经营株式会社 不正当消息检测装置、方法、程序、以及电子控制装置
CN109861795A (zh) * 2019-02-28 2019-06-07 广州小鹏汽车科技有限公司 Canfd总线系统采样点配置与测试方法及相应的数据传输方法
CN113204503A (zh) * 2021-05-31 2021-08-03 北京欧铼德微电子技术有限公司 一种数据同步输出方法及电路
CN113242167A (zh) * 2021-04-12 2021-08-10 成都尼晟科技有限公司 一种基于单比特位同步的半异步can总线控制方法及控制器

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107544410A (zh) * 2017-09-01 2018-01-05 捷开通讯(深圳)有限公司 自动化控制方法、系统以及存储装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3986209B2 (ja) * 1998-06-18 2007-10-03 三菱電機株式会社 ビットタイミング同期装置およびその方法
CN100518120C (zh) * 2007-10-30 2009-07-22 中国西电电气股份有限公司 一种基于can总线的电子式互感器数据传输方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104092594A (zh) * 2014-07-22 2014-10-08 中国第一汽车股份有限公司 Can报文仲裁影响因素检测系统及其方法
CN104092594B (zh) * 2014-07-22 2017-06-06 中国第一汽车股份有限公司 Can报文仲裁影响因素检测系统及其方法
CN108476155A (zh) * 2015-12-25 2018-08-31 松下知识产权经营株式会社 不正当消息检测装置、方法、程序、以及电子控制装置
CN108476155B (zh) * 2015-12-25 2021-05-14 新唐科技日本株式会社 不正当消息检测装置、方法、记录介质、以及电子控制装置
CN109861795A (zh) * 2019-02-28 2019-06-07 广州小鹏汽车科技有限公司 Canfd总线系统采样点配置与测试方法及相应的数据传输方法
CN113242167A (zh) * 2021-04-12 2021-08-10 成都尼晟科技有限公司 一种基于单比特位同步的半异步can总线控制方法及控制器
CN113204503A (zh) * 2021-05-31 2021-08-03 北京欧铼德微电子技术有限公司 一种数据同步输出方法及电路

Also Published As

Publication number Publication date
CN101719858B (zh) 2012-05-23

Similar Documents

Publication Publication Date Title
CN101719858B (zh) Can控制器的位时序的同步处理方法
Fang et al. Design and simulation of UART serial communication module based on VHDL
CN110932815B (zh) 一种时间同步方法、装置、网络设备及存储介质
US8386828B1 (en) Circuit for estimating latency through a FIFO buffer
CN108965082A (zh) 低功率数据总线接收器
JP5896602B2 (ja) 通信回路及びサンプリング調整方法
CN102183695A (zh) 用于测量数据脉冲的方法和接收器
CN100589371C (zh) 一种消除源同步信号长线传输时延的系统及方法
CN101501995A (zh) 相位比较器、相位比较装置以及时钟数据恢复系统
CN104461972B (zh) 一种数据信号采样的方法和设备
KR20150128658A (ko) 직렬 데이터 송신용 디더링 회로
CN101300772A (zh) 用于调节同步时钟信号的方法和装置
CN102170347A (zh) 同步信号检测装置
CN108494433B (zh) 一种单线通信方法及其电路实现
CN102546084A (zh) 异步串行通信数据接收时的抗干扰纠错采样系统和方法
CN102651685B (zh) 信号延迟装置和方法
US7852777B2 (en) Network hardware device
CN116015324A (zh) 一种强化抗干扰的uart数据接收装置及其接收方法
US7733130B2 (en) Skew tolerant communication between ratioed synchronous clocks
CN110768778A (zh) 一种单线通信电路、通信方法及通信系统
CN100458715C (zh) 一种握手电路监测装置及方法
CN116126766A (zh) 异步通信数据采样方法、装置、设备及介质
CN210518362U (zh) 一种单线通信电路及通信系统
CN107968704B (zh) 相位差推定装置以及具有该相位差推定装置的通信设备
CN102332975A (zh) 一种接口自适应采样方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120523

Termination date: 20161103

CF01 Termination of patent right due to non-payment of annual fee