CAN总线协议之TTCAN

     这里我们对 C A N CAN CAN总线协议进行了一个基本的讲解,接下来我们将对基于 C A N CAN CAN总线协议的高层协议 T T C A N , T i m e T r i g g e r e d C o m m u n i c a t i o n TTCAN,Time\quad Triggered\quad Communication TTCAN,TimeTriggeredCommunication做一个基本的讲解。 T T C A N TTCAN TTCAN是基于基本的 C A N CAN CAN总线协议的一种高层协议,其物理层和数据链路层和基本的 C A N CAN CAN总线协议是一样的,也就是在一个运行 T T C A N TTCAN TTCAN的高层网络中,电平状态和帧格式和基本的 C A N CAN CAN总线协议是一样的。在基本的 C A N CAN CAN总线协议网络中如果多个节点同时发送数据帧,那么根据总线仲裁规则具有最高优先级的数据帧才能被发送出去,这样最低优先级的节点的数据可能很长一段时间都无法发送出去,因此基本的 C A N CAN CAN总线协议网络很难保证消息的实时性,正是为了保证消息的实时性要求, T T C A N TTCAN TTCAN出现了。实时性要求就是当某个节点发生某个事件,该节点必须在一定的时间范围内通过消息帧将该状态发送出去。
     下面的讲解我主要参考了 I S O − 11898 − 4 ISO-11898-4 ISO118984文档以及其他网路上的参考资料,具体看这里。还有就是下面某些内容的讲解会以某个特定的 I P IP IP作为例子,这里这个特定的 I P IP IP B O S C H BOSCH BOSCH半导体公司的M_TTCAN,如图1和图2所示,目前 S T ST ST H 742 H742 H742系列使用了这个 I P IP IP

 
图1.
 
图2.

      T T C A N TTCAN TTCAN从总体上通俗的来说的话就是把什么时候发送消息和什么时候接收消息都规定好了,这样就没有了节点的相互竞争总线而造成无法达到实时性的问题。前面提到 T T C A N TTCAN TTCAN把消息的发送和接收的时刻都规定好了,那么有时刻 就必然有时间的基准, T T C A N TTCAN TTCAN的时间基准一共有两个 l e v e l level level l e v e l 1 level1 level1 l e v e l 2 level2 level2 B O S C H BOSCH BOSCH的那个IP增加了一个 l e v e l 0 level0 level0。这个 l e v e l 0 level0 level0不是 I S O − 11898 − 4 ISO-11898-4 ISO118984文档规定的,而是 B O S C H BOSCH BOSCH半导体公司自己加的,这个 l e v e l 0 level0 level0是在事件触发的通信模式( I S O − 11898 − 1 ISO-11898-1 ISO118981)的基础上仅仅保留了 l e v e l 2 level2 level2的可以通过参考消息的发送而在整个网络中建立校准了的时间基准的这一功能, l e v e l 2 level2 level2的其它功能 l e v e l 0 level0 level0不具有。 T T C A N TTCAN TTCAN l e v e l 1 level1 level1 l e v e l 2 level2 level2时间触发的通信模式( I S O − 11898 − 4 ISO-11898-4 ISO118984)。在 T T C A N TTCAN TTCAN网络中消息的发送和接收都是基于系统矩阵 S y s t e m m a t r i x System\quad matrix Systemmatrix的,如图3所示。系统矩阵是在整个 T T C A N TTCAN TTCAN网络运行之前就规划好的,一个系统矩阵由多个基本周期组成,如图4所示,基本周期是系统矩阵的一行,一般一个系统矩阵包含2的n次方个基本周期,基本周期的最小值是1。一个基本周期又由多个 T i m e S l o t Time\quad Slot TimeSlot组成, T i m e S l o t Time\quad Slot TimeSlot是系统矩阵的列。 T i m e S l o t Time\quad Slot TimeSlot也可以叫做时间窗口,一条消息的发送和接收都必须在一个时间窗口内完成,当然某些特别的消息可以横跨多个时间窗口。时间窗口分为三种类型:

  • 独占时间窗口:这种时间窗口只分配给特定的某一个消息,因此这种时间串口内只有一个节点的消息的收发,因此不存在节点竞争的问题。
  • 自由时间窗口:目前没有使用,保留给未来使用。
  • 仲裁时间窗口:这种时间窗口内允许多个节点进行消息的收发,总线的优先权和基本的 C A N CAN CAN总线协议一样通过仲裁来决定,如果某个节点由于仲裁失败而导致消息没有发送出去,则不允许重传,但是有一种特别的情况,就是多个仲裁时间窗口连接到一起的情况,这样的情况下允许重传,但是也要保证不要影响到接下来的非仲裁时间窗口。
 
图3.
 
