AUTOSAR の基礎の CanTsyn

AUTOSAR の基礎の CanTsyn

序文

まず最初に、いくつか質問をしたいと思います。

  • 時刻同期が必要な理由を知っていますか?
  • 時刻同期の適用シナリオは何ですか?
  • 現在主流の時刻同期ソリューションは何ですか?
  • CAN 時刻同期のプロトコルはどのように設計されていますか?

今日は、これらの質問を一緒に調べて答えましょう。誰でも簡単に理解できるように、この記事のトピックの概要を以下に示します。

画像-20220819150049183


文章

時刻同期が必要な理由

名前が示すように、時刻同期は、複数の関係者がグローバルで一貫したタイムスタンプを同時に使用できるようにするために使用されます。自動運転の波が強まるにつれ、集中型アーキテクチャは OEM にとってますます一般的な選択肢になりつつあります。

集中型アーキテクチャが選択されているため、アーキテクチャ全体でさまざまなセンサー データが融合されることも意味し、データ融合を完了するための基本的な前提条件は、各センサーによって送信されるデータに対応するタイム スタンプがスタンプされている必要があることです。センサーが使用するタイム スタンプの一貫性を保つには、時刻同期スキームを使用して、各センサーのグローバルな時刻参照が一意であることを確認する必要があります。

時刻同期が必要な理由は明らかであり、適切な時刻同期ソリューションをどのように選択するかは、各 OEM または Tier1 が慎重に検討する必要がある問題でもあります.現在、ADAS 分野での時刻同期は、次のように大別されます。以下の図 1 に示されています。

時刻同期方式の選択

図1 時刻同期方式の比較

したがって、上記のいくつかの一般的な時刻同期スキームの違いに基づいて、実際のアプリケーション シナリオ、精度要件、システム設計などを総合的に分析して、適切な時刻同期スキームを選択する必要があります。

この記事では主に AUTOSAR 時刻同期方式について説明し、CANTsyn 時刻同期方式を例として AUTOSAR 時刻同期プロトコルの全プロセスを紹介します.AUTOSAR のイーサネット時刻同期方式と他の方式についても基本的には同じです. 1 つのインスタンスから学び、類推によって学びます。

Can Tsync プロトコル フレームワーク

最初に、主に次の 2 つの側面を含む Can Tsync のプロトコル スタック フレームワーク全体を紹介します。このプロトコルを使用する前に行わなければならない初期化作業を記述します。

プロトコル ソフトウェア アーキテクチャ

以下の図 2 に示すように、Can 時刻同期ソリューション全体のプロトコル スタック ソフトウェア アーキテクチャを説明します。

画像-20220820102609085

図 2 CAN 時刻同期プロトコル ソフトウェア アーキテクチャ

上の図では、AUTOSAR の時刻同期スキームが、さまざまな伝送メディアに応じて、次の 4 つの時刻同期方法に分割できることがわかります。

  • CAN TimeSync : CAN バスに基づく完全な時刻同期;
  • FR TimeSync : Flexray バスに基づく完全な時刻同期。
  • Eth TimeSync : 車両イーサネットに基づく完全な時刻同期。
  • CDD TimeSync : 他の周辺機器ドライバーに基づく完全な時刻同期;

CAN 時刻同期プロセスは、次のモジュールで構成されています: Can Driver、Canif、Can Tsync、および StbM . 3 つのソフトウェア モジュールはそれぞれの役割を果たし、CAN ベースの時刻同期を完了します. 具体的な分業は次のとおりです:

  • Can Driver : CAN の送受信機能を提供します。

  • Canif : 時刻同期情報を運ぶメッセージの送受信を担当します。

  • Can Tsync : 時刻同期プロトコルの実装を担当します。

  • StbM : さまざまな伝送メディアに基づいて AUTOSAR 時刻同期プロトコルを抽象化し、ソフトウェア システム全体の時刻同期後にグローバル タイム スタンプを提供します。

プロトコルの初期化

Can ベースの時刻同期プロトコルの初期化には、次のプロセスが含まれます。

  • CanTSyn_Init() 関数を実行して、内部変数と内部状態の初期化を完了します。
  • CanTSyn_Init() 関数が実行されず、バージョン番号の取得以外の CanTsync モジュールの他の関数が呼び出されると、Det エラーが報告されます。
  • シーケンス カウンターは 0 に初期化する必要があります。

CAN タイムシンク メッセージ形式

SYNC および FUP メッセージ

