NXPメンバーの皆様へ
私はT32G-VNP-RDB3ボード上のSJA1110スイッチの設定に取り組んでおり、PTPやQbvなどのTSN機能を有効にするための作業を行っています。
スイッチの設定、更新されたsja1110_uc.binファイルを生成し、S32GボードにデプロイするためにS32 Design StudioのSJA1110 SDKを使っています。
ほとんどの Qbv パラメータの設定を理解し、テストすることはできましたが、QBV 管理パラメータ テーブル上の ADMINBASETIME[31:0] と ADMINBASETIME[63:32] の正しい設定を把握することができませんでした。
um549820-UM11107 ソフトウェアユーザーマニュアルのドキュメントによると、SJA1110(2.0))ADMINBASETIMEは次のように説明されます。
基本時間に使用される管理値を定義します(PTP/free で表されます)。
実行中の時間スケールは、次の時点を計算する際の参照として使用されます。
再構成されたゲートサイクルが開始されます (CycleStartTime)。
しかし、実際のプロジェクトでこの値を計算する方法については、何のヒントも得られない。さらに、 SJA1110拡張構成のプレゼンテーションにあるSJA1110 Qbvの例では、このパラメータに0(直接開始)を使用しています。
一つの例を考えてみましょう。
QbvはSJA1110スイッチのポート3用に設定されており、速度は1000Mbps、粒度は200ナ秒です。
1サイクルは500μsで、3つのセグメントから構成されます。
しかし同じネットワーク内には、500μsのQbvサイクルで異なるセグメント間隔を持つ別のTSNスイッチが存在します。
TSNスイッチ間で同期し、gPTPの時間エポックと一致させるために、ADMINBASETIMEをどのように計算すればよいのでしょうか?
ご支援ありがとうございます!
こんにちは、 @GuilhermeS32G さん、
SJA1110の静的構成を作成する際は、ADMINBASETIME = 0 に設定することをお勧めします。
固定のADMINBASETIMEを有効にするためだけに、起動のたびにgPTPの時刻をリセットすることはお勧めしません。
よろしくお願いいたします。
パベル
こんにちは、 @PavelL さん。
改めてサポートありがとうございます。
私の理解では、このADMINBASETIME設定は理想的にはランタイム中にプログラム的に設定し、Qbvスケジュールが将来的に行われるようにすべきです。
私の場合、SJA1110スイッチがSDL Bootで起動しているので、SJA1110 SDK for S32DSを使ってファームウェアをプログラムしています。この場合、QBVの管理パラメータテーブルでADMINBASETIMEを設定する必要があります。その後、新しいファームウェアファイルを構築します。S32G-VNP-RDB3ボードに展開し、新しい構成が適用されるようにボードを再起動してください。
最初のADMINBASETIMEは将来的に使う予定ですが、その後の実行でファームウェアを更新しなければ、あなたが言及したように常にアクティブな開始時間を調整しなければなりません。
この場合、ADMINBASETIMEを単純に0にした方が良いのではないでしょうか?そうでなければ、起動ごとにgPTPの時間をリセットする方が良いでしょう。
よろしくお願いいたします。
ギレルメ
こんにちは、 @GuilhermeS32G さん、
ADMINBASETIMEは、Qbvスケジュールの絶対的な時間参照/フェーズ参照として理解されるべきです。これは、繰り返されるQbvサイクルの開始を同期された時間領域に合わせるために使用されます。これはポート速度から計算されるものではなく、TRIGGER_TIMEの粒度に基づいて計算されるものでもありません。
マルチスイッチTSNシステムでは、gPTP / IEEE 802.1ASは共通の同期時間ベースを提供しますが、Qbvスケジュールを自動的に設定するわけではありません。QBVの設定(ADMINBASETIMEを含む)は、TSN マネジメントスタック/CNCまたはホストプロセッサ上で動作するアプリケーション固有のカスタムソフトウェアによってプログラムされなければなりません。IEEE 802.1Qccは、CNCがTSN構成を計算しネットワーク機器に配布する集中型TSN構成モデルを記述しています。
https://www.ieee802.org/1/files/public/docs2017/cc-Kehrer-StartOfCycleReference-0117-v01.pdf
一般的な手順は次のようになります。
1. gPTP / 802.1ASを開始し、関連するすべてのTSNデバイスが同期されるまで待ちます。
2. デバイス/PTPタイムドメインから現在の同期時刻を読み取ります。
3. 将来の基準時間を選択する:ADMINBASETIME = current_gPTP_time + safety_margin
セーフティマージンは、選択した基準時間に達する前にすべてのスイッチやポートに設定を書き込める十分な大きさであるべきです。
4. 同じQbvサイクルフェーズを共有するすべてのスイッチ/ポートに対して、同じADMINBASETIMEと同じサイクルタイムをプログラムすること。
5. 必要なスケジュールに従って、ポートごとのGCLエントリをプログラムします。
gPTP時間エポックへのアライメントが必要な場合は、選択した基準時刻をサイクル境界にもアライメントさせることができます。例:
ADMINBASETIME = ceil((current_gPTP_time + safety_margin) / cycle_time) * cycle_time
これはLinux taprioで使われている一般的な考え方と同じです。ベースタイムはスケジュールの開始時刻を定義し、基準時刻がすでに過去にある場合、アクティブ開始時間は整数サイクル時間を足して、得られる開始時刻がFUTUREになるまで導出されます。
https://deepwiki.com/nxp-qoriq/tsntool/5.2-device-configuration
SJA1110の場合、最終的なADMINBASETIME値は、SJA1110 Qbv構成で想定される時間形式に従ってエンコードされ、その後、以下のように分割されます。
ADMINBASETIME[31:0] = 下位32ビット
ADMINBASETIME[63:32] = 上位32ビット
まとめると、gPTPは共通時間を提供します。別のソフトウェア/設定レイヤーは、その時間に対してQbv ADMINBASETIMEを選択し、プログラムしなければなりません。これはTSNマネジメントスタックやCNCによって行われる場合もあれば、よりシンプルな組み込みシステムにおけるカスタムアプリケーションコードによって行われます。
よろしくお願いいたします。
パベル