图4.

     那如何确定一个基本周期的开始,如图4所示一种特别的消息帧,参考消息 R e f e r e n c e M e s s a g e Reference\quad Message ReferenceMessage,的发送与接收意味着一个基本周期的开始。参考消息是由 T i m e M a s t e r Time\quad Master TimeMaster发送的,参考消息与其他消息帧的不同之处在于其 I D ID ID不一样,一个 T T C A N TTCAN TTCAN网络中最多有8个 T i m e M a s t e r Time\quad Master TimeMaster,每一个 T i m e M a s t e r Time\quad Master TimeMaster发送的参考消息的 I D ID ID基本一样,只是 I D ID ID的最低三位不一样,这是为了区分不同 T i m e M a s t e r Time\quad Master TimeMaster的优先级,一个 T T C A N TTCAN TTCAN网络中只能有一个激活的 T i m e M a s t e r Time\quad Master TimeMaster,准备8个 T i m e M a s t e r Time\quad Master TimeMaster的原因是防止当前激活的 T i m e M a s t e r Time\quad Master TimeMaster失效之后其他 T i m e M a s t e r Time\quad Master TimeMaster可以马上替代这个失效的 T i m e M a s t e r Time\quad Master TimeMaster
     在 l e v e l 1 level1 level1时间基准下,参考消息的数据字节最少1个,在 l e v e l 2 level2 level2时间基准下,参考消息的数据字节最少4个,参考消息的数据字段的最小要求分别如图5和图6所示。无论是在 l e v e l 1 level1 level1时间基准下或是在 l e v e l 2 level2 level2时间基准下,参考消息中都应该包含这个参考消息所开启的基本周期的索引(可选),即这是第几个基本周期,以及 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap状态位(后面会重点讲到)。在 l e v e l 2 level2 level2时间基准下,参考消息中还额外的包含 M a s t e r _ R e f _ M a r k Master\_Ref\_Mark Master_Ref_Mark(后面会重点讲到)和状态比特位 D i s c _ B i t Disc\_Bit Disc_Bit(后面会重点讲到)。 T i m e M a s t e r Time\quad Master TimeMaster一般会以一种稳定的时间间隔(就相当于是基本周期的长度)去发送参考消息。从图5和图6中的 l e v e l 1 level1 level1时间基准下或是在 l e v e l 2 level2 level2时间基准下的参考消息的数据字段的最小要求下,只为基本周期的索引提供了6个比特位,但是协议中并没有限制说一个系统矩阵中最多只有 2 6 = 64 2^6=64 26=64个基本周期,也就是说可以在剩余的数据字段的字节中扩展基本周期的索引的比特位。图6中的第二个字节的高3位是 l e v e l 2 level2 level2时间基准下 M a s t e r _ R e f _ M a r k Master\_Ref\_Mark Master_Ref_Mark的小数部分,协议要求至少是3个比特位,但是也可以扩充至7个比特位。 这里有一点需要注意的是 T T C A N TTCAN TTCAN协议是先于 F D C A N FDCAN FDCAN协议出现的,因此 T T C A N TTCAN TTCAN协议是否支持 F D C A N FD\quad CAN FDCAN协议的数据帧那就要看具体的芯片IP决定了。 B O S C H BOSCH BOSCH半导体公司的这个 I P IP IP是支持在 T T C A N TTCAN TTCAN操作中使用 F D C A N FD\quad CAN FDCAN数据帧的,如图8所示。

 
图5.
 
图6.

     事件同步的基本周期的开始( E v e n t s y n c h r o n i s e d s t a r t o f b a s i c c y c l e Event\quad synchronised\quad start\quad of\quad basic\quad cycle Eventsynchronisedstartofbasiccycle):这是针对前面讲到的参考消息中的 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap状态位。参考消息一般会以一种稳定的时间间隔进行发送,但是 T T C A N TTCAN TTCAN协议也允许基本周期的发送重新同步到 T i m e M a s t e r Time\quad Master TimeMaster的某一个事件的开始,这就是 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap状态位的作用,如图7所示。当有这个需求的时候,当前的 T i m e M a s t e r Time\quad Master TimeMaster会将此时发送的参考消息的 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap状态位置1,当从这个参考消息开始的基本周期结束的时候,一个 T i m e G a p Time\quad Gap TimeGap就会开始,这也就导致了前面的周期发送参考消息的状态结束了,在 T i m e G a p Time\quad Gap TimeGap期间所有的发送操作停止,整个总线处于静默状态那么这个 T i m e G a p Time\quad Gap TimeGap多长时间结束呢?只要当前的 T i m e M a s t e r Time\quad Master TimeMaster或者是潜在的另一个 T i m e M a s t e r Time\quad Master TimeMaster发送参考消息之后这个 T i m e G a p Time\quad Gap TimeGap就结束了, T T C A N TTCAN TTCAN网络的通信又开始了。

 