以下の図 3 は、SYNC メッセージと FUP メッセージのメッセージ フォーマットを示しています. これら 2 つのタイプのメッセージはペアで存在する必要があり、DLC は 8. 両方のタイプのメッセージは同じ CAN ID を共有します.

時刻同期メッセージのフォーマット

図 3 SYNC および FUP メッセージのフォーマット

オフセット メッセージ

以下の図 4 は、オフセット メッセージの OFS および OFNS メッセージのメッセージ フォーマットを示しています. これら 2 種類のメッセージはペアで存在する必要があり、DLC は 8. 両方のタイプのメッセージは同じ CAN ID を共有します.

オフセット時間同期メッセージ

図4 OFSとOFNSのメッセージフォーマット

タイムマスター

いわゆる「タイム マスター」はマスター クロックを意味しますが、マスター クロックの定義は相対的である可能性があるため、マスター クロックも特定のクロック ドメイン内にある必要があります。

以下の図 5 に示すように、AUTOSAR 時刻同期戦略におけるいくつかのクロックの役割が明確に説明されています。

画像-20220820184109035

図 5 AUTOSAR 時刻同期ノード

上の図から、タイム ドメインには次の 3 つの時刻同期ノードがあることがわかります。

  • Time Master : 同じタイム ドメインでグローバルな時間基準を提供するマスター クロック。
  • タイム ゲートウェイ: 同じタイム ドメインでは、上位クロック ソースのスレーブ クロックであるだけでなく、ゲートウェイ ドメインのマスター クロック ソースでもあります。
  • タイム スレーブ: 同期が必要なスレーブ クロックと同じタイム ドメイン内。

タイム マスターがグローバル タイム リファレンスの所有者である場合、タイム マスターはグローバル タイム マスターと呼ばれます。タイム ゲートウェイは通常、ゲートウェイ ドメイン内の複数のタイム スレーブのマスター クロックとして機能します。

SYNC および FUP メッセージ処理フロー

時刻同期のプロセスは、タイム マスターとタイム スレーブの間で発生します. タイム マスターはグローバル時刻情報を含む SYNC メッセージとフォローアップ メッセージのペアを送信し、タイム スレーブはこれら 2 つのタイプのメッセージを受信して​​処理することにより、タイム マスターとの通信を完了します. 時刻は同期されます. 、そして誰もがこのように時計を合わせます。

同時に、SYNC および FUP メッセージの送信プロセスには細心の注意を払う必要がある多くの詳細があります。そうしないと、時刻同期が無効になる可能性があります。

  • 時刻同期を正常に完了するには、同じタイム ドメインで SYNC メッセージと FUP メッセージがペアで表示される必要があります。

  • タイム マスターの SYNC メッセージが送信された後、CanTsyn_Txconfirmation () の待機がパラメーターCanTSynMasterConfirmationTimeoutで設定された一定の時間を超えた場合、タイム マスターは内部状態を積極的にリセットし、新しい SYNC メッセージの送信を開始する必要があります。 (タイムアウト時間は、SYNC と FUP の間の時間間隔と FUP と SYNC の間の時間間隔の最小値よりも短くなります)。

  • タイム マスターは、パラメータCanTSynGlobalTimeTxPeriodの期間制限に従って、SYNC メッセージの定期的な送信を完了する必要があります。

  • SYNC および FUP シーケンスは、同じタイム ドメイン内であっても中断できません。

  • パラメータCanTSynGlobalTimeTxCrcSecuredを使用して、SYNC および FUP メッセージに CRC 保護を追加する必要があるかどうかを確認します. CRC 保護を追加するかどうかによって、同期メッセージの最初のバイトの値が決まります, 以下の図 6 に示すように:

    画像-20220820192211674

図 6 SYNC/FUP メッセージと CRC の関係
  • SYNC メッセージが送信された後に FUP メッセージをトリガーする時間間隔は、パラメーターCanTSynGlobalTimeTxFollowUpOffsetによって制御されます。

Offset メッセージのメッセージ処理の流れ

オフセット メッセージのメッセージ処理フローは、基本的に上記のフローと同様であり、次のように要約できます。

  • 同じタイム ドメインでは、各オフセット メッセージ シーケンスは OFS メッセージと OFNS メッセージで構成され、ペアで表示される必要があります。

  • タイム マスターの OFS メッセージが送信された後、CanTsyn_Txconfirmation () の待機がパラメーターCanTSynMasterConfirmationTimeoutで設定された一定の時間を超えた場合、タイム マスターは内部状態を積極的にリセットし、新しい OFS メッセージの送信を開始する必要があります。 (タイムアウト期間は、OFS と OFNS の間の時間間隔と OFS と OFNS の間の時間間隔の最小値よりも短くなります)。

  • タイム マスターは、パラメータCanTSynGlobalTimeTxPeriodの期間制限に従って、OFS メッセージの定期的な送信を完了する必要があります。

  • OFS と OFNS のシーケンスは、同じタイム ドメインであっても中断できません。

  • パラメータCanTSynGlobalTimeTxCrcSecuredを使用して、OFS および OFNS メッセージに CRC 保護を追加する必要があるかどうかを確認します. CRC 保護を追加するかどうかは、以下の図 7 に示すように、同期メッセージの最初のバイトの値を決定します:

    画像-20220821001324261

