首页 > 技术知识 > 正文

1. 前言

NX是否支持协议: ieee802.1时间敏感组网(TSN)? IEEE1588v2一步精确时间协议(PTP)?

NX应该像Xavier一样支持PTP。

2.linuxptp工具调试 ethtool -T eth0 Time stamping parameters for eth0: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 0 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC) ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) ptpv2-l4-sync (HWTSTAMP_FILTER_PTP_V2_L4_SYNC) ptpv2-l4-delay-req (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) ptpv2-l2-sync (HWTSTAMP_FILTER_PTP_V2_L2_SYNC) ptpv2-l2-delay-req (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT)

安装linuxptp

git clone git://git.code.sf.net/p/linuxptp/code linuxptp cd linuxptp/ make -j6 sudo make install

运行

sudo ptp4l -i eth0 -m -S ptp4l[69457.930]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[69457.931]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[69464.849]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[69464.850]: selected local clock 48b02d.fffe.05a79e as best master ptp4l[69464.850]: port 1: assuming the grand master role 3.参考PTP测试步骤 Host side ifconfig eth0 down ifconfig eth0 up ifconfig eth0 0.0.0.0 ip addr add 10.0.0.1/24 dev eth0 ip link set dev eth0 up timedatectl set-ntp false date 010100002018 phc_ctl /dev/ptp0 set phc_ctl /dev/ptp0 get ptp4l -f gPTP.cfg -i eth0 -p /dev/ptp0 -m DUT side ifconfig eth0 down ifconfig eth0 up ifconfig eth0 0.0.0.0 ip addr add 10.0.0.2/24 dev eth0 ip link set dev eth0 up timedatectl set-ntp false phc_ctl /dev/ptp0 get ptp4l -f gPTP.cfg -i eth0 -p /dev/ptp0 -s -m

NX PPS支持似乎需要重新构建内核,以便将PPS设备输出添加到ptp实现中。 默认的内核似乎具有PPS。

nx2:~/linuxptp$ zcat /proc/config.gz | grep -i pps # PPS support CONFIG_PPS=y CONFIG_PPS_DEBUG=y # PPS clients support # CONFIG_PPS_CLIENT_KTIMER is not set # CONFIG_PPS_CLIENT_LDISC is not set CONFIG_PPS_CLIENT_GPIO=y # PPS generators support # CONFIG_NVPPS is not set

在重新构建内核并添加PPS- ktimer模块后, 是否可能使用例如simpleRT2K设备[或ublox F9t] PPS来提高PTP实现的精度?

4. NX平台创建PPS节点

创建一个设备树绑定来设置与pps-gpio驱动程序相关联的gpio。 类似于这个来自内核文档的例子…

pps { pinctrl-names = “default”; pinctrl-0 = <&pinctrl_pps>; gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; assert-falling-edge; echo-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>; echo-active-ms = <100>; compatible = “pps-gpio”; };

/dev/ptp0已经存在,但是没有与之关联的PPS源(因为没有PPS设备)。 一旦完成上述绑定,就会自动显示/dev/pps0设备并由ptp0使用。 然后外部设备的PPS输出将连接到创建绑定时选择的GPIO 使用任何必要的电压转换。

5. 参考Xavier平台用GPIO作为PPS接口

Xavier在硬件上没有支持该功能(PPS信号)的引脚。 您可以使用GPIO作为PPS接口,对模拟的PPS信号进行软件修改。 内核中已经启用了CONFIG_PPS和CONFIG_PPS_CLIENT_GPIO。 请在dtb内核中添加设备树节点,如下所示:

pps { gpios = <&tegra_aon_gpio TEGRA194_AON_GPIO(AA, 0) GPIO_ACTIVE_LOW>; //// here use gpio for the pin in which you want pps signal. compatible = “pps-gpio”; assert-falling-edge; status = “okay”; };

在系统引导之后,您将看到用于PPS的sysfs节点。

ls /sys/class/pps/pps0/

当gpio引脚信号下降沿发生中断时,将捕获时间戳并使用:

cat /sys/class/pps/pps0/assert

猜你喜欢