AUTOSAR通信-CanTpおよびCanIfモジュール



Autosar Communication Cantp



CanTp

CANインターフェースモジュール(以下「CanIf」と呼びます)は、下部のCANドライバー(CanDrv)、CANトランシーバー(CanTrcv)と上部の通信サービス層(CanSm、CanNm)、CAN伝送プロトコル(CanTp)、およびPDUの間に配置されます。ルーター(PduR)。これは、上位通信層のCANドライバーサービスインターフェイスを表します。



CanTpは、図1に示すように、PduRとCANIfモジュールの間のモジュールです。CANTpモジュールの主な機能は、I-PDUの長さが8バイトを超えないように、CANI-PDUをセグメント化して再構成することです。 CAN FDの場合、CANI-PDUは64バイト以下です。

PduRモジュールは、AUTOSARCOMとDCMのI-PDUを異なる通信プロトコルに展開します。 I-PDU識別子を介してさまざまなネットワークシステムタイプ(CAN、LIN、FlexRayなど)にルーティングします。 PduRは、転送プロトコルを使用する必要があるかどうかも決定します。最後に、レート変換がない場合、ゲートウェイ機能が実装されます。



CanIfは、コントローラーチップが内部に存在するか外部に存在するかに関係なく、CANバスチャネルにアクセスするための同等のメカニズムを提供します。 CANコントローラーの位置から、ECUのハードウェアレイアウトとCANドライバーの数を抽出します。 CanTpは送信プロトコルフレーム(SF、FF、CF、FC PDU)のみを処理するため、N-PDU IDに従って、CANIfはI-PDUをCanTpまたはPduRに転送する必要があります。これも図1に明確に示されています。 AUTOSAR BSWアーキテクチャであるCanTpは、次のサービスを提供します。

  • 送信方向のデータセグメンテーション
  • 受信方向に応じてデータを再構成します
  • データフローの制御
  • 間違ったセグメンテーション会議を検出します。
  • 転送がキャンセルされました
  • キャンセルを受け入れる

AUTOSARは、既存の規格に基づいてBSWモジュール仕様を作成することを決定したため、AUTOSAR CANトランスポート層仕様は、自動車分野で最も一般的に使用されている国際規格ISO15765に基づいています。 ISO 15765は、2つの適用可能なCANトランスポート層仕様について説明しています。OEM拡張診断:ISO 15765-2が使用されますOBD診断:ISO15765-4が使用されます。

CAN伝送プロトコルは主に車両診断システムで使用されますが、伝送層プロトコルを必要とする他のCANベースのシステムのニーズを処理するためにも開発されました。



CanTpモジュールは、セグメンテーション、フロー制御送信、およびメッセージ再構成のためのサービスを提供します。その主な目的は、CANフレームに適している場合と適していない場合があるメッセージを送受信することです。 CANフレームに適さないメッセージは、CANフレームで送信できるように、複数の部分に分割されます。

接続と相互関係

AUTOSARアーキテクチャでは、送信プロトコルを使用して診断(OBDやUDSプロトコルなど)とAUTOSARCOMI-PDUを送信します。したがって、CanTpモジュールは、同時に複数の接続、つまり複数のセグメント化された並列セッションを処理できます。同時接続の最大数は、静的構成によって実現されます。この構成は、生成されたコードの複雑さとリソース消費(CPU、ROM、RAM)に重要な影響を及ぼします。これは、N-PCIデータの処理に使用される変数であるRxおよびTxステートマシンなどのリソースを同時アクセス用に予約する必要があるためです。 、など。