図 7 オフセット メッセージと CRC の関係
  • パラメータCanTSynGlobalTimeTxFollowUpOffsetを使用して、OFS メッセージの送信後に OFNS メッセージをトリガーする時間間隔を制御します。

転送モード

AUTOSAR 時刻同期ソリューションは、標準 API 関数CanTSyn_SetTransmissionMode (Controller、Mode) を使用して、CAN 時刻同期メッセージの送信要求制御を完了できます。

  • Mode == CANTSYN_TX_OFFの場合、対応する物理 CAN チャネルでのすべての時刻同期メッセージ送信要求は破棄されます。
  • Mode == CANTSYN_TX_ONの場合、対応する物理 CAN チャネルでのすべての時間同期メッセージ送信要求を正しく処理できます。

メッセージの組み立てプロセス

1.グローバルタイムの計算

以下の図 8 に示すように、タイム マスターとして SYNC/FUP メッセージを組み立てる完全なプロセスをシーケンス図で明確に見ることができます。

画像-20220821113157258

図 8 SYNC/FUP メッセージ アセンブリ シーケンス図

SYNC Time Baseに基づいている場合、特定の組み立てプロセスは、上の図に従って次の手順に分解できます。

  • SYNC メッセージの送信では、関数 **StbM_GetCurrentTime() を使用してT0 の 2 番目の部分、T0= SyncTimeSec を取得し、同時に関数 StbM_GetCurrentTimeRaw()** を通じて T0raw の元の値を取得します。

  • SYNC メッセージ送信の Txconfirmation を取得する過程で、関数 **StbM_GetCurrentTimeDiff()** を呼び出して T0raw と T0raw の間の時間間隔を取得し、T4 の ns 部分 = T0ns + T0diff を介して送信します。 FUP メッセージ;

  • T4 >= 1 秒の場合、T4 の 2 番目の部分を OVS ビットに書き込み、T4 の ns 部分を SyncTimeNSec に書き込みます。

    上記の手順での SYNC/FUP メッセージの組み立てと送信プロセスを通じて、現在のタイム マスターによって送信されたグローバル タイム リファレンスが T0+T4 であることを知ることができます。

Offset Time Baseに基づいている場合、アセンブリ プロセスを次の図に示します。

  • 関数 StbM_GetOffset() を使用して 2 番目の部分を取得し、OfsTimeSecLsbLo、OfsTimeSecLsbHi、OfsTimeSecMsb に書き込みます。
  • Offset Time Base の ns 部分を OfsTimeNSec に書き込みます。

2.OVS計算

FUP メッセージの送信中にタイム マスターの ns 範囲 (uint32) が存在する場合、オーバーフローした 2 番目の部分を OVS フィールドに入力する必要があります。

3.SGWの計算

StbM モジュールの timeBaseStatus の STBM_SYNC_TO_GATEWAY ビットが設定されていない場合は、SGW を SyncToGTM=0 に設定する必要があります。それ以外の場合は、SyncToSubDomain=1 に設定する必要があります。

4.シーケンスカウンターの計算

各タイム ドメインでは、シーケンス カウンター (SC と呼ばれる) は 0 ~ 15 に従って順次循環する必要があります. SYNC メッセージと OFS メッセージの SC は、メッセージが送信されるたびに 1 だけインクリメントできます. 同時に時間、FUP および OFNS メッセージ内のシーケンス カウンタ SC は、それぞれ SYNC および OFS メッセージと一致し、順番にインクリメントされる必要があります。

5.CRC計算

CRC が時刻同期メッセージ用に設定されている場合、使用される統合 CRC アルゴリズムはCrc_CalculateCRC8H2F () です。CRC アルゴリズムの初期値は 0xFF、CRC 多項式は 0x2F、CRC の最終 XOR 値は 0xFF である必要があります。 CRC の計算 範囲は SYNC/FUP メッセージの Byte2 ~ Byte7 と構成された DataID 値です. DataID 値は SC カウンタに 1 つずつ対応し、DataID 値は DataIDList[SC] によって決定されます.

