i.MX93 - 1PPS入力とPTP目標: GPS レシーバからの Pulse-Per-Second (PPS) 信号と GPRMC ログを使用して、ENET_QoS イーサネット コントローラ内で PTP 時間の同期を検証する
ハードウェア: i.MX 93
ビルドルート: 2025.11.1
Linux: 6.12.16
Linuxptp : 4.4
デバイスツリーオーバーレイの変更:
- eqos のステータスを「無効」から「正常」に変更します
- usdhc2 pinctrl-* エントリから pinctrl_usdhc2_gpio および pinctrl_usdhc2_gpio_sleep エントリを削除します。
- pinctrl_eqos と pinctrl_eqos_sleep に「MX93_PAD_SD2_CD_B__ENET_QOS_1588_EVENT0_IN 0x31E」エントリを追加します。
- usdhc2 cd-gpiosエントリを削除し、broken-cdに置き換えます
- pinctrl_usdhc2_gpio ノードと pinctrl_usdhc2_gpio_sleep ノードを削除します。
ターゲット上のソフトウェアの場所:
- eMMCからの起動
- LinuxカーネルとptpアプリをubootingしてSDカードから実行する
Linux PTPソフトウェアを実行中:
- ptp4l -E4H -i eth1
- ts2phc -c /dev/ptp1 -s nmea --ts2phc.nmea_remote_host10.128.240.54 --ts2phc.nmea_remote_port3001 --ts2phc.ピンインデックス0 -l 7 -m
PPS入力:
現在、GPS レシーバからの PPS 信号を受け入れるように FRDM i.MX 93 ボードに変更を加える前に、あらゆるイベントのタイムスタンプを検証しようとしています。これらのイベントを生成するために、SD カード ソケットの機械式スイッチの脚の間に絶縁体を挿入しています。SD2_nCD に接続された IO ピンを GPIO 入力として手動で設定し、このアクションによってピンの入力電圧が変化することを確認しました。ハードウェアによるイベント情報のタイムスタンプは、特定の周期性に依存すべきではないと私は想定しています。
テスト結果:
- ts2phcはGPRMCログを受信していますが、ログにはポーリングで常にゼロイベント情報が返されることが示されています。
- devmem プログラムを使用したスクリプト経由でレジスタを調べると、次のようになります。
- SW_MUX_CTL_PAD_SD2_CD_B 0x00000001
- SW_PAD_CTL_PAD_SD2_CD_B 0x0000031E
- MAC_SYSTEM_TIME_SECONDS 0x69AB35B0
- MAC_SYSTEM_TIME_NANOSECONDS 0x10642013
- MAC_TIMESTAMP_STATUS 0x00000000
- MAC_補助制御 0x00000010
- MAC_AUXILIARY_TIMESTAMP_NANOSECONDS 0x00000000
- MAC_AUXILIARY_TIMESTAMP_SECONDS 0x00000000
- システム時間レジスタが適切に時間をカウントしていることがわかります
- 補助タイムスタンプ レジスタにはゼロ以外の値が表示されることはありません。リファレンス マニュアルでは、FIFO が空のときには常にゼロが読み取られるのか、それとも最新のタイムスタンプが返されるのかは明確ではありません。
- SW_MUX_CTL_PAD_SD2_CD_B レジスタの SION ビットを 0 と 1 の両方に設定してこれを試しましたが、結果に違いはありませんでした。
- pin_index マッピングが予想どおりでなかった場合に備えて、MAC_AUXILIARY_CONTROL レジスタの 4 つの ATSEN ビットをすべて設定してみましたが、結果に違いはありませんでした。
i.MX 93 アプリケーションプロセッサリファレンスマニュアル、Rev. 6、2025-07-01 を読んだときに生じた追加の質問:
- 第 43 章 TSN 対応イーサネット コントローラ (ENET_QoS)、セクション 43.5、表 417 には、2 つの異なるイベント入力 1588_EVENT_AUX_IN と 1588_EVENT_IN がリストされています。これら 2 つの信号はどの外部ピンまたは内部デバイス ポートに接続されますか?1588_EVENT_IN ポートは ENET_QoS 内で何に接続しますか?1588_EVENT_AUX_INはptp_aux_trig_i[0]に接続され、ATSEN0ビットによって制御されていると推測します。(これはカーネルと ts2phc が期待していることでもあるようです。)それは正しいですか?
- 第43章、セクション43.5、表417には、1つのイベント出力1588_EVENT_OUTがリストされています。この信号はどの外部ピンまたは内部デバイス ポートに接続されますか?1588_EVENT_OUT ポートは ENET_QoS 内で何に接続しますか?PPS 出力の 1 つに関連付けられていますか?
- 第 43 章では、タイムスタンプをトリガーするために ptp_aux_trig_i 入力のどのエッジ (立ち上がり/立ち下がり/両方) が使用されるかが指定されていないようです。
Re: i.MX93 - 1PPS input and PTPこんにちは、
NXP Semiconductors製品にご興味をお持ちいただきありがとうございます。
AUX_IN 信号は、現在の時刻 (この時刻は、どのアプリケーションでもタイムスタンプ値として使用されます) をタイムスタンプ FIFO にラッチすることをトリガーするために使用されます (以前のトリガー イベントから複数のタイムスタンプ値がある場合があります)。
EVENT_IN はメディア クロック生成および回復ブロックへの入力であり、次のトリガーに使用されます。
- アプリケーションから読み取られたターゲットプレゼンテーション時間のキャプチャは、リカバリモードが有効になっている場合は MAC_PPSn_Target_Time_Seconds に結果を生成します。
- 生成モードが有効になっている場合、サンプリングされたトリガーで現在のプレゼンテーション時間をキャプチャします。
1588_EVENT_OUT は、プロセッサによって PPS 出力を駆動するために使用されます。
よろしくお願いします。
Re: i.MX93 - 1PPS input and PTPAUX_IN という用語を使用する場合、それは表 417 の 1588_EVENT_AUX_IN という用語と同じですか?
もしそうなら、どの特定の ATSEN* ビットにマップされますか?
AUX_IN (1588_EVENT_AUX_IN) は、SW_MUX_CTL_PAD_SD2_CD_B の ENET_QOS_1588_EVENT0_IN モードに接続しますか?Re: i.MX93 - 1PPS input and PTPこんにちは@Kevin_M
はい、1588_EVENTx_AUX_IN です。次のフィールドを確認してください。これが AUX の使用法です。
PTGE
プレゼンテーション時間生成の有効化 このビットが設定されると、プレゼンテーション時間生成が有効になります。
0 - プレゼンテーション時間生成が無効
1 - プレゼンテーション時間生成が有効
...
MAC_PPS0_ターゲット時間秒
PPS ターゲット時間秒レジスタ このフィールドには、時間を秒単位で格納します。
PPSターゲットタイム秒レジスタ
このフィールドには時間が秒単位で保存されます。タイムスタンプ値が両方のターゲット タイムスタンプ レジスタと一致するかそれを超えると、MAC は PPS 信号出力を開始または停止し、MAC_PPS_CONTROL レジスタの対応する PPS 出力に対して選択されたターゲット タイム モードに基づいて割り込み (有効な場合) を生成します。
...
43.7.9.1 メディアクロック生成のプログラミングガイドライン
1. PPSインスタンスをメディアクロック生成モードに設定するには、適切なプレゼンテーションタイムコントロール(サポートされている生成モード「1001-1011」)をMAC_PPS_CONTROLレジスタのPPSCMD(0番目のインスタンスの場合)/PPSCMD#i(1、2、3番目のインスタンスの場合)にプログラムします。
2. 選択されたPPSインスタンスに基づいて、アプリケーションは対応するmcg_pst_trig_i[#i]に適切なトリガー信号を駆動する必要があります。
...
43.7.9.2 メディアクロックリカバリのプログラミングガイドライン
1. MAC_TIMESTAMP_CONTROL レジスタの PTGE フィールドを設定して、現在のプレゼンテーション時間 (CPT) カウンタを有効にします。システム時間の初期化値をプログラムすることに加えて、同等のプレゼンテーション時間の初期値で MAC_PRESN_TIME_UPDT レジスタを更新します。その後、MAC_TIMESTAMP_CONTROL レジスタの TSINIT フィールドが設定されます。
2. システム時間に使用される増分値は、現在のプレゼンテーション時間にも使用されます。これは、増分値がサブ秒およびサブナノ秒単位であるためです。
1.各ATSENはそれぞれのEVENTにマッピングされます
2. 正解です。ここでAUX_INを確認できます。https://github.com/nxp-imx/linux-imx/blob/lf-6.12.y/arch/arm64/boot/dts/freescale/imx8mp-pinfunc.h#L...
よろしくお願いいたします。
Re: i.MX93 - 1PPS input and PTP@JosephAtNXP私は PPS 出力を設定しようとしているわけではなく、IEEE 1722 と関係のあることもしようとしているわけではありません。ENET_QOS_1588_EVENT0_IN の状態が変化した瞬間にタイムスタンプを付けようとしています。
Re: i.MX93 - 1PPS input and PTP@JosephAtNXP さん、ENET_QoSで1588 PPSの入力がうまく機能しない理由について、まだ調査中でしょうか?Re: i.MX93 - 1PPS input and PTP@Kevin_Mこの問題の解決に何か進展はありましたか?私も同じ問題に直面しています。ENETインスタンスではPTPをPPS入力と同期させることはできますが、リファレンスマニュアルやドライバでEVENT0_INピンをENET_QOSで使用する方法が見つかりません。
Re: i.MX93 - 1PPS input and PTPケビンさん、ありがとうございます。確かにそれが唯一の方法のようですが、stmmacドライバではまだ対応していないようなので、追加する必要がありますね。Re: i.MX93 - 1PPS input and PTPNXPは、ENET_QoSのAUX TIMESTAMP機能がi.MX93チップの内部または外部のいずれにも接続されていないことを確認しました。
私は、1588_EVENT0_IN モードで SD2_CMD を介して PPS をルーティングし、MAC_PPS_CONTROL をプレゼンテーション時間制御オプション 0001 を使用するように設定して、PPS 信号の立ち上がりエッジでプレゼンテーション時間をキャプチャし、MAC_PPS0_TARGET_TIME_SECONDS でキャプチャされた時間を読み取ることに成功しました。まだ解決すべき細かい点はたくさんありますが、これは有望な解決策のように思えます。