I-PDUを同時に受信または送信するために、各N-SDU識別子は構成されたCanTp「接続チャネル」を介して内部的にルーティングされます。 「接続チャネル」には外部からアクセスできないため、「接続チャネル」番号、タイムアウト、アドレス形式など、N-SDUの送信に必要なすべての情報がN-SDU識別子にリンクされます。メタデータ構成では、N-SDUは、N_AIを定義する特定の接続として、またはN_TA、N_SA、およびN_AEが実行時に異なり、N_TAtype、MType、およびアドレス形式が静的に定義される一般的な接続として使用できます。 AUTOSAR通信スタックは、定期モードとイベントトリガーモードをサポートしています。したがって、各通信層は、異なるメカニズムを介して下位層から情報を受信し、その情報を上位層に伝播することができます。

CANTPレイヤーの場合、イベントトリガーモードのみがサポートされます。

通信スタックを最適化するために、AUTOSARはCANTPのバッファリング容量を制限します。したがって、CanTpはN-SDUペイロードを上位層(1:1 TPルーティングの場合はDCM、COM、またはPDUR)からCANドライバーに直接コピーします。その逆も同様です。データの整合性を確保するために、上位層は次のルールに従います。

  • 送信中、N-SDUデータのペイロードは、要求の送信から送信確認の受信まで変更されません。
  • 受信時は、受信開始から受信命令を受信するまで、N-SDUデータアクセスをロックします。

実行時に、CAN送信モジュールは送信接続を管理するために必要なすべての情報を持っている必要があります。したがって、次のプロパティを静的に構成する必要があります。

  • CANN-SDUの数
  • 各CANN-SDUの一意の識別子
  • 各CANN-SDUの通信方向(TxまたはRx)
  • 各接続のアドレス指定形式(通常、拡張、混合11ビット、通常の固定または混合29ビット)、さらに、メタデータ付きのN-SDUを使用する一般的な接続の場合、静的アドレス指定は省略できます。情報。
    • 通常:なし
    • 拡張:N_TA
    • 混合11ビット:N_AE
    • 通常固定:N_TA、N_SA
    • 混合29ビット:N_TA、N_SA、N_AE
  • 各接続のアドレス形式(通常、拡張、または混合)。拡張アドレス指定形式の場合はN_TA値、混合アドレス指定形式の場合はN_AE値です。

関連するCANL-SDU識別子、各CAN N-SDU識別子、必要に応じて(マルチフレーム分割セッション)、CAN L-SDU識別子は、CAN FCN-PDUクラシックCANフレームおよびCANFDフレームの送信に使用されます。

フレームタイプ

CanTpは、ネットワーク層データを分析するための4つのフレームタイプを提供します。それらは、シングルフレーム(サインフレーム)、ファーストフレーム(フリストフレーム)、連続フレーム(連続フレーム)、およびフロー制御フレーム(フロー制御)です。

上位レベルに提供されるサービス

CANトランスポート層は、PDURのコールバック機能を使用して、送信データのコピー、送信の確認、受信の開始、受信データのコピー、および受信メッセージの表示を行います。主な機能は次のとおりです。

PduR_CanTpRxIndication()

PduR_CanTpStartOfReception()

PduR_CanTpCopyRxData()

PduR_CanTpCopyTxData()

PduR_CanTpTxConfirmation()

CanTpモジュールのサービスインターフェイスは、主に2つのカテゴリに分類されます。

初期化とシャットダウン

コミュニケーションサービス

CANTpモジュールには、次の2つの内部状態があります。 CANTP_OFFCANTP_ON

図6に示すように、CANTPは、電源をオフにした後、CANTP_OFF状態になります。この状態で、CANTPの構成を更新できます。 CANTpがCanTp_Init()によって正常に初期化された後、状態はCANTP_ONに切り替わります。 CANTP_ON状態でのみ、CANI-PDUをセグメント化して再アセンブルできます。 CanTp_Init()は、モジュールのすべてのグローバル変数を初期化し、すべての送信プロトコル接続をCANTP_ONのサブ状態に設定します。このサブ状態(状態はCATNP_RX_WAITおよびCANTP_TX_WAIT)では、セグメント送信とセグメント受信の両方が進行中です。