要約すると、上記のプロセスは次の順序で実行されます。

  • FUP メッセージで OVS を計算します。
  • FUP メッセージで SGW を計算します。
  • SC を計算します。
  • すべてのデータを対応するメッセージの場所にコピーします。
  • CRC を計算します。

タイムスレーブ

同期対象であるタイムスレーブは、SYNC/FUP メッセージを受信するだけでタイムマスターと時刻を同期し、同期された最新のグローバル時刻基準を取得できます。

SYNC および FUP メッセージ処理フロー

タイム マスターから送信された SYNC/FUP メッセージを受信するタイム スレーブでは、時刻同期情報の正確性を確保するために、入力された時刻同期メッセージ情報に対して一連のチェックを実行する必要があります。共通チェックリスト:

  • パラメータCanTSynRxCrcValidated がCRC_VALIDATEDとして設定されている場合0x20 SYNC メッセージのみを受信でき、他のメッセージは無視されます

  • パラメータCanTSynRxCrcValidated がCRC_NOT_VALIDATEDとして構成されている場合0x10 SYNCメッセージのみを受信でき、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_IGNOREDとして設定されている場合0x10または0x20SYNC メッセージを受信でき、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_VALIDATEDとして構成されている場合、CanTsyn モジュールは特定の SC ID 0x28を持つFUP メッセージのみを受信し、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_NOT_VALIDATEDとして構成されている場合、CanTsyn モジュールは特定の SC ID 0x18を持つFUP メッセージのみを受信し、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_IGNOREDとして構成されている場合、CanTsyn モジュールは特定の SC ID 0x28または0x18を持つFUP メッセージのみを受信し他のメッセージは無視されます。

  • タイム スレーブごとに、CANTsyn モジュールはパラメーターCanTSynGlobalTimeFollowUpTimeoutを構成して、SYNC メッセージの後に FUP メッセージを受信するためのタイムアウトしきい値を完了する必要があり、内部状態は新しい SYNC メッセージを受信するためにリセットされます。

  • 完全で有効な SYNC/FUP メッセージが受信されると、関数StbM_BusSetGlobalTime()が呼び出されて、グローバル時間基準の調整が完了します。

Offset メッセージのメッセージ処理の流れ

SYNC/FUP メッセージと同様に、オフセット メッセージの OFS/OFNS メッセージも、タイム スレーブ オブジェクトに対して次の一連のチェックを実行する必要があります。

  • パラメータCanTSynRxCrcValidated がCRC_VALIDATEDとして設定されている場合0x40 OFSメッセージのみを受信でき、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_NOT_VALIDATEDとして設定されている場合0x30 OFSメッセージのみを受信でき、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_IGNOREDとして設定されている場合0x40または0x30OFS メッセージを受信でき、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_VALIDATEDとして構成されている場合、CanTsyn モジュールは特定の SC ID 0x48を持つOFNS メッセージのみを受信し、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_NOT_VALIDATEDとして構成されている場合、CanTsyn モジュールはSC ID が0x38であるOFNS メッセージのみを受信し、他のメッセージは無視されます。

  • パラメータCanTSynRxCrcValidated がCRC_IGNOREDとして構成されている場合、CanTsyn モジュールは特定の SC ID 0x48または0x38を持つOFNS メッセージのみを受信し他のメッセージは無視されます。

  • タイム スレーブごとに、CANTsyn モジュールはパラメーターCanTSynGlobalTimeFollowUpTimeoutを構成して、SYNC メッセージの後に FUP メッセージを受信するためのタイムアウトしきい値を完了する必要があり、内部状態は新しい OFS メッセージを受信するためにリセットされます。

  • 完全で有効な OFS/OFNS メッセージが受信されると、関数StbM_SetOffset()が呼び出されて、グローバル時間基準の調整が完了します。

パケット分析プロセス

1.グローバルタイムの計算

以下の図 9 に示すように、タイム スレーブがどのように SYNC/FUP メッセージを受信し、最終的にグローバル時刻基準同期のプロセスを完了するかを明確に示しています。

画像-20220821153405502

図 9 SYNC/FUP メッセージ受信タイミング図