图7.

     在 B O S C H BOSCH BOSCH公司的这个 I P IP IP中,如果要使用 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap位相关的功能的话, T T O C F TTOCF TTOCF寄存器的 G E N GEN GEN位要置1(网络中的所有节点并包括 T i m e M a s t e r Time\quad Master TimeMaster),也就是不是严格的时间触发的操作模式。 G a p Gap Gap操作由 T i m e M a s t e r Time\quad Master TimeMaster发起, I P IP IP中由两种方式可以发起 G a p Gap Gap操作:

  1. 软件控制:将寄存器 T T O C N TTOCN TTOCN N I G NIG NIG位置1,下一个发送的参考消息中的 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap位会被置1.
  2. 硬件控制:将寄存器 T T O C N TTOCN TTOCN G C S GCS GCS位置1,如果在发送下一个参考消息中的的时候,事件触发引脚的输入是高电平,那么该参考消息的 N e x t _ i s _ G a p Next\_is\_Gap Next_is_Gap位会被置1。

     根据 B O S C H BOSCH BOSCH公司的这个 I P IP IP的描述,网络中的Potential time master有四种方式来结束 G a p Gap Gap周期(虽然 I P IP IP文档描述是Potential time master进行以下四种操作来结束 G a p Gap Gap周期,但是我总觉得Current time master也可以进行以下四种操作来结束 G a p Gap Gap周期,不知道对不对):

  1. 软件控制:将寄存器 T T O C N TTOCN TTOCN F G P FGP FGP位置1将会触发参考消息的再次周期性的发送。
  2. 硬件控制:寄存器 T T O C N TTOCN TTOCN G C S GCS GCS位已经被置1的情况下,事件触发引脚的下降沿将会将寄存器 T T O C N TTOCN TTOCN F G P FGP FGP位置1,进而触发参考消息的再次周期性的发送。
  3. 寄存器 T T O C N TTOCN TTOCN T M G TMG TMG位已经被置1的情况下,当下一次 T T O C N TTOCN TTOCN T M C TMC TMC位域选择的时间值和寄存器 T T T M K TTTMK TTTMK T M TM TM位域的时间值一致的时候会将寄存器 T T O C N TTOCN TTOCN F G P FGP FGP位置1,进而触发参考消息的再次周期性的发送。
  4. 当到达 T x _ R e f _ T r i g g e r _ G a p Tx\_Ref\_Trigger\_Gap Tx_Ref_Trigger_Gap的时候会自动触发参考消息的再次周期性的发送。这种情况说明预期的事件没有按时出现。
 
图8.

     前面提到 T T C A N TTCAN TTCAN的时间基准一共有两个 l e v e l level level l e v e l 1 level1 level1 l e v e l 2 level2 level2。下面我们来看一下这两个 l e v e l level level具体是如何实现的。如图9所示,简单的说每一个 C A N CAN CAN节点芯片都有自己的晶振电路,时间基准就是靠这个晶振电路来实现的,晶振的时钟周期 t s y s t_{sys} tsys经过分频以后就得到了最基本的时间基准 N T U , n e t w o r k t i m e u n i t NTU,network\quad time\quad unit NTU,networktimeunit,分频的参数是 T U R , t i m e u n i t r a t i o TUR,time\quad unit\quad ratio TUR,timeunitratio N T U = t s y s × T U R NTU=t_{sys}\times TUR NTU=tsys×TUR。可以看出 T U R TUR TUR N T U NTU NTU和晶振的时钟周期的比值。在 l e v e l 1 level1 level1 N T U NTU NTU C A N CAN CAN总线协议中的比特时间,各个节点的 T U R TUR TUR值不变。在 l e v e l 2 level2 level2 N T U NTU NTU大概是一秒钟时间的一个部分,也就是不到一秒钟,各个节点的 T U R TUR TUR值根据接收到的time master发送的参考消息里面的有关time master节点时间基准的信息不断做出调整,这样可以使得网络中其它节点的时间基准尽量和time master保持一致。因为在 l e v e l 2 level2 level2 T U R TUR TUR的值在不断调整,因此整个网络里面各个节点的时间基准视角比 l e v e l 1 level1 level1下要精确。

 