CanTpモジュールの開発失敗検出が有効になっている場合、CanTp_Init関数を呼び出す前に、PDPRまたはCANインターフェイスレイヤーが関数(CanTp_GetVersionInfoを除く)を使用しようとすると、CanTpモジュールはエラー(CANTP_E_UNINIT)を発生させます。グローバルステータスがCANTP_ONの場合、CanTpモジュールが呼び出され、CanTp_Initはデフォルトステータスに戻ります(ステータス= CANTP_ONですが、送受信は進行中です)。 CanTpモジュールがグローバル状態CANTP_ONのときにCanTp_Initが呼び出されると、CanTpモジュールは現在のすべての接続を解放します。関数CanTp_Shutdownは、CanTpモジュールを正常に停止します。

上位レベルに提供されるサービス

CANトランスポート層は、PDURのコールバック機能を使用して、送信データのコピー、送信の確認、受信の開始、受信データのコピー、および受信メッセージの表示を行います。主な機能は次のとおりです。

PduR_CanTpRxIndication()

PduR_CanTpStartOfReception()

PduR_CanTpCopyRxData()

PduR_CanTpCopyTxData()

PduR_CanTpTxConfirmation()

CanTpモジュールのサービスインターフェイスは、主に2つのカテゴリに分類されます。

初期化とシャットダウン

コミュニケーションサービス

CANTpモジュールには、次の2つの内部状態があります。 CANTP_OFFCANTP_ON

図6に示すように、CANTPは、電源をオフにした後、CANTP_OFF状態になります。この状態で、CANTPの構成を更新できます。 CANTpがCanTp_Init()によって正常に初期化された後、状態はCANTP_ONに切り替わります。 CANTP_ON状態でのみ、CANI-PDUをセグメント化して再アセンブルできます。 CanTp_Init()は、モジュールのすべてのグローバル変数を初期化し、すべての送信プロトコル接続をCANTP_ONのサブ状態に設定します。このサブ状態(状態はCATNP_RX_WAITおよびCANTP_TX_WAIT)では、セグメント送信とセグメント受信の両方が進行中です。

CanTpモジュールの開発失敗検出が有効になっている場合、CanTp_Init関数を呼び出す前に、PDPRまたはCANインターフェイスレイヤーが関数(CanTp_GetVersionInfoを除く)を使用しようとすると、CanTpモジュールはエラー(CANTP_E_UNINIT)を発生させます。グローバルステータスがCANTP_ONの場合、CanTpモジュールが呼び出され、CanTp_Initはデフォルトステータスに戻ります(ステータス= CANTP_ONですが、送受信は進行中です)。 CanTpモジュールがグローバル状態CANTP_ONのときにCanTp_Initが呼び出されると、CanTpモジュールは現在のすべての接続を解放します。関数CanTp_Shutdownは、CanTpモジュールを正常に停止します。

送信操作cantp_transmission()により、上位層はCAN送信プロトコル(セグメンテーション、拡張アドレス形式など)を使用してデータ送信を要求できます。関数cantp_transmission()は非同期です。送信要求を受信した後、N-SDU送信が完了した場合(成功または失敗)、CanTpモジュールは上位層に通知します。

もちろん、CANTPを使用すると、上位層で進行中の送信をキャンセルできます。たとえば、CANTPは、他の優先度の高い診断プロトコルを受信したために、診断の送信をキャンセルできます。この機能は、静的構成パラメーターCanTpTcによってアクティブ化されます。キャンセルの送信は、cantp_canceltransmission()関数を呼び出すことによってトリガーされます。サービスcantp_canceltransmission()を呼び出した後、接続での送信は一時停止されます。 PduR_CanTpTxConfirmation()関数がE_NOT_OK値にある場合、送信はキャンセルされることに注意してください。

下位層に提供されるサービス

CANトランスポート層は、CANインターフェイスの次のサービスを使用してCANN-PDUを送信します。

