2.2 再同步时间宽度SJW的探讨 其实上面关于位定时的描述还不够完善。在位定时中还有一个很重要的概念就是SJW,即reSynchronization Jump Width.再同步补偿宽度。在阅读can_fd_spec的时候我遇到一个问题。这个资料上对于SJW的描述如下: As a result of RESYNCHRONIZATION PHASE_SEG1 may be lengthened or PHASE_SEG2may be shortened. The amount of lengthening or shortening of the PHASE BUFFER SEGMENTS has an upper bound given by the RESYNCHRONIZATION JUMP WIDTH. The RESYNCHRONIZATION JUMP WIDTH(N) shall be programmable between 1 and min(16,PHASE_SEG1(N)), the RESYNCHRONIZATION JUMP WIDTH(D) shall be programmable between 1 and min(4, PHASE_SEG1(D)).再同步的结果是增长PHASE_SEG1的时长或者缩短PHASE_SEG2的时长。增长或者缩短的量由SJW给出上限。SJW(N)应当被配置为1到min(16,PHASE_SEG1(N))的范围内。SJW(D)应当被配置为1到min(4,PHASE_SEG1(N))的范围内。这段话听起来好像没有问题。但是实际上,这里的取值范围和ST的cube中关于SJW的范围设置有很大的不同。我们可以理解的是PHASE_SEG2的长度应该大于SJW。否则会出现PHASE_SEG2消失的情况。这个can_fd_spec不是ISO的手册,是Bosch较早起草的V1.0版本。后面应该会有改动。 所以我设法查到了ISO 11898-1:2015的11.3 PCS specification。 图6:位定时参数配置表 关于本表,手册还有一句说明:With the exception of thesynchronization segment, which shall be exactly one time quantum long, implementations may allowtime segments that exceed the minimum required configuration ranges specified in Table 8。就是说除了同步段时1个TQ之外,其余的值可以超过表8中的取值。 The following restrictions shall be met for the configuration of the bit time segments. - The information processing time shall be less than or equal to 2 time quanta long. (要求 I**PT≤2T**Q���≤2��, 和前面要求一致.)
- In data bit time, Phase_Seg2 shall be greater than or equal to the maximum information processing time. (数据段要求 P**haseSeg2≥IP**T�ℎ������2≥���, 要求一致)
- In nominal bit time, Phase_Seg2 shall be greater than or equal to the maximum of these two items:SJW and the information processing time. (仲裁段要求P**haseSeg2≥max(SJW,IPT)**�ℎ������2≥max(���,���))
- In nominal bit time and in data bit time, SJW shall be less than or equalto the minimum ofthese twoitems: Phase_Seg1 and Phase_Seg2.(要求S**JW≤min(PhaseSeg1,PhaseSeg2)**���≤���(�ℎ������1,�ℎ������2))
In case of synchronization, Phase_Segl may be longer and Phase_Seg2 may be shorter than its programmed value. The position of the sample point may differ in the two bit timing configurations; the length of the Prop_Seg may be zero in the configuration for the data bit rate. 在同步时,Phase_Segl应当大于它编程的值,Phase_Seg2应当小于它编程的值。采样点的位置可以有两套不同的位定时配置。在数据速率的计算中Prop_Seg的长度可以配置为0. In a CAN implementation, Prop_Seg and Phase_Seg1 do not need to be programmable separately; it shall be sufficient to program the sum of Prop_Seg and Phase_Segl. The total number of time quantain a nominal bit time shall be programmable at least from 8 to 25 for implementations that are not FD enabled, For implementations that are FD enabled, the total number of time quanta in a data bit time shall be programmable at least from 5 to 25 and in a nominal bit time at least from 8 to 80. 在CAN实现中,Prop_Seg和Phase_Seg1不需要分别配置;对Prop_Seg和Phase_Seg的总和进行配置就足够了。对于FD没有启用的实现,一个标称位时间(nominal bit time)的总TQ数应该配置为至少从8到25个TQ;对于FD已经启用的实现,则一个数据段位时间(data bit time)内的总TQ数至少应当配置为5到25个TQ,而标称位时间的总TQ应当至少被配置为在8到80之间。(上面的数值是居于表8的。如果你的TQ范围非常大,我的理解是这里的数值范围也适当的扩大。) 其实上面转载的图标和内容我可可以基本归纳出来以下几个要点: - SJW不仅要小于Phase_Seg2,还要小于Phase_Seg1
- 传播段Prop_Seg和Phase_Seg1可以一起配置
- IPT不大于两个TQ
- 同步段Sync_Seg总是为1TQ。
- 标称位定时和数据位定时可以完全不同
- FD是否启用可以影响位定时各个阶段的配置
2.3 位同步的机制CAN的同步机制是即便在异步通讯中也能保证各节点实时性的关键技术之一。要说清楚位同步机制,我们首先要弄懂为什么会产生不同步,什么时候才开始位同步以及怎么同步。 CAN协议通讯方法叫做NRZ (non-return to zero)方式。各个位的开头和结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。(以上文字部分摘取自资料5) 简单的来说,CAN控制器节点会适时的比较CAN_TX和CAN_RX两个线上的相位差来作为同步的依据。 CAN选择了两种同步方式:硬同步(HARD SYNCHRONIZATION)和再同步(RESYNCHRONIZATION)(RESYNCHRONIZATION)。 2.3.1 硬同步硬同步,可以等同与强制同步。硬同步会重新开始位定时序列,强制将sync_seg和边缘对齐。硬同步不受SJW的限制。 在总线空闲、暂停传输和在INTERMISSION的第2或3位传输期间,只要出现从隐性到显性的边沿,就会执行硬同步。在从 EDL 到 r0 的隐性到显性边沿进行硬同步。对于普通的FD数据帧来说,除了SOF需要硬同步,在EDL像r0转变的时候也会出现硬同步。 其实具体的规则应该非常复杂,还在这部分不需要软件实现。就不再深入了解了。 2.3.4 再同步在总线电平出现隐形到显性的变化时(除了硬同步的情况,其实规则非常复杂),就会发生再同步。这时候会根据检测到的边缘和期望的采样点时间进行对比。当不同步时会出现两种情况: - 当边沿出现在Prop_Seg和Phase_Seg1之间时。在Phase_Seg1上插入不多于SJW个TQ的时长,以尝试将下一个位的边缘调整到Sync_Seg.这一位的采样点也随之移动到了下一个边缘之前。
- 当边缘在出现Phase_Seg2上时。立即减小不多于SWJ个TQ的时长,以期望将下一个位的边缘移动到下一个位的Sync_Seg上。因为这一位的采样点已经在下一个边缘之前,因此不需要调整。
当然如果SJW太短可能会导致当同步误差很大时,难以通过再同步。但如果SJW太长,采样点也会有较大的偏移(极端情况下采样点和边缘靠的太近,很容易就出现采样错误的情况) 关于SJW的设置我还是没有找到很能说服我的方法。估计只能实际测试。好在目前CAN的帧不会太长,经过硬同步之后,采样偏差应该不会太大,再同步的压力不会太大。 2.4 关于传播段延迟的估计下图来在附件2链接的视频中截取的一张图片: 图7:传播延迟定义 可以从图表中看到所谓的传播延迟实际上由两部分组成,一部分是CAN收发器(有些人也把它叫做PHY)的信号转换延迟(回环延迟)和信号传播延迟。 前者需要查看使用的收发器表格,因为有两个收发器所以要计算两个收发器的收发和。我们以TCAN1042V-Q1的数据表为例,有回环延迟参数: 图8:数据位定时 图中的tProp(LOOP1)和tProp(LOOP2)分别表示隐性到显性和显性到隐性的回环延迟。 信号传播延迟大概是一米5ns(按照2x10^8的信号传播速度)。 我们以使用TCAN1042V-Q1收发器,两个节点距离50米为例。则整个传播延时就是: 2 x ( 100 + 250) 到 2 x ( 175 + 250)之间。即传播延迟大概在700ns到850ns之间。 2.5 关于每个段设置的一些看法(本小节是个人的一些想法,因为不具备专业的通讯背景,所以以下论述并不具有权威性。这些看法只是为了抛砖引玉,并希望获得专业人员的指点。谢谢!) 正如图5展示的那样,大多数CAN控制器都将PROP_SEG和PHASE_SEG1合并位一个TSEG1,相应的PHASE_SEG2被更名为TSEG2以与之相配。而SYNC_SEG因为固定是1TQ的常量,因此就不体现在CAN控制器的配置中。那么对于软件工程师来说,一般需要配置的就是TSEG1和TSEG2.因为FD有标称和数据两套位定时,所以就有TSEG1(N),TSEG2(N),TSEG1(D),TSEG2(D)四个变量。此外还有上面的SJW,这样就又增加了SJW(N)和SJW(D)这两个变量。 所以核心的问题就变成怎么配置这6个变量。(TQ的配置在这里先不讨论)为了弄清楚这个问题,我们首先要搞清楚这个问题的核心是什么?其实这个通讯问题的核心就是在要求的通讯速率和其它限制条件下如何提高通讯质量?就位定时参数配置这个问题来说,通讯的核心之一是如果降低采样的错误率,就是说你收到的信息就是别人发送的。因此怎么选择和调整采样点是整个问题的核心之一。 这个核心问题其实有几个衡量的维度:首先、是在目前的状况下通讯的误码率高不高?第二、在目前的环境状况下,总线抗干扰的能力如何?第三、当添加或者删除节点时总线的鲁棒性高不高?第四、当相互通讯的节点变化时,还能否保证一样优秀的通讯质量? 2.5.1 理想采样点图9:理想采样点 现在我们先看图9,我将这张图叫做理想采样点图是因为我们理想的采样点应该位于两个bit位跳变的中间。如果只单纯的考虑采样点的选择,这应该是可以理解的。因为太靠近要采样bit的开始或者太靠近这个bit的结尾,当发生干扰时很容易错误的采样到了上一位或者下一位。所以理想的情况当然是,当然是位于两个跳变的中间位置。 2.5.2 理想面临的挑战如果真的这么简单,CAN就不需要提供那么复杂的设置了。还记得传播段这个问题吗?你可能会问为什么其它的通讯根本就不需要担心传播段。传播段存在只是影响时延而已,不是吗? 说到这个问题就需要提到CAN使用的技术CSMA/CD (Carrier Sense, Multiple Access/Collision Detection) 。这项技术的中文名称叫做“载波监听多路访问/碰撞检测”。简单描述就是所有的阶段都要监听总线上的载波,当要发送的时候也是一边发一边监听。当检测到接收到的和发送到的不一样(被别的节点发送的显性电平覆盖,这部分不需要软件参与。详细的可以了解一下线与的概念). 既然要一边发一边监听,而且要监听的是整个总线线与之后的结果以实现碰撞检测。就需要让所有节点几乎同步(错位不超过一个bit)。不然因为可能因为延时导致错位或者,导致高优先级的节点反而停止了。这就是为什么要增加传播段的原因。当然因此也就导致了在仲裁段,CAN总线的长度和标称速率相对有一个限制的原因。 因为TSEG1包含了传播段和PHASE_SEG1的原因。请注意这里的传播段是为了考虑到传播延迟故意引入的。按照我的理解这里的传播段长度其实应当考虑当前节点到总线最远节点的延时然后计算出的TQ。还以2.4中的示例,那么我们假定一个TQ是100ns,那我可能会考虑传播段的长度大概就是9个TQ。
|