图9.

     下面我们再来介绍几个时间概念 L o c a l T i m e Local\quad Time LocalTime C y c l e T i m e Cycle\quad Time CycleTime G l o b a l T i m e Global\quad Time GlobalTime:

  • L o c a l T i m e Local\quad Time LocalTime:在 l e v e l 1 level1 level1时间基准下 L o c a l T i m e Local\quad Time LocalTime是一个16比特的计数器的值,每过一个 N T U NTU NTU时间,计数器的值加1。在 l e v e l 2 level2 level2时间基准下 L o c a l T i m e Local\quad Time LocalTime也是一个计数器的值,但是这个计数器最少19比特,而不是16比特。16比特之外的其它比特位代表一个 N T U NTU NTU时间的小数部分。因此在 l e v e l 2 level2 level2时间基准下, L o c a l T i m e Local\quad Time LocalTime的计数器每隔 N T U 2 n \frac{NTU}{2^n} 2nNTU时间计数一次,计数n次之后才表示过去了一个 N T U NTU NTU时间,其中 n n n表示 L o c a l T i m e Local\quad Time LocalTime的小数位的个数。
  • C y c l e T i m e Cycle\quad Time CycleTime:如图10所示。当节点检测到总线上的一个数据帧的 S O F SOF SOF比特位时,它会将此时该节点的 L o c a l T i m e Local\quad Time LocalTime保存为 S y n c _ M a r k Sync\_Mark Sync_Mark,当该帧接收完毕的时候如果发现这个帧是参考消息则将该 S y n c _ M a r k Sync\_Mark Sync_Mark保存为 R e f _ M a r k Ref\_Mark Ref_Mark,那么 C y c l e T i m e Cycle\quad Time CycleTime就是 L o c a l T i m e − R e f _ M a r k Local\quad Time-Ref\_Mark LocalTimeRef_Mark。前面也提到一个参考消息的接收意味着一个基本周期的开始,正因为如此,一个参考消息的接收有意味着 C y c l e T i m e Cycle\quad Time CycleTime重新从0开始。在 l e v e l 2 level2 level2时间基准下 C y c l e T i m e Cycle\quad Time CycleTime的计算是没有用到小数部分的,因此无论是在 l e v e l 1 level1 level1时间基准下或在 l e v e l 2 level2 level2时间基准下, C y c l e T i m e Cycle\quad Time CycleTime的计算都只用到了表示整数 N T U , n e t w o r k t i m e u n i t NTU,network\quad time\quad unit NTU,networktimeunit的16个比特位。这里还有一点需要提到的是后面在涉及到 T T C A N TTCAN TTCAN网络中的数据帧的发送的时候会有 T i m e M a r k Time\quad Mark TimeMark参数,这个 T i m e M a r k Time\quad Mark TimeMark参数参数也是以 C y c l e T i m e Cycle\quad Time CycleTime为基础的
  • G l o b a l T i m e Global\quad Time GlobalTime:如图11所示。在 l e v e l 2 level2 level2时间基准下,每次 T i m e M a s t e r Time\quad Master TimeMaster在发送参考消息的时候都会将这个参考消息在 S O F SOF SOF时刻的 G l o b a l T i m e Global\quad Time GlobalTime的值作为 M a s t e r _ R e f _ M a r k Master\_Ref\_Mark Master_Ref_Mark放到参考消息中发送出去,当其它节点接收到这个参考消息之后,其它节点会将接收到的这个参考消息的 S O F SOF SOF时刻的 R e f _ M a r k (以 L o c a l T i m e 为基准) Ref\_Mark(以Local\quad Time为基准) Ref_Mark(以LocalTime为基准)保存下来,此时可以得到一个 L o c a l _ O f f s e t = ∣ R e f _ M a r k − M a s t e r _ R e f _ M a r k ∣ Local\_Offset=|Ref\_Mark-Master\_Ref\_Mark| Local_Offset=Ref_MarkMaster_Ref_Mark参数,那么从此开始这些其它节点的 G l o b a l T i m e = L o c a l T i m e + L o c a l _ O f f s e t Global\quad Time=Local\quad Time+Local\_Offset GlobalTime=LocalTime+Local_Offset,当这些其它节点以后接收到参考消息的时候就会不断的去更新 L o c a l _ O f f s e t Local\_Offset Local_Offset参数。这里需要注意的是在 l e v e l 2 level2 level2时间基准下,每次 T i m e M a s t e r Time\quad Master TimeMaster在发送参考消息里面发送的 M a s t e r _ R e f _ M a r k Master\_Ref\_Mark Master_Ref_Mark是以 G l o b a l T i m e Global\quad Time GlobalTime为时间基准的,而不是以 L o c a l T i m e Local\quad Time LocalTime为时间基准的,就算对于 T i m e M a s t e r Time\quad Master TimeMaster它的 G l o b a l T i m e Global\quad Time GlobalTime同样满足 G l o b a l T i m e = L o c a l T i m e + L o c a l _ O f f s e t Global\quad Time=Local\quad Time+Local\_Offset GlobalTime=LocalTime+Local_Offset,对于 T T C A N TTCAN TTCAN网络初始化以来没有发生过 T i m e M a s t e r Time\quad Master TimeMaster失效而被其它 T i m e M a s t e r Time\quad Master TimeMa
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqssss121dfd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值