CanIf_Transmit()

通信スタックのAUTOSAR仕様によれば、CANトランスポート層はCANインターフェースに次の2つのコールバック関数を提供します:CanTp_TxConfirmation()およびCanTp_RxIndication()。

確認を送信する

CanIfモジュールは、送信確認関数を呼び出して、CanTpによって要求されたCANフレーム送信が正常に実行されたかどうかをCAN送信層に通知します。 L-PDU IDは、対応する送信を識別するために呼び出しに関連付けられます。最大時間(N_Asに等しい)が送信確認を受信しなかった場合、CanTpモジュールは対応するセッションを終了します。 TxConfirmationを受信する前は、成功または失敗に関係なく、N-PDUは他の同時セッションではまだ使用できません。確認呼び出しの場合、CanTpモジュールは関数CanTp_TxConfirmation()を提供する必要があります。 CanTp_TxConfirmation()が呼び出されて結果がE_NOT_OKになると、CanTpは対応するセッションを終了します。

指示を受ける

CanIfモジュールは、受信指示関数を呼び出して、新しいCAN N-PDUフレーム(つまり、送信プロトコルフレーム)を受信したことをCanTpモジュールに通知します。受信命令は、CanIf構成に従って割り込みサービス(ISR)で実行できます。命令を受け取るために、CanTpモジュールはcantp_rxspecification()を提供する必要があります。

CANトランスポート層の内部操作は、「単一のCANフレームまたは複数のCANフレームでメッセージを送信する」という目標を実装するための基本的なメカニズムを提供します。 CANトランスポート層の動作全体はイベントによってトリガーされるため、CanTpはPDURN-SDUからの送信を直接処理できます。 SFまたはFFN-PDUを受信すると、CanTpモジュールはPduR_CanTpStartOfReception関数を使用して、PDURを受信するように上位層に通知します。上位層は、N-SDUを受信するためにバッファを予約してロックします。 CanTpは、PduR_CanTpStartOfReception()のパラメーターTpSduInfoPtrを使用して、PduRにFF / SFコンテンツを提供します。受信データリンク層のデータ長(RX_DL)は、CANフレームPDU(CAN_DL)の最初のペイロード長から導出されます。具体的には次のとおりです。

  • 8バイト以下のCAN_DL値の場合、RX_DL値は8である必要があります。
  • 8バイトを超えるCAN_DL値の場合、RX_DL値はCAN_DL値と等しくなります。

総括する: CanTpは、AUTOSAR通信スタックのネットワーク分析を担当するモジュールです。 CANTPは、上から下に、CAN I-PDUを下から上にセグメント化および再アセンブルし、CanIf層によって送信され、I-PDUデータに解析され、PDURモジュールに渡されるN-PDUデータを受信する役割を果たします。 CanTpは、送信プロトコルフレーム、つまり単一フレーム、最初のフレーム、連続フレーム、およびフロー制御フレームのみを処理します。同時に、CANTPレイヤーはイベントトリガーモードのみをサポートします。

ペンナイフ

CanIfは、CANコントローラーやCANトランシーバーなどのさまざまなCANハードウェアを管理するための独自のインターフェースを提供します。同時に、物理CANチャネルに関連するCANステータスマネージャーモジュール(CanSm)は、基盤となる複数の内部および外部CANコントローラーまたはCANトランシーバーを制御できます。 CanIfは、CANハードウェアとは関係のないタスクで構成され、ECUCAN通信ドライバーに属します。 CanIfは、PduRおよびAUTOSAR COMスタックの上位通信モジュールの制御フローおよびデータフローの要件を満たしています。要求処理の送信、確認の送信、表示の受信、エラー通知、およびCANコントローラーの開始/停止によるウェイクアップまたはネットワークへの参加。そのデータ処理および通知APIはCANL-SDUに基づいており、制御およびモード処理用のAPIはCANコントローラーのビューを提供します。