SYNC Time Baseに基づいている場合、特定の組み立てプロセスは、上の図に従って次の手順に分解できます。

  • SYNC メッセージを受信した後、T0 時刻が取得され、関数 **StbM_GetCurrentTimeRaw()** を呼び出して現在の T2raw が取得されます。
  • FUP メッセージを受信した後、 FUP メッセージからT4=(OVS+SyncTimeNSec)を取得し、T2raw に基づいて **StbM_GetCurrentTimeDiff()** を呼び出して、2 つの時間差を取得できます T3diff = (T3raw-T2raw);
  • タイム スレーブ同期後のグローバル時間基準は(T3raw - T2raw) + (T0 + T4)です。

Offset Time Baseに基づいている場合、特定のアセンブリ プロセスは、上の図に従って次の手順に分解できます。

  • オフセット タイム ベースの 2 番目の部分を OfsTimeSecLsbLo、OfsTimeSecLsbHi*、*OfsTimeSecMsb の 3 つの領域に同期させます。

  • Offset Time base の ns 部分を OfsTimeNSec に同期します。

2.OVSの考慮事項

タイム スレーブ オブジェクトの場合、OVS の 2 番目の部分は FUP メッセージで考慮され、最終的にグローバル時刻同期基準の計算プロセスに参加する必要があります。

3.SC検証

タイム スレーブ オブジェクトの場合、シーケンス カウンター (SC) は、SYNC/FUP 時刻同期メッセージ シーケンスを正しく受信する前に、まず次のチェックを完了する必要があります。

  • 同じタイム ドメイン内の同じ SYNC/FUP メッセージ シーケンスの SC は常に一貫している必要があります. そうでない場合, 以前に受信した SYNC メッセージは破棄され, 受信した FUP メッセージも破棄されます.
  • 同じタイム ドメイン内の同じ OFS/OFNS メッセージ シーケンスの SC は常に一致する必要があります. そうでない場合, 以前に受信した SYNC メッセージは破棄され, 受信した FUP メッセージも破棄されます.
  • 前後の 2 つの SYNC/OFS メッセージの SC 間の間隔は、パラメーター構成CanTSynGlobalTimeSequenceCounterJumpWidthの値を超えることはできず、0 に設定されている場合は許可されません。
  • タイム スレーブとタイム マスター間の非同期開始により、タイム スレーブ オブジェクトの場合、最初に受信した SYNC/OFS メッセージの SC 値が正常に受信および処理されることを保証する必要はありません。

4.CRC検証

CRC が時刻同期メッセージ用に設定されている場合、使用される統合 CRC アルゴリズムはCrc_CalculateCRC8H2F () です。CRC アルゴリズムの初期値は 0xFF、CRC 多項式は 0x2F、CRC の最終 XOR 値は 0xFF である必要があります。 CRC の計算 範囲は SYNC/FUP メッセージの Byte2 ~ Byte7 と構成された DataID 値です. DataID 値は SC カウンタに 1 つずつ対応し、DataID 値は DataIDList[SC] によって決定されます.

タイム マスターとタイム スレーブの DataIDList は常に一致している必要があることに注意してください。そうしないと、CRC 計算結果が一致せず、タイム スレーブ オブジェクトがメッセージを正常に受信および処理できなくなります。

要約すると、時刻同期メッセージの解析プロセスは、一般に次の基本的な手順に分けることができます。

  • CanTSynRxCrcValidated パラメータに従って、対応する SYNC/FUP メッセージを受信するかどうかを決定します。
  • SC は、対応する期待値と一致する必要があります。
  • タイム ドメインは、内部で設定されたタイム ドメインと一致する必要があります。
  • FUP/OFNS メッセージの ns 部分は、指定された範囲 (uint32) を超えてはなりません。
  • CRC 計算結果は一貫している必要があります。
  • 最後に、最新のグローバル同期時刻基準が計算されます。

タイム マスターとタイム スレーブの DataIDList は常に一致している必要があることに注意してください。そうしないと、CRC 計算の結果が一致せず、タイム スレーブ オブジェクトによってメッセージが正常に受信および処理されません。**

要約すると、時刻同期メッセージの解析プロセスは、一般に次の基本的な手順に分けることができます。

  • CanTSynRxCrcValidated パラメータに従って、対応する SYNC/FUP メッセージを受信するかどうかを決定します。
  • SC は、対応する期待値と一致する必要があります。
  • タイム ドメインは、内部で設定されたタイム ドメインと一致する必要があります。
  • FUP/OFNS メッセージの ns 部分は、指定された範囲 (uint32) を超えてはなりません。
  • CRC 計算結果は一貫している必要があります。
  • 最後に、最新のグローバル同期時刻基準が計算されます。

よりエキサイティングなコンテンツについては、公式アカウント「ADASとECUの私の見解」に注目してください!
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/wto9109/article/details/126475417