发明名称 CAN控制器的位时序的同步处理方法
摘要 本发明涉及一种CAN控制器的位时序的同步处理方法。本方法通过将标称位时间划分成3个互不重叠的段:同步段(SYNC),时间缓冲段1(TSEG1)和时间缓冲段2(TSEG2)。以这三个段为基础构建一个同步状态机(SYNC_state),然后在总线传输过程中检测从隐性跳变为显性的跳变沿,根据跳变沿所处的标称位时间的时间段或者所在的状态机的状态来执行相应的同步操作。本发明的方法不影响CAN的数据通信的可靠性、稳定性,而使得CAN总线通信的位时序处理更简捷,还加强了CAN控制器的通用性。相对于CAN协议规范标称位时间的四个互不重叠的段,整个位时序处理过程使用的寄存器减少了,执行位同步的步骤也得到了简化。本方法可应用于独立CAN控制器,也可应用于其他嵌入微处理器的CAN控制器领域。
申请公布号 CN101719858B 申请公布日期 2012.05.23
申请号 CN200910198239.3 申请日期 2009.11.03
申请人 上海大学 发明人 胡越黎;闫科;徐晓勇;孙斌;朱卫
分类号 H04L12/40(2006.01)I;H04L7/033(2006.01)I 主分类号 H04L12/40(2006.01)I
代理机构 上海上大专利事务所(普通合伙) 31205 代理人 何文欣
主权项 一种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的值。
地址 200444 上海市宝山区上大路99号