欢迎光临
我们一直在努力

bmca是什么相机【瑞芯微平台实时Linux方案系列】第十九篇 - 瑞芯微平台实时Linux高精度时间同步方案

  • 瑞芯微芯片已大规模用于国产化边缘网关、机械臂控制器、视觉盒。

  • 多主板级联场景:

    • 工业相机触发 → 光源闪光 → 机械臂抓取,整条链路抖动 < 1 ms

    • 5G TSN 网关:CUC 下发门控列表,时间漂移 > 100 ns 即丢包

  • 常规 NTP 只能到毫秒级,PTP(Precision Time Protocol)配合瑞芯微内置 Timestamp Unit (TSU) 可达纳秒级

  • 掌握本文技能 = 让“国产化硬件 + 实时 Linux”通过严苛工业时序测试,缩短客户审厂 1-2 周。


关键词 一句话 瑞芯微对应硬件 PTP IEEE1588 协议,网络包打时间戳,主从校正 软件 + MAC 硬件时间戳 TSU Timestamp Unit,在 MAC 层记录 ** egress/ingress ** 时刻 RK3568/RK3588 GMAC 内置 PHC PTP Hardware Clock,/dev/ptp0 可被 chrony/ptp4l 直接读写 BMCA 最佳主时钟算法,自动选 Grandmaster 无需手动指定 802.1AS TSN 子协议,PTP 的汽车/工业裁剪版 与 PTP 互通,寄存器兼容

1. 硬件

  • 主板 2 块:RK3568 或 RK3588 核心板(≥2 核,1 GB RAM)

  • 千兆交换机 1 台(支持硬件时间戳优先,普通管理型亦可)

  • 网线 2 根(CAT5e 以上,< 5 m 误差可忽略)

2. 软件

组件 版本 安装命令 实时内核 linux-5.15.y-rt 见下文一键脚本 ptp4l linuxptp 3.1.1 apt install linuxptp chrony 4.2+ 自带 ethtool 5.x apt install ethtool

3. 一键烧录实时内核(可复制)

#!/bin/bash
# install_rt.sh
VER=5.15.71
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v${VER}/linux-image-${VER}-rt56_*.deb
sudo dpkg -i linux-image-*rt*.deb && sudo reboot

重启后:

uname -r   # 5.15.71-rt56

某液晶面板厂使用 6 台 RK3588 边缘视觉盒 做缺陷检测:

  • 相机帧触发信号经 PTP 同步,误差 < 200 ns,确保 6 相机同时拍照,避免“果冻效应”;

  • 同一 PTP 域内 RK3568 PLC 控制 12 台伺服驱动器,位置环采样 1 kHz,窗口抖动 < 500 ns,替代进口 Beckhoff 方案,整机成本降 30%。
    客户审厂要求提供 PTP 精度测试报告 + 48 h 连续运行日志,本文后续步骤可直接输出 CSV 报表,一次通过


实验目录统一:~/ptp-lab,所有脚本放此处,方便管理。

mkdir -p ~/ptp-lab && cd ~/ptp-lab

5.1 确认硬件时间戳能力

# 查看 MAC 是否支持 SOF_TIMESTAMPING_TX_HARDWARE
ethtool -T eth0

期望输出

Time stamping parameters for eth0:
Capabilities:
        hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
        hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
        hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
        off                   (HWTSTAMP_TX_OFF)
        on                    (HWTSTAMP_TX_ON)

若只有 software → 只能用 CPU 时间戳,精度降至 10-50 μs,建议换板或检查设备树。


5.2 配置 PTP 主时钟(Grandmaster)

主板 A 接 GPS/北斗授时,或手动指定为 master:

# /etc/ptp4l.conf
[global]
twoStepFlag               1
slaveOnly                 0
priority1                 128
priority2                 128
delay_mechanism           E2E
tsproc_mode               filter
delay_filter              moving_median
delay_filter_length       10

[eth0]
time_stamping             hardware

启动主时钟:

sudo ptp4l -f /etc/ptp4l.conf -i eth0 -m &

日志出现:

ptp4l[1234]: port 1: MASTER CLOCK SELECTED


5.3 配置从时钟(Slave)

主板 B 同一网段,配置相同文件,仅加一行

slaveOnly                 1

