ST意法半导体
直播中

bigbangboom

8年用户 1275经验值
擅长:电源/新能源
私信 关注
[问答]

请问有没有可能在M4和A7核心上有相同的时域?

请问有没有可能在M4和A7核心上有相同的时域?
更具体一点:我的 STM32MP1 板使用 PTP 通过以太网同步时间(效果很好!),但现在我想为数字输入引脚添加时间戳。
到目前为止我看到的选项是:
  • 在中断发生时使用 EXtiNT 分配系统时间戳(在 A7 上)——由于内核中断处理和软件时间戳,这是不准确的
  • 使用 TIMx 和输入捕获机制(在 M4 上)——这是我的首选方式,但我不知道 TIMx 值的时间以及如何将它们与 A7 同步的信息
    • 我的一个想法是使用 PTP_Synchro PPS_OUT [尽管我启用了 TIM2 作为带 ETR 的从设备,但我仍然无法在 Cube 中激活] 并将来自 CC2 的输入捕获值与 PPS 相关联。但是只有从最后一个 PPS 到当前输入捕获的持续时间是已知的——然后我的想法是使用 RTC 值来关联整秒但 RTC 不一定与 PTP-PPS 同步
  • 使用 TIMx 和输入捕获(在 A7 上)——与 M4 有类似的问题:我无法获得系统时间和 TIMx 值之间的关系
您是否有任何想法/输入如何获得(最好)与(PTP 同步)A7 系统时间相关的数字输入的硬件时间戳?
最好的问候和非常感谢
托马斯







回帖(1)

成尔秩

2023-1-4 09:51:55
我不是 PTP 或定时器的专家。我从专家那里得到了反馈,我试图在下面进行总结。
来自 RefMan,


  • eth_ptp_trig1(列为 PTP0)连接到 TIM2 TRGO
  • eth_ptp_trig2(列为 PTP1)连接到 TIM3 TRGO。

我同意规范不是很清楚。
当定时器用于主/从复位模式时,TIMx TRGO 可以由 TIMx_ETR 输入引脚产生:


  • MMS = 000:复位模式
  • SMS = 0100:重置模式
  • TS = 00111:外部触发输入 (ETRF)。

或者,如果引脚 TIMx_ETR 不可用,则 TIMx_CH1 或 TIMx_CH2 可分别与 TS = 00101:滤波定时器输入 1 (TI1FP1) 或 00110:滤波定时器输入 2 (TI2FP2) 一起使用。
不知道如何使用 Linux 驱动程序/框架在 ETH 中使用 eth_ptp_trig 信号。
在 MAC 中:ETH_MACACR 中的 ATSEN0=1(或 ATSEN1=1)以启用辅助时间戳输入,时间戳本身位于 ETH_MACATSNR 和 ETH_MACATSSR 寄存器中。
评估时间戳准确性需要考虑的两点:


  • 由于重新同步逻辑,TIMx_ETR 输入延迟 1 到 2 个(定时器时钟)周期:可以通过移除一个 ck-tim 周期来补偿静态误差,但是连续时间戳(如果它们是周期性的)的平均值对于减少抖动引起的不确定性
  • 1(定时器时钟)个周期的延迟,用于将信号从 TRGI 输入传播到 TRGO 输出

因此,外部信号和时间戳之间的总延迟为 2 到 3 个周期(从我的头顶开始;我可能会偏离 1 个周期,如果您需要周期精确值,请告诉我们)。
另一种选择是在定时器中使用捕获模式复位:在这种情况下,外部时间戳信号必须连接到 TIMx_CH1 或 TIMx_CH2 输入,并且触发选择设置为 00101 或 00110。MAC 上的时间戳将表现相同, 但这里的兴趣在于可以同时读取两个时间戳之间的间隔,在定时器时钟域中,在 TIMx_CCR1/2 捕获寄存器中。如果 PTP 时间非常精确,这允许应用程序精确测量 MP1 定时器时钟,并补偿本地晶体的不准确性或漂移。
或者,正如您所建议的那样,使用 PPS 触发 TIM2 并使用 STGEN(或 RTC)获得粗略的绝对时间可能没问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分