リクエストを送信すると、CanIfは対応するパラメータを使用してL-PDU送信を完了し、対応するCanDrvを介してCANL-PDUをCANコントローラに転送します。受信側で、CanIfは受信したI-PDUをI-SDUとして上位モジュールに配布します。受信側のL-SDUと上位層の間の割り当ては静的に構成されます。送信が確認されると、CanIfは送信成功のメッセージを上位層に送信する責任があります。 CanIfは、CANネットワークの制御と監視のためにCANドライバー通信とCANトランシーバードライバーサービスへの抽象的なアクセスを提供します。 CANインターフェースはCAN状態マネージャーの状態を一番下のCANドライバーに転送し、上のCANインターフェースモジュールはCANドライバーまたはCANトランシーバードライバーを対応するNMモジュールに転送します。

上層

AUTOSAR BSWレイヤードアーキテクチャでは、CanIfの上位レイヤーは、PduR、CanNm、CanTp、CanSm、EcuM、または複雑なドライブモジュールCDD、ユニバーサルキャリブレーションプロトコルモジュールXCP、グローバル時刻同期モジュールCanTSyn、J1939トランスポートレイヤーモジュールJ1939Tp、およびJ1939ネットワークです。管理モジュールJ1939Nm。 CanIfが使用するAPIは、CAN関連のデータをターゲットの上位層に送信する通知サービスで構成されています。これらのサービスの呼び出しパラメーターは、CanDrvのバッファー情報を指すか、CANハードウェアを直接指します。さらに、CanIfは、バスミラーリングモジュールの呼び出しをサポートして、受信フレームと送信フレームのコンテンツを報告します。 EcuMはCanIfを初期化します。

下位レベル

CanIfの下位モジュールは、主にCANドライバーCanDrvです。 AUTOSAR BSW構造におけるCanIfの位置により、CanDrvと密接な関係があります。 CanDrvはCANコントローラーへのハードウェア抽象アクセスのみを提供しますが、CanDrvはCANコントローラーのイベントを検出して処理し、これらのイベントをCanIfに通知します。 CanIfは、CanSmの操作モード要求を対応する基盤となるCANコントローラーに渡します。

CanDrvは、標準化されたL-PDUを提供して、CanIfのハードウェアの独立性を確保します。この標準化されたL-PDUへのポインタは、CANハードウェアに依存する一時バッファまたはCanDrvを指します。 CanDrvによって呼び出されるコールバックサービスは、CanIfで宣言され、実装されます。 CanIfによって呼び出されるコールバックサービスが宣言され、PduR、CanNm、CanTpなどの対応する上位の通信サービスレイヤーに配置されます。構成されているCANコントローラーの数は、必ずしも使用されているCANトランシーバーの数ではありません。複数の異なるタイプのCANコントローラーが同じCANネットワーク上で実行されている場合、1つのCANトランシーバーで十分ですが、CANコントローラーデバイスのタイプに応じて、1つまたは2つの異なるCanDrvが必要です。 2番目に利用可能な低レベルCANデバイスドライバーは、CANトランシーバーCanTrcvです。各CanTrcvは、CANトランシーバーの動作モードを制御します。 CanIfは、基礎となるいくつかのCanTrcvAPIのみを一意のAPIにマップします。したがって、CanSmは対応するCANトランシーバーモードの変換をトリガーできます。 CanTrcvによって制御される関数は、CanIfでは実行されません。 CanIfは、基盤となるCanTrcvの次のすべてのサービスを一意のインターフェイスにマップします。

  • 基盤となる各CANトランシーバーデバイスの動作モードを管理するための唯一のCanTrcvモード要求および読み取りサービス
  • CANトランシーバーの読み取りサービス、ウェイクアップ理由のサポート
  • モード要求サービスは、ウェイクアップイベント状態(CanIf_SetTrcvMode)によって使用される各CANトランシーバーを有効化、無効化、およびクリアします。