启动:

sudo ptp4l -f /etc/ptp4l.conf -i eth0 -m &

日志:

ptp4l[5678]: port 1: SLAVE CLOCK SELECTED


5.4 用 chrony 把 PHC 同步到系统时钟

# /etc/chrony.conf 追加
refclock PHC /dev/ptp0 poll 2 dpoll -2 offset 0
allow

重载:

sudo systemctl restart chrony

验证:

chronyc sources

输出:

210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#* PHC0                          0   2   377     6   -12ns[+/- 50ns]

系统时间已跟 PHC 对齐,误差 ≈ 几十纳秒


5.5 精度测量:秒级报表一键导出

#!/bin/bash
# measure.sh
LOG=ptp_$(date +%F_%H-%M).csv
echo "time,offset(ns),delay(ns)" > $LOG
for i in {1..600}; do
    offset=$(sudo pmc -u -b 0 -t 1 -d 0 | grep offset | awk -F' *' '{print $3}')
    delay=$(sudo pmc -u -b 0 -t 1 -d 0 | grep delay | awk -F' *' '{print $3}')
    echo "$(date +%s),$offset,$delay" >> $LOG
    sleep 1
done

跑 10 分钟:

chmod +x measure.sh && sudo ./measure.sh

用 Excel 打开 CSV → 插入折线图,offset 峰值 < 200 ns 即达标。


5.6 48 h 老化脚本(客户审厂用)

#!/bin/bash
# aging.sh
LOG=aging_$(date +%F).csv
echo "ts,offset,delay" > $LOG
timeout 172800 sudo ptp4l -f /etc/ptp4l.conf -i eth0 -m | 
stdbuf -oL awk '/offset/ {print strftime("%s"),$3,$5}' >> $LOG

生成报表后 gzip 上传,一次通过审厂


问题 现象 解决 ptp4l 报 “time stamping mode invalid” 设备树未使能 tsu 在 dts 加 snps,tsu-clock = <&cru>; offset 跳动 > 1 μs 交换机不支持硬件时间戳 换 TSN 交换机或在主从直连验证 chrony 无法打开 /dev/ptp0 权限不足 加用户进 ptp 组:sudo usermod -a -G ptp $USER 长时间运行 offset 逐渐漂移 温度变化 启用 servo 参数 pi_proportional_const=0.7 客户要求 802.1AS 汽车场景 配置文件 delay_mechanism=P2P,协议选 gptp

  1. 主时钟冗余
    两台 Grandmaster 用 priority1 区分,BMCA 自动 failover。

  2. 温度补偿
    在老化箱跑 0-70 °C 循环,记录 offset 漂移,生成补偿表写进驱动。

  3. 与 ROS2 融合
    ROS2 Foxy 内置 rclcpp::Clock 支持 PHC,时间戳直接纳秒级,SLAM 建图闭环误差更小。

  4. 容器化部署
    Docker 启动加 --cap-add=SYS_TIME --device=/dev/ptp0,镜像内同样装 ptp4l

  5. 监控接入 Prometheus
    node_exporter 文本文件收集脚本:

    bash

    复制

    echo "ptp_offset_ns $offset" > /var/lib/node_exporter/ptp.prom
  6. 版本锁定
    内核、ptp4l、chrony 版本写入《BSP 版本清单》,任何升级需重新测量精度。


瑞芯微 + 实时 Linux PTP
├─ 硬件:RK3568/RK3588 GMAC 内置 TSU
├─ 软件:PREEMPT_RT + ptp4l + chrony
├─ 步骤:ethtool 确认→ptp4l 主从→chrony 系统同步→measure 报表
├─ 指标:offset < 200 ns, jitter < 50 ns
└─ 场景:边缘视觉同步、分布式 PLC、5G TSN 网关

时间精度是分布式实时系统的“心跳”。
把本文脚本推送到你的 GitLab,下次客户审厂,只需跑 1 条命令即可导出 48 h 精度报表,让国产化瑞芯微平台也能用“纳秒级”说话!祝你调试顺利,漂移 < 100 ns!

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » bmca是什么相机【瑞芯微平台实时Linux方案系列】第十九篇 - 瑞芯微平台实时Linux高精度时间同步方案

登录

找回密码

注册