[Kinetis] KEA06内的CAN的 time stamp 是怎样实现CAN网络的时间同步

[复制链接]
 楼主| yupc_mcu21 发表于 2015-10-21 09:14 | 显示全部楼层 |阅读模式
KEA06的CAN 控制器内有一个16-bit timer,用来给消息加 time stamp, 那么是怎样实现CAN网络的时间同步?
FSL_TICS_ZJJ 发表于 2015-10-21 15:59 | 显示全部楼层
楼主你好,关于MSCAN的同步,你可以看看这个链接:

http://blog.chinaunix.net/uid-22889411-id-59742.html

CAN总线规范中定义的同步保证了报文可以不管节点间积累的相位误差正确地译码,振荡器漂移、空间地分布在网络的节点间的传播延迟或者噪声干扰都会产生相位误差,CAN规范定义了两种类型的同步:硬同步和重同步。
硬同步只在报文贞的开始执行,在空闲周期后,网路中每个CAN控制器会用接收到的SYNC_SEG第一个隐性到显性跳变沿初始化它当前的位周期定时。
重 同步是在随后的报文剩余部分每接收到一个隐性到显性的跳变沿就执行一次。如果这个边沿在TSEG1中接收到,即在SYNC_SEG后但在接收器的采样点 前,接收器就会把它解释成是一个慢速的发送器发送的滞后边沿,因此接收器会将TSEG1段延长到最匹配发送器的时间。相反,若果边沿在采样点之后接收器的 SYNC_SEG前收到,即在TSEG2中,接收器会将它解释成一个快的发送器发送的下一个位周期的提前边沿,这种情况下,接收器会将TSEG2段缩短到 最匹配发送器的时间。
重同步的位间隔可以被增长或者缩短的最大TQ数量由SJW的值指定。由于CAN位周期的所有段都被量化,即由整数个TQ组成,重同步只在绝对的相位误差大于1个TQ时产生,因此,甚至在有相同振荡器基准频率的两个网络节点间,也不能确定有一个TQ同步
 楼主| yupc_mcu21 发表于 2015-10-21 17:36 | 显示全部楼层
谢谢 FSL_TICS_ZJJ的回答,但是你回复里描述的应该是 CAN 的 bit timing。
KEA128RM文档中关于CAN的 time stamp 或者说是时间戳的描述不多,说是使用一个internal timer来count,在 tx message与rx message的 EOF时间段内把 timer的值给到寄存器中,如下有关timer enable的描述

This bit activates an internal 16-bit wide free running timer which is clocked by the bit clock rate. If the
timer is enabled, a 16-bit time stamp will be assigned to each transmitted/received message within the
active TX/RX buffer. Right after the EOF of a valid message on the CAN bus, the time stamp is written to
the highest bytes (0x000E, 0x000F) in the appropriate buffer. In loopback mode no receive timestamp is
generated. The internal timer is reset (all bits set to 0) when disabled. This bit is held low in initialization
mode.
小狗爱吃骨头 发表于 2015-10-21 20:29 | 显示全部楼层
原来这个时间的同步是通过网卡实现的啊
 楼主| yupc_mcu21 发表于 2015-10-22 20:32 | 显示全部楼层
楼上知道CAN 网络 时间同步的应用?
C洛达尔多 发表于 2015-10-22 20:56 | 显示全部楼层
CAN总线规范中定义的同步保证了报文可以不管节点间积累的相位误差正确地译码,振荡器漂移、空间地分布在网络的节点间的传播延迟或者噪声干扰都会产生相位误差
 楼主| yupc_mcu21 发表于 2015-10-23 10:14 | 显示全部楼层
"CAN总线规范中定义的同步保证了报文可以不管节点间积累的相位误差正确地译码,振荡器漂移、空间地分布在网络的节点间的传播延迟或者噪声干扰都会产生相位误差"
这还是 Bit timing的问题,传播延迟,时钟的jitter产生的误差都是由 hardsync 与 resync来对抗。时间戳不是这个范畴的问题。
侣行天下 发表于 2015-10-23 10:53 | 显示全部楼层
硬同步只在报文贞的开始执行,在空闲周期后,网路中每个CAN控制器会用接收到的SYNC_SEG第一个隐性到显性跳变沿初始化它当前的位周期定时。
 楼主| yupc_mcu21 发表于 2015-10-23 15:15 | 显示全部楼层
@侣行天下:
“硬同步只在报文贞的开始执行,在空闲周期后,网路中每个CAN控制器会用接收到的SYNC_SEG第一个隐性到显性跳变沿初始化它当前的位周期定时”
你说的这个就是hard sync,用来调整 每个bit time 内 Tq的个数,从而调整相位误差,不是时间戳的事
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部