首页 > 技术知识 > 正文

1. 前言

承接上篇 https://www.ebaina.com/articles/140000012553

2. linuxptp

来自linuxptp维护人员:

/dev/pps0使用的是软件时间戳 这对PTP GM来说是一个相对贫乏的资源。 有些板(但不是你的)有pps在直接时间戳。 一些imx6有这个。 仍然需要修改驱动程序,因为它只处理PPS-out,但是小于25ns精确一次运行

然而我希望启用SPE/ Apply SPE rtos补丁, 这样从gpio到timepulse信号的pin7将有更少的延迟。 我正在查看如下文件 /l4t-rt/rt-aux-cpu-demo/doc

在那里我只能找到AGX Xavier的说明,如何将rt-aux应用于NX!

此外,linuxptp的维护者建议: 你不能期望在GPIO上使用PPS的微秒精度。 独自中断延迟和抖动将导致太多的时间错误。 如果你的MAC上有这些东西, cat /sys/class/ptp/ptp0/n_external_timestamps 然后安排PPS信号被准确地打上时间戳 就可以使用ts2phc程序MAC的PHC指向GPS的PPS。

在nx,我可以看到输出0

cat /sys/class/ptp/ptp0/n_external_timestamps 0 3.修改dts

这里有一个dts文件,执行以下操作

添加pps-gpio使用AON GPIO CC 7,这是引脚28在40引脚头(以前是I2C0_SCL) 使用AON GPIO DD 0添加nvpps,这是40引脚头上的引脚27(以前是I2C0_SDA) 启用Tegra通用时间戳引擎

使用AON gpio应该提供事件时间戳

注意: 如果想要ACTIVE_LOW而不是ACTIVE_HIGH, 将gpios行中最后一个” 0 “改为” 1 “, 如果不想捕获清除事件,删除” capture-clear “行。

/dts-v1/; /plugin/; / { overlay-name = “NX PPS NVPPS”; compatible = “nvidia,p3449-0000+p3668-0000”, “nvidia,p3449-0000+p3668-0001”, “nvidia,p3509-0000+p3668-0000”, “nvidia,p3509-0000+p3668-0001”, “nvidia,tegra194”; fragment@pps { target-path = “/”; __overlay__ { pps: pps_gpio { compatible = “pps-gpio”; gpios = <&tegra_aon_gpio ((2 * 8) + 7) 0>; capture-clear; status = “okay”; }; }; }; fragment@nvpps { target-path = “/”; __overlay__ { nvpps { compatible = “nvidia,tegra194-nvpps”; gpios = <&tegra_aon_gpio ((3 * 8) + 0) 0>; status = “okay”; }; }; }; fragment@tegra_gte_aon { target = < &tegra_gte_aon >; __overlay__ { status = “okay”; }; }; };
<

使用下面的命令编译并复制到/boot

dtc -I dts -O dtb -@ -o NX_PPS_NVPPS.dtbo NX_PPS_NVPPS.dts 4. ntp

没法正常工作 为我使用的默认版本的ntp提供与tyhe系统

cat /etc/udev/rules.d/99-gps.rules KERNEL==”ttyACM0″, SYMLINK+=”gps0″ KERNEL==”pps0″, MODE=”0660″, SYMLINK+=”gpspps0″ ls /dev/gp gpiochip0 gpiochip1 gpiochip2 gps0 gpspps0 gpu_freq_max gpu_freq_min cat /etc/ntp.conf … server 127.127.20.0 mode 80 minpoll 3 burst iburst prefer fudge 127.127.20.0 stratum 1 flag1 1 flag2 0 flag3 1 flag4 0 time1 0.0 time2 0.095 refid GPS0 server 127.127.28.0 minpoll 4 fudge 127.127.28.0 time1 0.183 refid NMEA server 127.127.28.1 minpoll 4 prefer fudge 127.127.28.1 refid PPS service ntp start ntpq -p … ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 0.ubuntu.pool.n .POOL. 16 p – 64 0 0.000 0.000 0.000 1.ubuntu.pool.n .POOL. 16 p – 64 0 0.000 0.000 0.000 2.ubuntu.pool.n .POOL. 16 p – 64 0 0.000 0.000 0.000 3.ubuntu.pool.n .POOL. 16 p – 64 0 0.000 0.000 0.000 ntp.ubuntu.com .POOL. 16 p – 64 0 0.000 0.000 0.000 GPS_NMEA(0) .GPP0. 1 l – 8 0 0.000 0.000 0.000 SHM(0) .NMEA. 0 l – 16 0 0.000 0.000 0.000 SHM(1) .PPS. 0 l – 16 0 0.000 0.000 0.000 gpspipe -r {“class”:”VERSION”,”release”:”3.17″,”rev”:”3.17″,”proto_major”:3,”proto_minor”:12} {“class”:”DEVICES”,”devices”:[{“class”:”DEVICE”,”path”:”/dev/ttyACM0″,”driver”:”u-blox”,”activated”:”2020-06-29T19:17:22.004Z”,”flags”:1,”native”:1,”bps”:115200,”parity”:”N”,”stopbits”:1,”cycle”:1.00,”mincycle”:0.25}]} {“class”:”WATCH”,”enable”:true,”json”:false,”nmea”:true,”raw”:0,”scaled”:false,”timing”:false,”split24″:false,”pps”:false}

这可能是因为gpsd正在运行,正在声明端口

奇怪的是gps uart输出gpspipe -r将永远不会显示任何东西。 添加用户到拨号组。 ttyACM也不会通过gpspipe -r显示。 cat /dev/ttyTHS0 or /dev/ttyTHS1

fudge 127.127.20.0 stratum 1 flag1 1 flag2 0 flag3 1 flag4 0 time1 0.0 time2 0.095 refid GPS0

127.127.20是一个特殊的地址,意味着使用NMEA Refclock。 最后的.0表示查找/dev/gps0和/dev/gpspps0。 flag1 1 =开启PPS处理 flag2 0 =捕获上升边(设置为1以捕获下降边) flag3 1 =使用内核规则 flag4 0 =关闭内部时间码中的位置 time1 = PPS时间偏移量(离开0) time2 = PPS到GPRMC(或其他)句尾的偏移量。

猜你喜欢