CN101719858B - Can控制器的位时序的同步处理方法 - Google Patents
Can控制器的位时序的同步处理方法 Download PDFInfo
- Publication number
- CN101719858B CN101719858B CN2009101982393A CN200910198239A CN101719858B CN 101719858 B CN101719858 B CN 101719858B CN 2009101982393 A CN2009101982393 A CN 2009101982393A CN 200910198239 A CN200910198239 A CN 200910198239A CN 101719858 B CN101719858 B CN 101719858B
- Authority
- CN
- China
- Prior art keywords
- state
- bit
- time
- cnt
- 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.)
- Expired - Fee Related
Links
- 230000001360 synchronised effect Effects 0.000 title claims abstract description 147
- 238000003672 processing method Methods 0.000 title claims abstract description 14
- 238000000034 method Methods 0.000 claims abstract description 55
- 238000012545 processing Methods 0.000 claims abstract description 41
- 230000006854 communication Effects 0.000 claims abstract description 25
- 238000004891 communication Methods 0.000 claims abstract description 22
- 230000005540 biological transmission Effects 0.000 claims abstract description 12
- 230000007704 transition Effects 0.000 claims abstract 14
- 101100204563 Mus musculus Syce3 gene Proteins 0.000 claims description 50
- 101150080085 SEG1 gene Proteins 0.000 claims description 34
- 101100421134 Schizosaccharomyces pombe (strain 972 / ATCC 24843) sle1 gene Proteins 0.000 claims description 34
- 101100202858 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SEG2 gene Proteins 0.000 claims description 31
- 238000004904 shortening Methods 0.000 claims description 29
- 101000821972 Homo sapiens Solute carrier family 4 member 11 Proteins 0.000 claims description 19
- 102100021475 Solute carrier family 4 member 11 Human genes 0.000 claims description 19
- 238000005070 sampling Methods 0.000 claims description 9
- 101150058162 SGE1 gene Proteins 0.000 claims description 5
- 230000000903 blocking effect Effects 0.000 claims 2
- 101000821257 Homo sapiens Syncoilin Proteins 0.000 claims 1
- 230000003139 buffering effect Effects 0.000 description 13
- 238000012546 transfer Methods 0.000 description 11
- 238000001514 detection method Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
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(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 (7)
1.一种CAN控制器的位时序的同步处理方法,其特征在于将标称位时间划分成3个互不重叠的段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2,将这三个段都用整数个基本时间单位来表示,基本时间单位即时间额数TQ的持续时间,将TSEG1的结尾设置为采样点,然后以这三个段为基础设置一个同步状态机SYNC_state,并检测总线上“隐性”到“显性”的跳变沿,根据跳变沿出现的时间段和状态来执行同步操作;其具体步骤为:
a.设定两个总线时序寄存器,分别为0号总线时序寄存器BTR0和1号总线时序寄存器BTR1,BTR0用来存储用户设置的波特率预置数值BRP和同步跳转宽度SJW,BTR1用来存储用户设置的时间缓冲段1TSEG1和时间缓冲段2TSEG2时间额数大小及采样位;
b.根据标称位时间的3个段:同步段SYNC,时间缓冲段1TSEG1和时间缓冲段2TSEG2和CAN通信规范的要求设置一个同步状态机SYNC_state,以实现CAN位时序的同步,设置一个同步状态机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:分别是同步延长寄存器和同步缩短寄存器,存储位时序处理的同步延长操作中需要延长的时间额数的大小和位时序处理的同步缩短操作中需要缩短的时间额数的大小;
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根据总线上“隐性”到“显性”的跳变沿情况进行位时序的相应同步操作,并设定相关信号;位时序处理过程中,位时序处理器根据总线上跳变沿情况进行位时序的相应同步操作有如下三种:
(a).时刻检测总线传输的信号,在没有同步产生时,状态机SYNC_state在SEG1、SEG2和SYNC三个状态之间依次循环执行,即SYNC、TSEG1和TSEG2这三个时间段依次循环执行,SYNC段占一个时间额数TQ,TSEG1段和TSEG2段的大小由总线时序寄存器BTR1输入;如果在空闲周期后,检测到总线传输出现从隐性到显性的跳变时,执行硬同步;无论状态机处于何种状态都会在下一个时钟沿到来时进入状态SEG1状态;一个标称位时间只执行一次同步;
与总线传输相关的信号为:
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段时间额数值等于用户定义的TSEG1段时间额数time_segment1的值加上寄存器delay_cnt的值,新的TSEG2段时间额数值等于用户定义的TSEG2段时间额数time_segment2的值;
与检测到重新同步的相关的信号为:
resync:接收端硬同步信号,高电平有效;
sync_blocked:同步阻塞信号;
resync_blocked:重新同步阻塞信号;
(c).在硬同步操作执行完之后,接收器就进入数据接收过程;在同步状态机SYNC_state处于SEG2状态时,如果在接收报文的过程中检测到总线传输的信号出现隐性值到显性值的跳变沿,即跳变沿发生在TSEG2段内,在采样点之后;亦即在同步状态机SYNC_state处于SEG2状态,当前的采样值sampled_bit为隐性且正在接收端口接收的这一位信号rx为显性时,接收器会将它解释成是一个快速的发送器发送的下一个位周期的提前边沿,则要缩短TSEG2段,即为同步缩短,执行重新同步“resync=1”,状态机进入WINDOW2状态;这种情况下,新的TSEG1段时间额数值等于用户定义的TSEG1段时间额数time_segment1的值,新的TSEG2段时间额数值等于用户定义的TSEG2段时间额数time_segment2的值减去寄存器decrease_cnt的值。
2.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤a中设定两个总线时序寄存器BTR0和BTR1的方法为:定义BTR0和BTR1为两个8位的寄存器,BTR0是0号总线时序寄存器,用来存储用户设置的波特率预置数值BRP和同步跳转宽度SJW,BTR1是1号总线时序寄存器,用来存储用户设置的TSEG1段和TSEG2段时间额数大小及采样位;
BTR0的低六位用来存储用户设置的波特率预置数值BRP,高两位存储用户设置的同步跳转宽度SJW,它的定义如下:
BTR1的低四位用来存储用户设置的TSEG1段时间额数time_segment1,最高两位存储用户设置的采样位,剩余的三位用来存储用户设置的TSEG2段时间额数time_segment2,它的定义如下:
3.根据权利要求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。
4.根据权利要求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计数寄存器清零。
5.根据权利要求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计数寄存器清零。
6.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤e中设定一个同步延长寄存器delay_cnt的方法为:定义delay_cnt为一个3位的寄存器,它被用来存储位时序处理的同步延长操作中需要延长的时间额数的大小;它的最大值由同步跳转宽度SJW控制,其中同步跳转宽度SJW是由用户定义的,存储在CAN总线时序寄存器BTR0中;
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。
7.根据权利要求1所述的CAN控制器的位时序的同步处理方法,其特征在于所述的步骤e中设定一个同步缩短寄存器decrease_cnt的方法为:定义decrease_cnt为一个3位的寄存器,它被用来存储位时序处理的同步缩短操作中需要缩短的时间额数的大小;它的最大值由同步跳转宽度SJW控制,其中同步跳转宽度SJW是由用户定义的,存储在CAN总线时序寄存器BTR0中;
decrease_cnt寄存器根据以下三种情况来设置或者清零:
(a).若复位信号或者硬同步到来了,或者同步状态机SYNC_state进入了缓冲段1状态SEG1,decrease_cnt寄存器清零;
(b).若同步状态机SYNC_state处在缓冲段2状态SEG2,出现重新同步置1,且重新同步信号来到时用户定义的TSEG2段时间额数time_segment2的值减去bit_seg2_cnt寄存器计数的值大于或等于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于同步跳转宽度SJW的值加1;
(c).若同步状态机SYNC_state处在缓冲段2状态SEG2,出现重新同步置1,且重新同步信号来到时用户定义的TSEG2段时间额数time_segment2的值减去bit_seg2_cnt寄存器计数的值小于同步跳转宽度SJW的值,则decrease_cnt寄存器的值等于time_segment2的值减去bit_seg2_cnt寄存器计数的值。
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 CN101719858A (zh) | 2010-06-02 |
CN101719858B true 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 (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107544410A (zh) * | 2017-09-01 | 2018-01-05 | 捷开通讯(深圳)有限公司 | 自动化控制方法、系统以及存储装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104092594B (zh) * | 2014-07-22 | 2017-06-06 | 中国第一汽车股份有限公司 | Can报文仲裁影响因素检测系统及其方法 |
EP3396900B1 (en) * | 2015-12-25 | 2019-10-30 | Panasonic Intellectual Property Management Co., Ltd. | Fraudulent message detection |
CN109861795B (zh) * | 2019-02-28 | 2021-09-03 | 广州小鹏汽车科技有限公司 | Canfd总线系统采样点配置与测试方法及相应的数据传输方法 |
CN113242167B (zh) * | 2021-04-12 | 2023-04-25 | 成都尼晟科技有限公司 | 一种基于单比特位同步的半异步can总线控制方法及控制器 |
CN113204503A (zh) * | 2021-05-31 | 2021-08-03 | 北京欧铼德微电子技术有限公司 | 一种数据同步输出方法及电路 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6563886B1 (en) * | 1998-06-18 | 2003-05-13 | Mitsubishi Denki Kabushiki Kaisha | Bit timing synchronization device and a method for the same |
CN101150475A (zh) * | 2007-10-30 | 2008-03-26 | 西安电力机械制造公司 | 一种基于can总线的电子式互感器数据传输方法 |
-
2009
- 2009-11-03 CN CN2009101982393A patent/CN101719858B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6563886B1 (en) * | 1998-06-18 | 2003-05-13 | Mitsubishi Denki Kabushiki Kaisha | Bit timing synchronization device and a method for the same |
CN101150475A (zh) * | 2007-10-30 | 2008-03-26 | 西安电力机械制造公司 | 一种基于can总线的电子式互感器数据传输方法 |
Non-Patent Citations (1)
Title |
---|
佟为明 等.CAN总线位定时与同步机制的研究.《电子器件》.2007,第30卷(第4期), * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107544410A (zh) * | 2017-09-01 | 2018-01-05 | 捷开通讯(深圳)有限公司 | 自动化控制方法、系统以及存储装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101719858A (zh) | 2010-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101719858B (zh) | Can控制器的位时序的同步处理方法 | |
JP4652261B2 (ja) | パラレル変換回路 | |
JP5896602B2 (ja) | 通信回路及びサンプリング調整方法 | |
US8386828B1 (en) | Circuit for estimating latency through a FIFO buffer | |
CN201663588U (zh) | 一种实现多相位时钟分数分频的装置 | |
CN101501995A (zh) | 相位比较器、相位比较装置以及时钟数据恢复系统 | |
CN102183695A (zh) | 用于测量数据脉冲的方法和接收器 | |
WO2023109147A1 (zh) | 一种时间戳脉冲同步方法、装置、电子设备及存储介质 | |
KR20150128658A (ko) | 직렬 데이터 송신용 디더링 회로 | |
CN108494433B (zh) | 一种单线通信方法及其电路实现 | |
CN102651685B (zh) | 信号延迟装置和方法 | |
US10476630B2 (en) | Digital bus noise suppression | |
CN210518362U (zh) | 一种单线通信电路及通信系统 | |
CN103763063A (zh) | 不改变数据传输波特率而减少数据位宽的变速箱电路及工作方法 | |
CN103780257A (zh) | 环型振荡器电路 | |
CN110768778A (zh) | 一种单线通信电路、通信方法及通信系统 | |
US7167034B2 (en) | Arrangement for correcting the phase of a data sampling clock signal during a period of sampling data in a received signal | |
JP3705273B2 (ja) | クロック抽出回路およびクロック抽出方法 | |
CN105119630B (zh) | 一种扩频数字接收机捕获进跟踪码相位同步电路 | |
CN102208973B (zh) | 一种数据流传输的方法和装置 | |
CN102064826B (zh) | 一种全数字时钟产生电路及全数字时钟产生方法 | |
JP2015198399A (ja) | 通信装置 | |
JP4841927B2 (ja) | 非同期伝送装置、非同期伝送方法 | |
JP6232313B2 (ja) | 同期式シリアル通信方法およびスレーブ装置 | |
JP6163895B2 (ja) | 受信クロック抽出回路 |
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 |