Open20

CAN通信、診断

ユウタユウタ

CANに関連するモジュールのAUTOSARアーキテクチャ、関係、送受信処理の流れ

AUTOSARアーキテクチャにおけるCAN関連モジュール

AUTOSARアーキテクチャにおいて、CAN通信は複数のモジュールによって階層的に管理されています。

  • アプリケーション層: 車両制御などのアプリケーションが存在する層です。アプリケーションはRTE (Runtime Environment) を介してCAN通信を行います。
  • RTE (Runtime Environment): アプリケーションとBSW (Basic Software) 間の通信を仲介します。
  • サービス層:
    • COM (Communication): アプリケーションからの送信データ (DataElement) を Signal に変換し、I-PDU (Interaction Layer Protocol Data Unit) にまとめます。受信した I-PDUSignal に分解し、 DataElement に変換してアプリケーションに渡します。Signal レベルでの通信制御(例:周期送信、イベントトリガ送信)や、データ変換(例:バイトオーダー変換、符号拡張)などを担当します。
    • DCM (Diagnostic Communication Manager): 診断通信を管理します。PDUR を利用して診断メッセージの送受信を行います。 診断サービスの実装、診断データの管理、エラー処理などを担当します。
  • ECU抽象化層:
    • PDUR (PDU Router): COMCanTpDcm など、複数のモジュールからの I-PDU をルーティングします。送信元モジュールから受信した I-PDU を、設定されたルーティングパスに従って適切な送信先モジュールに転送します。異なるバス間での I-PDU の転送 (ゲートウェイ機能) も行います。
    • CanIf (CAN Interface): PDUR から受信した I-PDUL-SDU (Logical Link Control Sublayer Protocol Data Unit) に変換し、 L-PDU (Link Layer Protocol Data Unit) に格納して CanDrv に送信します。CanDrv から受信した L-PDU から L-SDU を抽出し、 I-PDU に変換して PDUR に渡します。受信 L-PDU のフィルタリング機能を提供します。CanSM と連携し、 CAN Controller の状態 (SLEEP, STANDBY, NORMAL) を制御します。CanTrcv と連携し、CANトランシーバー の状態 (NORMAL, STANDBY, SLEEP) を制御します。
    • CanTp (CAN Transport Layer): CanIf より大きなデータを送受信するためのプロトコルを提供します。Segmentation/Reassembly 機能により、大きな I-PDU を複数の L-PDU に分割して送信、または複数の L-PDU から I-PDU を再構築します。フロー制御、エラー処理などの機能も提供します。
    • CanNm (CAN Network Management): ネットワークのノードの状態を管理します。ノードの休止や復帰を制御します。
    • CanSM (CAN State Manager): CANネットワーク の状態を管理します。CanIf と連携して CAN Controller の状態遷移を制御します。ネットワークの状態変化を上位層に通知します。
  • マイクロコントローラ抽象化層:
    • CanDrv (CAN Driver): CAN Controller のハードウェアを直接制御します。CanIf から受信した L-PDUCAN BUS に送信します。CAN BUS から受信した L-PDUCanIf に渡します。
    • CanTrcv (CAN Transceiver Driver): CANトランシーバー のハードウェアを制御します。CAN ControllerCAN BUS 間の通信を可能にします。トランシーバーの状態 (NORMAL, STANDBY, SLEEP) を制御します。Wakeup イベントの検出、通知を行います。

送受信処理の流れ

送信処理

  1. アプリケーションが送信データ (DataElement) を RTE に渡します。
  2. RTECOMDataElement を渡します。
  3. COMDataElementSignal に変換し、 I-PDU にまとめます。
  4. COMCom_TriggerTransmit() API を使用して I-PDUPDUR に渡します。
  5. PDUR はルーティングパスに従って I-PDUCanIf に転送します。
  6. CanIfI-PDUL-SDU に変換し、 L-PDU に格納して CanIf_Transmit() API を使用して CanDrv に渡します。
  7. CanDrvL-PDUCanTrcv に渡します。
  8. CanTrcvL-PDUCAN BUS に送信します。
  9. 送信が完了すると、 CanIf_TxConfirmation() API 経由で CanIf に通知され、 CanIfPduR_CanIfTxConfirmation() API 経由で PDUR に通知し、最終的に Com_TxConfirmation() API 経由で COM に通知されます。

受信処理

  1. CAN BUS 上に L-PDU が送信されます。
  2. CanTrcvL-PDU を受信し、 CanDrv に渡します。
  3. CanDrvL-PDUCanIf に渡します。
  4. CanIfL-PDU から L-SDU を抽出し、 I-PDU に変換して CanIf_RxIndication() API を使用して PDUR に渡します。
  5. PDUR はルーティングパスに従って I-PDUCOM に転送します。
  6. COMI-PDUSignal に分解し、 DataElement に変換して RTE に渡します。
  7. RTEDataElement をアプリケーションに渡します。

DataElement, Signal, I-PDU, L-SDU, L-PDU の使われ方

  • DataElement: アプリケーションが扱うデータの最小単位です。
  • Signal: DataElementCAN で送受信するために、ビット単位で定義されたデータです。
  • I-PDU: Signal を複数まとめたもので、 COM モジュールが扱うデータ単位です。
  • L-SDU: I-PDUCanIf で送受信するために、 L-PDU に格納されるデータです。
  • L-PDU: CAN BUS 上で送受信されるデータの単位で、 CAN ID, DLC (Data Length Code), データ などを含みます。

API名とその機能

API名 機能
Com_TriggerTransmit() COMモジュールからPDURモジュールへI-PDUを送信する
Com_TxConfirmation() I-PDU送信完了の通知をCOMモジュールが受信する
CanIf_Transmit() CanIfモジュールからCanDrvモジュールへL-PDUを送信する
CanIf_RxIndication() CanDrvモジュールからCanIfモジュールへL-PDU受信を通知する
PduR_CanIfTxConfirmation() CanIfモジュールからPDURモジュールへI-PDU送信完了を通知する
PduR_CanIfRxIndication() CanIfモジュールからPDURモジュールへI-PDU受信を通知する

補足

  • 上記の説明は、提供されたソースから読み取れる情報に基づいて記述したものであり、実際にはさらに多くのモジュールや複雑な関係が存在する可能性があります。
  • ソースの中には、特定のモジュール(例: Dcm)の詳細な機能に関する記述も含まれていますが、ここでは全体的なアーキテクチャとデータフローの説明に焦点を当てています。
ユウタユウタ

CAN 送信シーケンス図

シーケンス図の説明

処理種別 モジュール 処理 API 入力 出力
送信処理(変換) アプリケーション層 DataElement を RTE に書き込む Rte_Write_<DataElement名>() DataElement DataElement
送信処理(変換) RTE Signal を COM モジュールに送信する Com_SendSignal() DataElement Signal
送信処理(変換) COM Signal を I-PDU に格納し、I-PDU を PDUR モジュールに送信する PduR_ComTransmit() Signal I-PDU
送信処理(変換) PDUR I-PDU を CanTP モジュールに送信する PduR_CanTpTransmit() I-PDU I-PDU
送信処理(変換) CanTP I-PDU を N-PDU に変換し、 PduR モジュールに N-PDU データを渡す PduR_CanTpCopyTxData() I-PDU N-PDU
送信処理(変換) CanIf N-PDU を L-PDU に変換し CanIf モジュールに送信する CanIf_Transmit() N-PDU L-PDU
送信処理(変換) CanDrv L-PDU を L-SDU に変換し CanDrv モジュールに送信する Can_Write() L-PDU L-SDU
送信処理(変換) CAN Controller CanDrv モジュールから L-SDU を受け取り、CAN BUS 上に送信する - L-SDU CANフレーム
送信処理(完了通知) CAN Controller 受信した CAN フレーム を CanDrv モジュールに渡す - - -
送信処理(完了通知) CanDrv CanIf モジュールに送信完了を通知する CanIf_TxConfirmation() L-SDU -
送信処理(完了通知) CanIf CanTP モジュールに送信完了を通知する CanTp_TxConfirmation() - -
送信処理(完了通知) CanTP N-PDU の送信完了を確認し、 PduR モジュールに送信完了を通知する PduR_CanTpTxConfirmation() - -
送信処理(完了通知) PDUR COM モジュールに送信完了を通知する Com_TxConfirmation() - -
送信処理(完了通知) COM RTE を介してアプリケーションに送信完了を通知する - - -

注意

  • 上記のシーケンス図は、一般的な CAN 送信処理の流れを示したものであり、実際の処理は、使用する AUTOSAR のバージョンや設定によって異なる場合があります。

補足

  • CanTp モジュールは、N-PDUL-PDU の変換や、N-SDU の分割・結合、フロー制御などを担当します。
  • CanSM モジュールは、CAN ネットワークの Sleep/Wakeup や、CAN Controller の状態管理などを担当します。
  • CanNm モジュールは、CAN ネットワークのノードの監視や、ネットワークの初期化などを担当します。

CAN受信シーケンス図

シーケンス図の説明

受信完了通知の有無と修正版の受信処理表

受信処理においても、送信処理と同様に完了通知が存在します。ご提示いただいた表はデータの変換処理に焦点を当てていたため、完了通知の処理が省略されていました。受信完了通知を含めた修正版の受信処理表は以下の通りです。

処理種別 モジュール 処理 API 入力 出力
受信処理(変換) CAN Controller CAN BUS 上の CAN フレームを受信し、CanDrv モジュールに渡す - CANフレーム L-SDU
受信処理(変換) CanDrv L-SDU を L-PDU に変換し CanIf モジュールに渡す CanIf_RxIndication() L-SDU L-PDU
受信処理(変換) CanIf L-PDU を N-PDU に変換し CanTP モジュールに渡す CanTp_RxIndication() L-PDU N-PDU
受信処理(変換) CanTP N-PDU を I-PDU に変換し、PduR モジュールに I-PDU データを渡す PduR_CanTpCopyRxData() N-PDU I-PDU
受信処理(変換) PDUR I-PDU を COM モジュールに渡す Com_RxIndication() I-PDU I-PDU
受信処理(変換) COM I-PDU から Signal を抽出し、 RTE に渡す - I-PDU Signal
受信処理(変換) RTE Signal を DataElement に変換し、アプリケーション層に通知する Rte_Read_<DataElement名>() Signal DataElement
受信処理(完了通知) RTE アプリケーション層から受信完了を RTE に通知する Rte_Receive_<DataElement名>() DataElement -
受信処理(完了通知) COM RTE から受信完了通知を受け取り、PDUR モジュールに通知する - - -
受信処理(完了通知) PDUR COM から受信完了通知を受け取り、CanTP モジュールに通知する PduR_CanTpRxConfirmation() - -
受信処理(完了通知) CanTP PDUR から受信完了通知を受け取り、CanIf モジュールに通知する CanIf_RxConfirmation() - -
受信処理(完了通知) CanIf CanTP から受信完了通知を受け取り、 CanDrv モジュールに通知する - - -
受信処理(完了通知) CanDrv CanIf から受信完了通知を受け取り、CAN Controller に通知する - - -

注意

  • 上記のシーケンス図は、一般的なCAN受信処理の流れを示したものであり、実際の処理は、使用するAUTOSARのバージョンや設定によって異なる場合があります。

補足

  • CanNmとCanSMの処理は、今回の受信シーケンス図では省略しています。ご質問の処理粒度に合わせて、必要に応じてこれらのモジュールを含めたシーケンス図を作成する必要があるかもしれません。
  • CanTpモジュールは、I-PDUとN-PDUの変換や、N-SDUの分割・結合、フロー制御などを担当します。
  • PduRモジュールは、I-PDUのルーティング、つまり、どのモジュールにI-PDUを送信するかを決定します。
  • COMモジュールは、I-PDUからSignalを抽出し、RTEのRte_IRead_<DataElement名>()関数が返す値を更新します。
  • RTEは、アプリケーションとBSW間の通信を仲介します。アプリケーションは、RTEのAPIを呼び出して、Signalの値を読み書きします。
ユウタユウタ

各モジュールの送信処理とデータ要素の関係

COM、Can Driver、Can Interface、Can Transport Protocol、CAN Network Management、CAN State Managerの送信時の処理と、DataElement、Signal、I-PDU,L-PDU、L-SDUの関係について解説します。

アプリケーション層

  • アプリケーション層では、Signal と呼ばれる個々のデータ要素をDataElementと呼ばれるデータ構造に格納します。

COM (Communication)

  • COMは、アプリケーション層からの送信要求を受け取ると、DataElementを I-PDU (Interaction Layer Protocol Data Unit) と呼ばれるメッセージに組み立てます。
    • I-PDUは、COMモジュール間で送受信されるデータ単位です。
  • COMは、必要に応じて、I-PDUをCanTp (CAN Transport Protocol) に渡します。
    • I-PDUがCANメッセージの最大サイズ(8バイト)を超える場合は、CanTpによって分割されます。
  • COMは、CanNm (CAN Network Management) を使用して、ネットワーク管理情報を送受信します。
    • ネットワーク管理情報は、ノードの可用性や通信状態に関する情報です。

主なAPI

  • Com_TxConfirmation(PduIdType, Std_ReturnType): PDU Routerからの送信完了通知を受け取ります。

CanTp (CAN Transport Protocol)

  • CanTpは、COMから受け取ったI-PDUを**N-PDU (Network Layer Protocol Data Unit)**と呼ばれるメッセージに分割、または再構成します。
    • N-PDUは、CanTpモジュール間で送受信されるデータ単位です。
  • CanTpは、N-PDUを**CanIf (CAN Interface)**に渡します。

主なAPI

  • CanTp_Transmit(TxPduId, PduInfoPtr): PDU Routerから送信要求を受け取ります。
  • CanTp_RxIndication(PduIdType, const PduInfoType*): CanIfから受信通知を受け取ります。

CanNm (CAN Network Management)

  • CanNmは、CanIf を使用して、ネットワーク管理メッセージを送受信します。
  • CanNmは、ノードの状態(スリープ、ウェイクアップなど)を管理し、他のノードに通知します。

主なAPI

  • CanNm_Transmit(): ネットワーク管理PDUの送信を要求します。

CanSM (CAN State Manager)

  • CanSMは、CanIf を介して、CANコントローラとトランシーバの状態を制御します。
    • CANコントローラの状態には、スタート、ストップ、スリープなどがあります。
    • トランシーバの状態には、ノーマル、スタンバイ、スリープなどがあります。
  • CanSMは、上位層(ComM)からの要求と、下位層(CanIf)からの通知に基づいて、CANネットワーク全体の通信状態を管理します。

CanSMがCanIfを通して行う処理

  • CanIf_SetPduMode(): L-PDUのモードを設定します。
  • CanIf_SetTrcvMode(): トランシーバのモードを設定します。

CanIf (CAN Interface)

  • CanIfは、CanTpやCanNmから受け取ったN-PDUを**L-PDU (Data Link Layer Protocol Data Unit)**に変換します。
    • L-PDUは、CanIfモジュールとCanDrvモジュール間で送受信されるデータ単位です。
  • CanIfは、L-PDUを**CanDrv (CAN Driver)**に渡します。
  • CanIfは、CanDrvから受信したL-PDUをN-PDUに変換し、CanTpやCanNmに渡します。

主なAPI

  • CanIf_Transmit(PduIdType, const PduInfoType*): 上位層(CanTp, CanNm)から送信要求を受け取ります。
  • <User_RxIndication>(PduIdType, const PduInfoType*): 下位層(CanDrv)から受信通知を受け取ります。

CanDrv (CAN Driver)

  • CanDrvは、CanIfから受け取ったL-PDUをCANコントローラが理解できる形式に変換し、CANバスに送信します。
  • CanDrvは、CANバスから受信したメッセージをL-PDUに変換し、CanIfに渡します。

L-PDUの構成要素

  • L-SDU (Data Link Layer Service Data Unit): 上位層(CanIf)からのデータ
  • ID (Identifier): 送信先ノードを識別するID
  • DLC (Data Length Code): データ長

主なAPI

  • Can_Write(Std_ReturnType, Can_HwHandleType, const Can_PduType*): CanIfから送信要求を受け取ります。
  • 引数
    • Can_HwHandleType: CANハードウェアオブジェクトハンドル
    • Can_PduType: 送信するL-PDU (ID, DLC, L-SDUを含む)

データ要素の流れ

送信時のデータ要素の流れをまとめると、以下のようになります。

  1. アプリケーション層: Signal → DataElement
  2. COM: DataElement → I-PDU
  3. CanTp: I-PDU → N-PDU
  4. CanIf: N-PDU → L-PDU (L-SDU, ID, DLC)
  5. CanDrv: L-PDU → CANバス
ユウタユウタ

COM モジュール

COM モジュールは、AUTOSAR の通信機能を管理するための様々なメンバーと API を持ちます。 ここでは、mermaid を用いたクラス図と API の解説を通して、COM モジュールの構造と機能を詳しく説明します。

クラス図

API 解説

Com クラス:

  • Com_Init(const Com_ConfigType* config): COM モジュールを初期化します。
    • config: COM モジュールの設定構造体へのポインタ。
  • Com_DeInit(): COM モジュールを終了します。
  • Com_ReceiveSignal(Com_SignalIdType SignalId, const void* SignalDataPtr): 指定されたシグナルを受信します。
    • SignalId: 受信するシグナルのID。
    • SignalDataPtr: 受信したシグナルデータを格納するバッファへのポインタ。
  • Com_SendSignal(Com_SignalIdType SignalId, const void* SignalDataPtr): 指定されたシグナルを送信します。
    • SignalId: 送信するシグナルのID。
    • SignalDataPtr: 送信するシグナルデータが格納されたバッファへのポインタ。
  • Com_ReceiveSignalGroup(Com_SignalGroupIdType SignalGroupId, const void* SignalGroupDataPtr): 指定されたシグナルグループを受信します。
    • SignalGroupId: 受信するシグナルグループのID。
    • SignalGroupDataPtr: 受信したシグナルグループデータを格納するバッファへのポインタ。
  • Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId, const void* SignalGroupDataPtr): 指定されたシグナルグループを送信します。
    • SignalGroupId: 送信するシグナルグループのID。
    • SignalGroupDataPtr: 送信するシグナルグループデータが格納されたバッファへのポインタ。
  • Com_TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr): PDU の送信をトリガーします。
    • TxPduId: 送信する PDU の ID。
    • PduInfoPtr: 送信する PDU のデータとメタデータを含む構造体へのポインタ。
  • Com_TxConfirmation(PduIdType TxPduId, Std_ReturnType result): PDU の送信完了を確認します。
    • TxPduId: 送信が完了した PDU の ID。
    • result: 送信結果を示すステータスコード。

ComIPdu クラス:

  • ComIPduCallout: 対応する I-PDU のコールアウト関数の有無と名前を定義します。
  • ComIPduSignalProcessing: 信号の通知/確認を即時行うか、遅延させるかを定義します。
  • ComIPduType: I-PDU が分割せずに送信できる通常の I-PDU か、または下位バスのトランスポートプロトコルを介して送信されるべき大きな I-PDU かを定義します。
  • ComIPduGroupRef: この I-PDU が属する I-PDU グループへの参照。
  • ComIPduSignalRef: この I-PDU に含まれるすべての信号への参照。
  • ComPduIdRef: COM スタック内のハンドル ID の調和を可能にするための「グローバル」Pdu 構造体への参照。

ComTxIPdu クラス:

  • ComMetaDataDefault: I-PDU がグローバルに設定された MetaDataType を参照し、送信要求に明示的なメタデータが指定されていない場合、AUTOSAR COM モジュールは、送信にこの設定されたデフォルトメタデータを使用します。

ComIPduGroup クラス:

  • ComIPduGroupHandleId: この I-PDU グループの ID として使用される数値。
  • ComIPduGroupGroupRef: この I-PDU グループを含むすべての I-PDU グループへの参照。

ComSignalGroup クラス:

  • ComHandleId: COM API で Com_SignalIdType または Com_SignalGroupIdType パラメータを使用して信号と信号グループを識別する ID として使用される数値。
  • ComTransferProperty: この信号への書き込みアクセスが対応する I-PDU の送信をトリガーできるかどうかを定義します。

ComTxMode クラス:

  • ComTxModeRepetitionPeriod: 繰り返し送信の周期を定義します。

ComTxModeTrue クラス:

  • ComTxMode: ComFilter が true と評価された場合の、AUTOSAR COM モジュールの送信モードの設定パラメータが含まれます。

ComGwMapping クラス:

  • 統合シグナルゲートウェイのマッピングを定義します。

ComGwSourceDescription クラス:

  • ComGwIPduRef: シグナルゲートウェイの送信元または送信先の説明の I-PDU への参照。

ComGwDestination クラス:

  • 既に設定されている COM 信号/グループ信号への参照、または送信先記述コンテナによって、1 つのルーティング送信先を定義できます。
  • ComTransferProperty: この信号への書き込みアクセスが対応する I-PDU の送信をトリガーできるかどうかを定義します。

ComGwDestinationDescription クラス:

  • ComGwIPduRef: シグナルゲートウェイの送信元または送信先の説明の I-PDU への参照。
  • ComFilter: AUTOSAR COM モジュールのフィルタの設定パラメータが含まれます。

ComGwSignal クラス:

  • ComGwSignalRef: ゲートウェイ関係のオブジェクトへの参照。ComSignal または ComGroupSignal のいずれか。

注意

上記の情報は、提供されたソースに基づいていますが、AUTOSAR の仕様はバージョンによって異なる可能性があります。 最新の情報については、AUTOSAR の公式ウェブサイトなどを参照してください。

ユウタユウタ

CanTp モジュール

CanTp モジュールは、AUTOSAR の CAN バス上でより大きなデータパケットの送受信を可能にするための、様々なメンバーと API を持ちます。ここでは、mermaid を用いたクラス図と API の解説を通して、CanTp モジュールの構造と機能を詳しく説明します。

クラス図

API 解説

CanTp クラス:

  • CanTp_Init(const CanTp_ConfigType* config): CanTp モジュールを初期化します。
    • config: CanTp モジュールの設定構造体へのポインタ。
  • CanTp_Shutdown(): CanTp モジュールをシャットダウンします。CanTp_Init() によって初期化されたすべての内部変数と状態をデフォルト値にリセットします。
  • CanTp_Transmit(PduIdType TxSduId, const PduInfoType* PduInfoPtr): 上位レイヤーから送信要求を受け取ると、CanTp モジュールはタイムアウト N_Cs を開始します。
    • TxSduId: 送信する SDU の ID。
    • PduInfoPtr: 送信する SDU のデータとメタデータを含む構造体へのポインタ。
  • CanTp_CancelTransmit(PduIdType TxSduId): PDUの送信をキャンセルするために、上位レイヤモジュールによって呼び出されます。
    • TxSduId: 送信をキャンセルする SDU の ID。
  • CanTp_ChangeParameter(PduIdType id, TPParameterType parameter, uint16 value): このサービスは、指定された N-SDU の送信パラメータ BS または STmin を変更するために使用されます。
    • id: 送信パラメータが変更される送信中の N-SDU の識別子。
    • parameter: 変更するパラメータを指定します(BS または STmin)。
    • value: パラメータの新しい値。
  • CanTp_ReadParameter(PduIdType id, TPParameterType parameter, uint16* value): このサービスは、指定された N-SDU の受信パラメータ BS と STmin の現在の値を読み取るために使用されます。
    • id: 受信パラメータが読み取られる受信 N-SDU の識別子。
    • parameter: 値を読み取るパラメータを指定します(BS または STmin)。
    • value: パラメータ値が提供されるポインタ。
  • CanTp_MainFunction(): CanTpMainFunctionPeriod 設定パラメータの影響を受けます。

CanTpRxNSdu クラス:

  • CanTpRxNSduId: 受信 N-SDU を識別します。各 RxNsdu 識別子は、1 つの SF/FF/CF N-PDU 識別子にのみリンクされます。
  • CanTpRxNSduRef: COM スタック内の Pdu への参照。

CanTpRxNPdu クラス:

  • CanTpRxNPduId: 受信 N-PDU を識別します。各 RxNsdu 識別子は、1 つの SF/FF/CF N-PDU 識別子にのみリンクされます。ただし、拡張または混合アドレッシング形式の場合、同じ N-PDU 識別子を複数の N-SDU 識別子に使用できます。区別は、N_TA または N_AE 値(SF または FF フレームの最初のデータバイト)によって行われます。
  • CanTpRxNPduRef: COM スタック内の Pdu への参照。

CanTpTxFcNPdu クラス:

  • CanTpTxFcNPduConfirmationPduId: CanIf モジュールへの CanTpTxFcNPdu の送信を確認するために CanIf が使用するハンドル ID。
  • CanTpTxFcNPduId: 送信 FC N-PDU を識別します。
  • CanTpTxFcNPduRef: COM スタック内の Pdu への参照。

CanTpTxNSdu クラス:

  • CanTpTxNSduId: 送信 N-SDU を識別します。
  • CanTpTxNSduRef: COM スタック内の Pdu への参照。

CanTpTxNPdu クラス:

  • CanTpTxNPduConfirmationPduId: CanIf モジュールへの CanTpTxNPdu の送信を確認するために CanIf が使用するハンドル ID。
  • CanTpTxNPduId: 送信 N-PDU を識別します。
  • CanTpTxNPduRef: COM スタック内の Pdu への参照。

注意

上記の情報は、AUTOSAR の仕様はバージョンによって異なる可能性があります。

ユウタユウタ

CanNm モジュール

CanNm モジュールは、AUTOSAR のネットワーク管理を担当する重要なモジュールであり、ノードの状態管理、ネットワークの起動とシャットダウン、そしてノード間の通信の制御などを担います。以下に、mermaid を使用したクラス図と API の詳細な解説を通して、CanNm モジュールの構成要素とその機能について詳しく説明します。

クラス図

API 解説

CanNm クラス:

  • CanNm_Init(const CanNm_ConfigType* config): CanNm モジュールを初期化します。
    • config: CanNm モジュールの設定構造体へのポインタ。
  • CanNm_NetworkRequest(NetworkHandleType nmChannelHandle): 指定されたNMチャネルでネットワーク要求を開始します。
    • nmChannelHandle: NM チャネルの識別子。
  • CanNm_NetworkRelease(NetworkHandleType nmChannelHandle): 指定されたNMチャネルのネットワーク要求を解除します。
    • nmChannelHandle: NM チャネルの識別子。
  • CanNm_DisableCommunication(NetworkHandleType nmChannelHandle): 指定されたNMチャネルの通信を無効にします。
    • nmChannelHandle: NM チャネルの識別子。
  • CanNm_EnableCommunication(NetworkHandleType nmChannelHandle): 指定されたNMチャネルの通信を有効にします。
    • nmChannelHandle: NM チャネルの識別子。
  • CanNm_PassiveStartUp(NetworkHandleType nmChannelHandle): 指定されたNMチャネルのパッシブスタートアップを開始します。
    • nmChannelHandle: NM チャネルの識別子。
  • CanNm_RepeatMessageRequest(NetworkHandleType nmChannelHandle): 指定されたNMチャネルでNMメッセージの再送を要求します。
    • nmChannelHandle: NM チャネルの識別子。
  • CanNm_TxConfirmation(PduIdType TxPduId): PDUの送信が成功したときにCanIfモジュールによって呼び出されます。
    • TxPduId: 送信された PDU の ID。
  • CanNm_GetState(NetworkHandleType nmChannelHandle, Nm_StateType* StatePtr): 指定されたNMチャネルの現在の状態を取得します。
    • nmChannelHandle: NM チャネルの識別子。
    • StatePtr: 状態が格納されるポインタ。
  • CanNm_GetPduData(NetworkHandleType nmChannelHandle, uint8* nmPduDataPtr): 指定された NM チャネルの現在の PDU データを取得します。
    • nmChannelHandle: NM チャネルの識別子。
    • nmPduDataPtr: PDU データが格納されるポインタ。
  • CanNm_Transmit(NetworkHandleType nmChannelHandle, const PduInfoType* PduInfoPtr): PDUの送信を要求します。
    • nmChannelHandle: NM チャネルの識別子。
    • PduInfoPtr: 送信する PDU データを含む構造体へのポインタ。
  • CanNm_GetNodeIdentifier(NetworkHandleType nmChannelHandle, uint8* nmNodeIdPtr): 指定された NM チャネルのノード ID を取得します。
    • nmChannelHandle: NM チャネルの識別子。
    • nmNodeIdPtr: ノード ID が格納されるポインタ。
  • CanNm_GetLocalNodeIdentifier(NetworkHandleType nmChannelHandle, uint8* nmNodeIdPtr): 指定された NM チャネルのローカルノード ID を取得します。
    • nmChannelHandle: NM チャネルの識別子。
    • nmNodeIdPtr: ローカルノード ID が格納されるポインタ。
  • CanNm_RxIndication(PduIdType RxPduId, const PduInfoType* PduInfoPtr): PDUの受信をCanIfモジュールから通知します。
    • RxPduId: 受信された PDU の ID。
    • PduInfoPtr: 受信された PDU データを含む構造体へのポインタ。
  • CanNm_ConfirmPnAvailability(NetworkHandleType nmChannelHandle): 指定された NM チャネルで PN フィルタ機能を有効にします。
    • nmChannelHandle: NM チャネルの識別子。

CanNmChannelConfig クラス:

  • CanNmChannelId: CanNmチャネルを識別します。
  • CanNmNodeID: CanNmチャネルのノードID。
  • CanNmMainFunctionPeriod: CanNmMainFunction()が呼び出される周期。
  • CanNmComMNetworkHandleRef: 関連するComMチャネルへの参照。
  • CanNmNmTimeoutTime: NMタイムアウト時間。
  • CanNmWaitBusSleepTime: バススリープ待機時間。
  • CanNmRepeatMessageTime: リピートメッセージ送信時間。
  • CanNmPnHandleMultipleNetworkRequests: CanNmがネットワークモードからリピートメッセージ状態への追加遷移を実行するかどうかを指定します(true)または実行しないかどうかを指定します(false)。

CanNmRxPdu クラス:

  • CanNmRxPduId: CanNmチャネルに関連付けられたCanIf L-PDU範囲のRx PDU IDを定義します。
  • CanNmRxPduRef: この CanNm チャネルで使用されるグローバル PDU への参照。

CanNmUserDataTxPdu クラス:

  • CanNmTxUserDataPduRef: COM スタック内の Pdu への参照。
  • CanNmTxUserDataPduId: UserNm PDU の PDU ID。

注意

上記の CanNm モジュールに関する情報は、AUTOSAR の仕様はバージョンによって異なる場合があります

ユウタユウタ

CanSM モジュール

CanSM モジュールは、AUTOSAR の CAN ネットワークの状態を管理します。ComM モジュールからの要求に基づいて、CAN ネットワークの通信モードを制御します。CanSM モジュールは、CanIf モジュールを使用して CAN コントローラとトランシーバの動作モードを制御します。

クラス図

API 解説

CanSM クラス:

  • CanSM_Init(const CanSM_ConfigType* config): CanSM モジュールを初期化します。
    • config: CanSM モジュールの設定構造体へのポインタ。
  • CanSM_RequestComMode(NetworkHandleType Network, ComM_ModeType ComMode): ComM モジュールから CAN ネットワークの通信モードを要求します。
    • Network: ネットワークハンドル。
    • ComMode: 要求される通信モード。
  • CanSM_GetCurrentComMode(NetworkHandleType Network, ComM_ModeType* ComModePtr): 現在の通信モードを取得します。
    • Network: ネットワークハンドル。
    • ComModePtr: 現在の通信モードが格納されるポインタ。
  • CanSM_SetBaudrate(NetworkHandleType Network, uint16 BaudRate): 指定されたネットワークのボーレートを設定します。
    • Network: ネットワークハンドル。
    • BaudRate: 設定するボーレート。
  • CanSM_GetBaudrate(NetworkHandleType Network, uint16* BaudRatePtr): 現在のボーレートを取得します。
    • Network: ネットワークハンドル。
    • BaudRatePtr: 現在のボーレートが格納されるポインタ。
  • CanSM_ChangeBaudrate(NetworkHandleType Network, uint16 BaudRate): ボーレートを変更します。
    • Network: ネットワークハンドル。
    • BaudRate: 変更するボーレート。
  • CanSM_CurrentIcomConfiguration(NetworkHandleType Network, IcomConfigIdType ConfigurationId): 現在の ICOM 設定を通知します。
    • Network: ネットワークハンドル。
    • ConfigurationId: ICOM 設定 ID。
  • CanSM_GetVersionInfo(Std_VersionInfoType* versioninfo): CanSM モジュールのバージョン情報を取得します。
    • versioninfo: バージョン情報が格納されるポインタ。
  • CanSM_MainFunction(): CanSM モジュールのメイン関数。

CanSMGeneral クラス:

  • CanSMMainFunctionPeriod: CanSM_MainFunction() が呼び出される周期。
  • CanSMVersionInfoApi: バージョン情報 API を有効にするかどうか。
  • CanSMBorTxConfirmationPolling: BOR Tx 確認ポーリングを有効にするかどうか。
  • CanSMTxOfflineActiveSupport: Tx Offline Active サポートを有効にするかどうか。

CanSMManagerNetwork クラス:

  • CanSMNetworkHandle: ネットワークハンドル。
  • CanSMControllerId: ネットワークに割り当てられた CAN コントローラの ID。
  • CanSMTransceiverId: ネットワークに割り当てられた CAN トランシーバの ID。

注意

上記の CanSM モジュールに関する情報は、AUTOSAR の仕様はバージョンによって異なる場合があります。

ユウタユウタ

CanIf モジュール

CanIf モジュールは、上位レイヤー(例:PduR、CanNm、CanTp)と下位レイヤー(CanDrv)間のインターフェースを提供します。 CanIf は、CAN 関連データ(例:データ長)を上位レイヤーに転送するための通知サービスを提供します。 これらのサービスの呼び出しパラメータは、CanDrv にバッファリングされた情報を指すか、CAN ハードウェアを直接参照します。 さらに、CanIf は、受信および送信されたフレームの内容を報告するために、バスミラーリングモジュールへのコールアウトをサポートします。

クラス図

API 解説

CanIf クラスは、以下の API を提供します。

  • CanIf_Transmit(PduIdType CanTxPduId, const PduInfoType* PduInfoPtr): L-PDUに基づいて送信要求サービスを提供します。 L-SDU ID と、L-SDU、MetaData、L-SDU 長へのポインタを含むデータ構造体への参照がパラメータとして渡されます。
  • CanIf_ControllerBusOff(uint8 ControllerId): 対応する CAN コントローラを参照するコントローラ BusOff イベントを示します。
  • CanIf_SetDynamicTxId(PduIdType CanTxPduId, Can_IdType CanId): 送信 L-PDU の CanId を動的に設定するために使用されます。
  • CanIf_ReadRxPduData(PduIdType CanRxPduId, PduInfoType* PduInfoPtr): 受信 L-PDU データを読み取るために使用できます。
  • CanIf_ReadTxNotifStatus(PduIdType CanIfTxSduId): 送信 L-SDU の現在の通知ステータスを取得します。
  • CanIf_ReadRxNotifStatus(PduIdType CanIfRxSduId): 受信 L-SDU の現在の通知ステータスを取得します。
  • CanIf_SetPduMode(uint8 ControllerId, CanIf_PduModeType CanIfPduMode): 指定されたコントローラに接続されている自 ECU のすべての PDU のモードを設定します。
  • CanIf_GetPduMode(uint8 ControllerId, CanIf_PduModeType* PduModePtr): 指定されたコントローラに接続されている自 ECU のすべての PDU のモードを取得します。
  • CanIf_GetControllerMode(uint8 ControllerId, CanIf_ControllerModeType* ControllerModePtr): 指定された CAN コントローラの現在のモードを取得します。
  • CanIf_GetTrcvMode(uint8 TransceiverId, CanTrcv_TrcvModeType* TransceiverModePtr): 現在の動作モードを要求された CANトランシーバに割り当てられた抽象化された CanIf TransceiverId を取得します。
  • CanIf_CheckWakeup(uint8 ControllerId): 指定されたコントローラでウェイクアップが発生したかどうかを確認します。
  • CanIf_CheckValidation(uint8 ControllerId): ウェイクアップイベントの検証を確認します。
  • CanIf_GetTxConfirmationState(uint8 ControllerId): 指定されたコントローラ ID に関連付けられたすべての Tx-PDU の送信確認ステータスを提供します。
  • CanIf_CheckTrcvWakeFlag(uint8 TransceiverId): 指定されたトランシーバのウェイクアップフラグを確認します。
  • CanIf_SetBaudrate(uint8 ControllerId, uint16 BaudRateConfigID): 指定されたコントローラ ID に関連付けられた CAN コントローラのボーレートを設定します。
  • CanIf_SetIcomConfiguration(uint8 ControllerId, IcomConfigIdType ConfigurationId): 指定されたコントローラ ID に関連付けられた CAN コントローラの ICOM 構成を設定します。
  • CanIf_GetIcomConfiguration(uint8 ControllerId, IcomConfigIdType* ConfigurationIdPtr): 指定されたコントローラ ID に関連付けられた CAN コントローラの ICOM 構成を取得します。
  • CanIf_EnableBusMirroring(uint8 ControllerId, boolean MirroringActive): 指定された CAN コントローラでバスミラーリングを有効にします。
  • CanIf_DisableBusMirroring(uint8 ControllerId): 指定された CAN コントローラでバスミラーリングを無効にします。
  • CanIf_TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr): トリガー送信が有効な場合にのみ API 関数を提供します。
  • CanIf_RxIndication(PduIdType CanRxPduId, const PduInfoType* PduInfoPtr): すべてのフィルタと検証チェックに合格した後、受信した CAN Rx L-PDU の受信を CanIf に示します。
  • CanIf_TxConfirmation(PduIdType CanTxPduId): 正常な送信を示すために Can モジュールによって呼び出されます。
  • CanIf_ControllerModeIndication(uint8 ControllerId, CanIf_ControllerModeType ControllerMode): 対応する CAN コントローラを参照して、コントローラ状態遷移を示します。
  • CanIf_TrcvModeIndication(uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode): 対応する CANトランシーバを参照して、トランシーバ状態遷移を示します。
  • CanIf_ConfirmPnAvailability(uint8 TransceiverId): トランシーバが抽象化された CanIf TransceiverId で対応する CANトランシーバを参照して、PN 通信モードで動作していることを示します。

注意

上記の CanIf モジュールに関する情報はAUTOSAR の仕様はバージョンによって異なる場合があります。

ユウタユウタ

CanDrv モジュール

CanDrv モジュールは、マイクロコントローラに統合された CAN コントローラ、または外部 CAN コントローラと通信するためのハードウェアに依存するインターフェースを提供します。 CanDrv は、上位レイヤーモジュール(CanIf)によって使用される基本的な CAN ネットワーク通信サービスを提供します。 CanDrv は CanIf モジュールにのみレポートします。

CanIf モジュールは、使用されるすべての下位 CanDrv の API の場所へのアクセスを、各 CanDrv の関数ポインタのセットによってリンク時構成用にアクセスします。 複数 CanDrv を使用した送信要求では、PduId を使用して要求された CAN コントローラが追跡され、次にハードウェアユニットが処理されます。 ハードウェアユニット番号はディスパッチに関連しており、関数へのポインタを含む配列のインデックスとして使用されます。

クラス図

API 解説

  • Can_Init(const Can_ConfigType* Config): CAN ドライバを初期化し、ハードウェアを設定します。
  • Can_DeInit(): CAN ドライバを初期化解除します。
  • Can_SetControllerMode(uint8 ControllerId, Can_ControllerStateType Transition): 指定された CAN コントローラを要求された状態に設定します。
  • Can_GetControllerErrorState(uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr): 指定された CAN コントローラのエラー状態を取得します。
  • Can_GetControllerMode(uint8 ControllerId, Can_ControllerStateType* ControllerModePtr): 指定された CAN コントローラの現在のモードを取得します。
  • Can_Write(Can_HwHandleType Hth, const Can_PduType* PduInfo): 指定されたハードウェアオブジェクトを介して L-PDU を送信します。
  • Can_SetBaudrate(uint8 ControllerId, uint16 BaudRateConfigID): 指定されたコントローラ ID に関連付けられた CAN コントローラのボーレートを設定します。
  • Can_ChangeBaudrate(uint8 ControllerId, uint16 BaudRateConfigID): 指定されたコントローラ ID に関連付けられた CAN コントローラのボーレートを変更します。
  • Can_SetIcomConfiguration(uint8 Controller, IcomConfigIdType ConfigurationId): 指定されたコントローラ ID に関連付けられた CAN コントローラの ICOM 構成を設定します。
  • Can_GetIcomConfiguration(uint8 Controller, IcomConfigIdType* ConfigurationIdPtr): 指定されたコントローラ ID に関連付けられた CAN コントローラの ICOM 構成を取得します。

注意

上記の CanDrv モジュールに関する情報は、AUTOSAR の仕様はバージョンによって異なる場合があります。

ユウタユウタ

CanTrcv モジュール

CanTrcv モジュールは、CAN トランシーバを制御するための API を提供します。CanTrcv は、CanIf モジュールからの要求を受け取り、トランシーバの動作モードを設定したり、トランシーバの状態を取得したりします。

クラス図

API 解説

  • CanTrcv_Init(const CanTrcv_ConfigType* Config): CanTrcv モジュールを初期化します。この API は、CanTrcv_ConfigType 構造体へのポインタを受け取り、この構造体にはトランシーバの構成情報が含まれています。

  • CanTrcv_SetOpMode(uint8 Transceiver, CanTrcv_TrcvModeType OpMode): CAN トランシーバの動作モードを設定します。この API は、トランシーバ ID と、設定する動作モードを受け取ります。

    • Transceiver: API 呼び出しを適用する CAN トランシーバ。
    • OpMode: 必要な動作モード。
    • 戻り値:
      • E_OK: トランシーバモード変更のリクエストが受け入れられた場合に返されます。
      • E_NOT_OK: トランシーバモード変更のリクエストが受け入れられなかった場合、またはパラメータが範囲外の場合に返されます。
  • CanTrcv_GetOpMode(uint8 Transceiver, CanTrcv_TrcvModeType* OpMode): CAN トランシーバの現在の動作モードを取得します。この API は、トランシーバ ID と、動作モードを格納するためのポインタを受け取ります。

    • Transceiver: API 呼び出しを適用する CAN トランシーバ。
    • OpMode: API が適用されるバスの動作モードへのポインタ。
    • 戻り値:
      • E_OK: 動作モードが検出された場合に返されます。
      • E_NOT_OK: 動作モードが検出されなかった場合に返されます。
  • CanTrcv_GetBusWuReason(uint8 Transceiver, CanTrcv_TrcvWakeupReasonType* reason): CAN トランシーバのウェイクアップ理由を取得します。この API は、トランシーバ ID と、ウェイクアップ理由を格納するためのポインタを受け取ります。

    • Transceiver: API 呼び出しを適用する CAN トランシーバ。
    • reason: API が適用されるバスのウェイクアップ理由へのポインタ。
  • CanTrcv_CheckWakeup(uint8 Transceiver): CAN トランシーバがウェイクアップ状態にあるかどうかを確認します。この API は、トランシーバ ID を受け取ります。

    • Transceiver: API 呼び出しを適用する CAN トランシーバ。
    • 戻り値:
      • E_OK: API 呼び出しが受け入れられました。
      • E_NOT_OK: API 呼び出しが受け入れられませんでした。

注意

上記の CanTrcv モジュールに関する情報は、AUTOSAR の仕様はバージョンによって異なる場合があります。

ユウタユウタ

PduR モジュールのメンバー、API、クラス図

PduR モジュールは、異なるバスシステム間で I-PDU のルーティングとコピーを行う役割を担います。 これは、さまざまな通信インターフェースモジュールやトランスポートプロトコルモジュール間で I-PDU を交換することを可能にします。

クラス図

API 解説

PduR モジュールは、上位モジュールと下位モジュールとの間のやり取りのために、設定可能なインターフェースを提供します。 PduR は、各上位 CDD に対して一意の送信関数 PduR_<Cdd>Transmit を提供します。 下位モジュールから PduR のコールアウト関数が呼び出されると、PduR は対応する CDD のターゲット関数を呼び出します。 下位 CDD が通信インターフェース API を必要とする場合、PduR は一意の通信インターフェース API 関数セットを提供します。 これは、PduR_<Cdd>RxIndication と、構成されている場合は PduR_<Cdd>TxConfirmation および PduR_<Cdd>TriggerTransmit を含みます。 下位 CDD がトランスポートプロトコル API を必要とする場合、PduR は一意のトランスポートプロトコル API 関数セットを提供します。 これは、PduR_<Cdd>CopyRxDataPduR_<Cdd>CopyTxDataPduR_<Cdd>RxIndicationPduR_<Cdd>StartOfReceptionPduR_<Cdd>TxConfirmation を含みます。 上位モジュールから PduR の API 関数が呼び出されると、PduR は CDD の対応するターゲット関数を呼び出します。

API 名の <Lo><Up><LoTp> などのジェネリック部分は、API を使用または実装しているモジュールの名前で置き換えられます。 名前の識別方法は、ECUC 記述への参照を使用することです。 参照される ECUC 記述では、short-name が使用されます。

  • PduR_<User:Up>Transmit(PduIdType TxPduId, const PduInfoType* PduInfoPtr): 上位レイヤーモジュールから PDU の送信を要求します。

    • TxPduId: 送信する PDU の識別子。
    • PduInfoPtr: PDU データの長さとポインタ、および MetaData へのポインタ。
    • 戻り値:
      • E_OK: PDU の送信リクエストが受け入れられた。
      • E_NOT_OK: PDU の送信リクエストが受け入れられなかった。
  • PduR_<User:Up>CancelTransmit(PduIdType TxPduId): 下位レイヤートランスポートプロトコルモジュールで進行中の PDU の受信のキャンセルを要求します。

    • TxPduId: 送信をキャンセルする PDU の識別子。
    • 戻り値:
      • E_OK: キャンセルリクエストが正常に実行されました。
      • E_NOT_OK: キャンセルリクエストが受け入れられなかったか、正常に実行されませんでした。
  • PduR_<User:Lo>RxIndication(PduIdType RxPduId, const PduInfoType* PduInfoPtr): 下位レイヤー通信インターフェースモジュールから PDU を受信したことを上位レイヤーモジュールに通知します。

    • RxPduId: 受信した PDU の ID。
    • PduInfoPtr: 受信した PDU の長さ(SduLength)、PDU を含むバッファへのポインタ(SduDataPtr)、およびこの PDU に関連する MetaData を含みます。
  • PduR_<User:Lo>TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr): 下位レイヤーモジュールから上位レイヤーモジュールに PDU データの送信をトリガーします。

    • TxPduId: 送信を要求される SDU の ID。
    • PduInfoPtr: SDU データをコピーする必要があるバッファへのポインタ(SduDataPtr)、および SduLengh で使用可能なバッファサイズを含みます。 戻ると、サービスは SduLength でコピーされた SDU データの長さを示します。
    • 戻り値:
      • E_OK: SDU の送信リクエストが受け入れられました。
      • E_NOT_OK: SDU の送信リクエストが受け入れられませんでした。
  • PduR_<User:Lo>TxConfirmation(PduIdType TxPduId, Std_ReturnType result): 下位レイヤー通信インターフェースモジュールから PDU の送信が完了したことを上位レイヤーモジュールに通知します。

    • TxPduId: 送信された PDU の ID。
    • result: 送信結果(E_OK または E_NOT_OK)。
  • PduR_<User:LoTp>CopyRxData(PduIdType id, const PduInfoType* info, PduLengthType* bufferSizePtr): 下位レイヤートランスポートプロトコルモジュールから PDU データを受信し、上位レイヤーモジュールにコピーします。

    • id: 受信した I-PDU の識別子。
    • info: ソースバッファ(SduDataPtr)とコピーされるバイト数(SduLength)を提供します。 SduLength を 0 にすると、上位レイヤーモジュールで使用可能な現在のバッファ量を照会できます。 この場合、SduDataPtr は NULL_PTR にすることができます。
    • bufferSizePtr: 上位レイヤーモジュールで受信バッファとして使用できる残りのバイト数へのポインタ。
    • 戻り値:
      • BUFREQ_OK: データがコピーされ、すべてのデータを受信するのに十分なバッファスペースが上位レイヤーモジュールで利用可能です。
      • BUFREQ_E_NOT_OK: 受け入れられなかったか、正常に実行されませんでした。
      • BUFREQ_E_BUSY: データがコピーされましたが、すべてのデータを受信するのに十分なバッファスペースが上位レイヤーモジュールでは利用できません。 下位レイヤーモジュールはこの呼び出しを再試行する場合があります。
      • BUFREQ_E_OVFL: I-PDU の受信中にバッファオーバーフローが発生しました。
  • PduR_<User:LoTp>CopyTxData(PduIdType id, const PduInfoType* info, const RetryInfoType* retry, PduLengthType* availableDataPtr): 上位レイヤーモジュールから PDU データを送信し、下位レイヤートランスポートプロトコルモジュールにコピーします。

    • id: 送信される I-PDU の識別子。
    • info: 宛先バッファ(SduDataPtr)とコピーされるバイト数(SduLength)を提供します。 十分な送信データが利用できない場合、上位レイヤーモジュールによってデータはコピーされず、BUFREQ_E_BUSY が返されます。 下位レイヤーモジュールは、呼び出しを再試行する場合があります。 SduLength を 0 にすると、再試行パラメータで状態の変更を示したり、上位レイヤーモジュールで現在利用可能なデータ量を照会したりできます。 この場合、SduDataPtr は NULL_PTR にすることができます。
    • retry: 下位レイヤーモジュールからの状態の変更に関する追加情報(たとえば、再送信が発生した場合)を含みます。
    • availableDataPtr: 上位レイヤーモジュールで送信用に現在利用可能なデータ量へのポインタ。
    • 戻り値:
      • BUFREQ_OK: データがコピーされ、すべてのデータをコピーするのに十分なデータが上位レイヤーモジュールで利用可能です。
      • BUFREQ_E_NOT_OK: 受け入れられなかったか、正常に実行されませんでした。
      • BUFREQ_E_BUSY: 十分な送信データが利用できないため、データはコピーされません。 下位レイヤーモジュールはこの呼び出しを再試行する場合があります。
      • BUFREQ_E_OVFL: I-PDU の送信中にバッファオーバーフローが発生しました。
  • PduR_<User:LoTp>RxIndication(PduIdType id, Std_ReturnType result): TP API を介して I-PDU が受信された後に呼び出されます。結果は、送信が成功したかどうかを示します。

    • id: 受信した I-PDU の識別子。
    • result: 受信結果。
  • PduR_<User:LoTp>StartOfReception(PduIdType id, const PduInfoType* info, PduLengthType TpSduLength, PduLengthType* bufferSizePtr): 下位レイヤートランスポートプロトコルモジュールから I-PDU の受信を開始したことを上位レイヤーモジュールに通知します。

    • id: I-PDU の識別子。
    • info: トランスポートプロトコル I-PDU 受信の最初のフレームまたは単一フレームのペイロードデータ(プロトコル情報なし)とペイロード長、およびこの PDU に関連する MetaData を含む PduInfoType 構造体へのポインタ。 最初のフレーム/単一フレームデータも MetaData も利用できない場合、このパラメータは NULL_PTR に設定されます。
    • TpSduLength: トランスポートプロトコル SDU の長さ。
    • bufferSizePtr: 上位レイヤーモジュールで受信バッファとして使用できるバイト数へのポインタ。
  • PduR_<User:LoTp>TxConfirmation(PduIdType id, Std_ReturnType result): I-PDU がネットワーク上で送信された後に呼び出されます。結果は、送信が成功したかどうかを示します。

    • id: 送信された I-PDU の識別子。
    • result: 送信結果。
  • PduR_GetConfigurationId(PduR_PBConfigIdType* ConfigId): 現在の設定の ID を返します。

    • ConfigId: 現在使用されている post-build 構成の識別。 ECU には、それぞれに一意の ID がある複数の構成(post-build 選択可能)が含まれている場合があります。
  • PduR_GetVersionInfo(Std_VersionInfoType* Versioninfo): PduR モジュールのバージョン情報を返します。

    • Versioninfo: バージョン情報構造体へのポインタ。

注意

上記の PduR モジュールに関する情報は、AUTOSAR の仕様はバージョンによって異なる場合があります。

ユウタユウタ

AUTOSARにおけるデータ要素とPDU

表による解説

データ要素 説明 関連モジュール
DataElement アプリケーションが扱うデータの最小単位。例えば、車速やエンジン回転数など。 アプリケーション, RTE
Signal DataElementを通信用に表現したもの。複数のSignalをまとめてI-PDUを構成する。 COM, RTE
I-PDU COMモジュールが扱うPDU。複数のSignalをまとめて、ネットワーク間で送受信されるデータ単位。 COM, PDUR
N-PDU CanTPモジュールが扱うPDU。I-PDUをCANフレームの最大データ長(8byte)に収まるように分割/結合したもの。 CanTP, CanIf
L-SDU CanDrvモジュールが扱うSDU。CANフレームのデータ部分(最大8byte)。 CanDrv, CanIf, CAN Controller
L-PDU CanIfモジュールが扱うPDU。L-SDUとCAN IDを合わせたもの。 CanIf, CanDrv, CAN Controller
CAN Frame CAN BUS上で送受信されるデータの単位。CAN ID、データ長(DLC)、L-SDU、CRCなどの情報を含む。 CAN BUS, CAN Controller

mermaid図による解説

モジュール間の関係性

  • アプリケーション: アプリケーションは、RTEを通じてDataElementの値を読み書きします。
  • RTE: RTEは、アプリケーションとBSW間の通信を仲介します。
  • COM: COMモジュールは、SignalをI-PDUに、I-PDUをSignalに変換します。また、I-PDUの送信、受信、ルーティングを管理します。
  • PDUR: PDURモジュールは、I-PDUのルーティングを行います。つまり、どのモジュールにI-PDUを送信するかを決定します。
  • CanTP: CanTPモジュールは、I-PDUをN-PDUに分割/結合します。また、N-PDUのフロー制御を行います。
  • CanIf: CanIfモジュールは、N-PDUをL-PDUに変換し、CanDrvモジュールに送信します。また、CanDrvモジュールから受信したL-PDUをN-PDUに変換し、CanTpモジュールに送信します。
  • CanDrv: CanDrvモジュールは、L-PDUをL-SDUに変換し、CANコントローラに送信します。また、CANコントローラから受信したL-SDUをL-PDUに変換し、CanIfモジュールに送信します。
  • CanTrcv: CanTrcvモジュールは、CANトランシーバを制御します。
  • CanSM: CanSMモジュールは、CANネットワークのSleep/Wakeupや、CANコントローラの状態管理を行います。
  • CanNm: CanNmモジュールは、CANネットワークのノードの監視や、ネットワークの初期化を行います。
  • CAN BUS: CAN BUSは、CANノード間でデータを通信するための物理層です。
  • CAN Controller: CANコントローラは、CAN BUSに接続し、CANフレームの送受信を行います。

補足

  • SignalとDataElementの具体的な関係性については、ソースからは明確な情報を得ることができませんでした。
  • 上記の図と説明は、一般的なAUTOSARにおけるデータ要素とPDUの関係性を示したものであり、実装や設定によって異なる場合があります。
ユウタユウタ

AUTOSARのレイヤードアーキテクチャとOSI参照モデルの比較

OSI参照モデル AUTOSARレイヤ 説明 データ要素 PDU Signal
レイヤ7: アプリケーション層 アプリケーション層, RTE アプリケーション層は、**アプリケーションソフトウェアコンポーネント(SW-C)**が配置され、システムの機能を実現する層です。RTEは、SW-C間の通信や、SW-CとBSW間の通信を管理します。 DataElementはアプリケーション層のSW-C間で交換されるデータの最小単位であり、RTEによって管理されます。 AUTOSAR COMモジュールでは、メッセージをSignalと呼びます。 SignalはDataElementをまとめて、意味のあるデータとして扱います。
レイヤ6: プレゼンテーション層 データのフォーマット変換、暗号化、圧縮などを行う層ですが、AUTOSARでは通常明示的には実装されません。
レイヤ5: セッション層 通信セッションの確立、管理、終了を行う層ですが、AUTOSARでは通常明示的には実装されません。
レイヤ4: トランスポート層 CanTp CANネットワーク上で大きなデータを送受信するための分割/再構成処理を行います。 上位層からのI-PDUをCANのフレームサイズに分割して送信し、受信側では分割されたフレームを再構成してI-PDUを復元します。 CanTpは、PDU Routerを介してCOMモジュールとやりとりします。 COMモジュールはDataElementをSignalとして扱い、SignalをまとめてI-PDUとしてCanTpに渡します。 CanTpはI-PDUをCAN N-PDUに分割/再構成します。 CAN N-PDUはCanTpのPDUであり、CAN N-SDUとプロトコル制御情報を含みます。
レイヤ3: ネットワーク層 CanNm ネットワークの管理、ノードの状態管理、ノード間の通信制御を行います。 ノードのオンライン/オフラインの検知、ネットワークの休止/起動などを管理します。 CanNmはNM PDUを送受信します。
レイヤ2: データリンク層 CanIf CANコントローラへのアクセス、フレームの送受信、エラー処理、バスアクセス管理を行います。 上位層からの送信要求をCAN Driverに伝え、CAN Driverからの受信通知を上位層に伝えます。 CanIfはL-PDUをCanDrvに渡す/CanDrvから受け取りますL-PDUはCanIfのPDUであり、Identifier, DLC, Data (L-SDU)で構成されます。
レイヤ1: 物理層 CanDrv CANコントローラの制御、ビットの送受信、電気的信号の処理を行います。 ハードウェア依存の処理を抽象化し、上位層に統一的なインターフェースを提供します。

説明:

  • DataElement: AUTOSARでは、アプリケーション層のソフトウェアコンポーネント間で交換されるデータの最小単位です。例えば、車速やエンジン回転数などです。
  • PDU (Protocol Data Unit): 各層でやり取りされるデータの単位です。
  • Signal: AUTOSAR COMモジュールでは、メッセージをSignalと呼びます。 SignalはDataElementをまとめて、意味のあるデータとして扱います。
  • AUTOSAR: 車載ソフトウェア開発における標準規格です。
  • OSI参照モデル: ネットワーク通信を7つの層に階層化したモデルです。

補足:

  • 表では、各層に対応する代表的なAUTOSARモジュールを示しています。
  • すべてのAUTOSARモジュールがOSI参照モデルの特定の層に厳密に対応しているわけではありません。
  • AUTOSAR COMモジュールは、I-PDUの送受信、Signalのpacking/unpacking、Signalの通知、タイムアウト監視などの機能を提供します。
  • PDU Routerモジュールは、I-PDUのルーティング、つまり、送信元モジュールから適切な送信先モジュールへの転送を行います。
  • CanTpモジュールは、I-PDUがCANフレームサイズより大きい場合に、I-PDUを分割して送信し、受信側で再構成します。CAN FDの場合、I-PDUは最大64バイトまで送信できます。
  • CanNmモジュールは、CANネットワークのノードの状態管理、ノードの起動/休止制御、ネットワークのエラー処理などを行います。
  • CanIfモジュールは、CanDrvと上位層モジュール間のインターフェースを提供し、CANフレームの送受信、エラー処理、バスアクセス管理などを行います。
  • CanDrvモジュールは、CANコントローラを直接制御し、ビットの送受信、電気的信号の処理などを行います。
  • CANのデータフレームには、標準フォーマット (11 ビット) と拡張フォーマット (29 ビット) があります。 J1939 は、CAN の拡張フォーマットを使用します。

注意: この表は、提供されたソースに基づいて作成されています。ソースに記載されていない情報や、解釈が異なる部分がある可能性があります。

ユウタユウタ

CAN診断サービスID一覧表

サービスID (16進数) サービス名 説明
0x03 Can_GetControllerMode CANコントローラーの現在のモードを取得します。
0x11 Can_GetControllerErrorState CANコントローラーの現在のエラー状態を取得します。
0x13 Can_GetControllerRxErrorCounter CANコントローラーの受信エラーカウンターの値を取得します。
0x14 Can_GetControllerTxErrorCounter CANコントローラーの送信エラーカウンターの値を取得します。
0x21 Can_SetIcomConfiguration ICOM(Interaction Layer)の設定を行います。
0x04 CanIf_GetControllerMode CANインターフェースの現在のモードを取得します。
0x05 CanIf_ConfirmPnAvailability パーシャルネットワークの可用性を確認します。
0x07 CanIf_ReadTxNotifStatus 送信通知ステータスの値を読み取ります。
0x0b CanIf_GetPduMode PDU(Protocol Data Unit)の現在のモードを取得します。
0x4b CanIf_GetControllerErrorState CANインターフェースの現在のエラー状態を取得します。
0x00 CanIf_TxConfirmation 送信完了の確認を行います。
0x14 CanIf_RxIndication 受信完了の通知を行います。
0x81 CanIf_ControllerModeIndication CANコントローラーのモード変更の通知を行います。

注記: この表は、提供されたソースおよび以前の会話に基づいて作成されています。他のサービスIDや詳細については、AUTOSARの仕様書を参照する必要があるかもしれません。

ユウタユウタ

DIDとRIDのサービスID一覧とサービスの説明

DIDとRIDに関連するサービスIDとその説明を以下の表にまとめました。

サービスID サービス名 説明 DID/RID 関連情報(ソース)
0x22 ReadDataByIdentifier DIDの値を読み取る DID - Dcmは、ReadDataByIdentifierサービスを通じてDIDの値を読み取ることができます。
- このサービスは、DIDに対応するデータ要素の値を取得するために使用されます。
0x2E WriteDataByIdentifier DIDの値を書き込む DID - Dcmは、WriteDataByIdentifierサービスを通じてDIDの値を書き込むことができます。
- このサービスは、DIDに対応するデータ要素の値を設定するために使用されます。
0x2F InputOutputControlByIdentifier DIDに対応する入出力ポートを制御する DID - Dcmは、InputOutputControlByIdentifierサービスを介してDIDを制御するためのSenderReceiverインターフェースをサポートしています。
- このサービスは、DIDに対応するアクチュエータの動作やセンサーの読み取りなどを制御するために使用されます。
0x31 RoutineControl ルーチンを実行する RID - Dcmは、RoutineControlサービスを通じてRIDを実行することができます。
- このサービスは、特定の診断タスクを実行するルーチンを起動、停止、または結果を取得するために使用されます。

補足

  • 上記の表は、提供されたソースから抽出できた情報に基づいて作成されています。
  • DID、RIDの完全なサービスID一覧とその説明は、AUTOSARの仕様書や診断対象のECUの仕様書に記載されています。
  • サービスIDは16進数で表記されています。
  • DID、RIDの具体的な値や種類は、診断対象のECUの仕様によって異なります。

この回答は、提供されたソースとこれまでの会話に基づいています。DIDとRIDのサービスIDに関するより詳細な情報については、追加の調査が必要となる場合があります。

ユウタユウタ

DTCコードの先頭文字と意味

DTCコードの先頭文字は、診断対象のシステムを示しています。ソースから、以下の先頭文字とその意味を確認できます。

  • P: パワートレインシステム (Powertrain)
    • エンジン、トランスミッションなど、車両の走行に関わるシステムです。
  • C: シャーシシステム (Chassis)
    • ステアリング、サスペンション、ブレーキなど、車両の走行安定性に関わるシステムです。
  • B: ボディシステム (Body)
    • エアバッグ、ドアロック、パワーウィンドウなど、車両の車体に関わるシステムです。
  • U: ネットワークシステム (Network)
    • 車両内のECU間の通信ネットワークに関わるシステムです。

これらの先頭文字は、DTCコードの最初の文字として使用され、DTCがどのシステムに関連しているかを識別するのに役立ちます。 例えば、"P0127" はパワートレインシステムのDTC、 "U0003" はネットワークシステムのDTCであることを示しています。

補足

  • DTCコードは、通常2バイトまたは3バイトで構成され、先頭文字に加えて、具体的な故障内容を示す番号が含まれています。
  • 各システムグループには、ISO/SAEが管理する標準DTCと、メーカーが独自に定義できるDTCがあります。
  • DTCコードの詳細なリストとその意味については、SAE J2012 や ISO 15031-6 などの標準規格を参照する必要があります。
ユウタユウタ

DTCコード一覧

ソースには、特定のDTCコードとその意味の完全なリストは含まれていません。 しかし、ソースから理解できる範囲で、DTCコードの構造と、いくつかの具体的なコード例を以下にリスト化します。

DTCコードの構造

DTCコードは、車両の故障状態を識別するためのコードで、通常2バイトまたは3バイトで構成されます。

  • 2バイトDTC
    • 上位2ビット:診断対象のシステム(パワートレイン、シャーシ、ボディ、ネットワークなど)を示します。
    • 下位14ビット:故障の種類を示します。
  • 3バイトDTC
    • 上位2バイト:DTC番号を示します。
    • 下位1バイト:故障の種類をより詳細に示す「故障タイプバイト(FTB)」です。

具体的なDTCコード例

  • U0001: 高速CAN通信バスの故障
  • U0002: 高速CAN通信バスのパフォーマンス問題
  • U0003: 高速CAN通信バスのプラス側が開回路
  • U0004: 高速CAN通信バスのプラス側の電圧が低い
  • U0005: 高速CAN通信バスのプラス側の電圧が高い
  • U0006: 高速CAN通信バスのマイナス側が開回路
  • U0007: 高速CAN通信バスのマイナス側の電圧が低い
  • U0008: 高速CAN通信バスのマイナス側の電圧が高い
  • U0009: 高速CAN通信バスのマイナス側がプラス側に短絡
  • B1000: メーカーが独自に定義したボディシステムのDTC
  • C1000: メーカーが独自に定義したシャーシシステムのDTC
  • P1000: メーカーが独自に定義したパワートレインシステムのDTC
  • P2C00, P2D00, P2E00, P2F00: ISO/SAEが予約しているパワートレインシステムのDTC
  • P3000, P3100, P3200, P3300: メーカーが独自に定義したパワートレインシステムのDTC
  • P3500, P3600, P3700, P3800, P3900, P3A00, P3B00, P3C00, P3D00, P3E00, P3F00: ISO/SAEが予約しているパワートレインシステムのDTC

DTCコードの詳細なリスト

上記は、ソースから抜粋したDTCコードのごく一部です。 DTCコードの完全なリストとその意味については、以下の標準規格を参照する必要があります。

  • SAE J2012
  • ISO 15031-6

これらの規格は、DTCコードの定義、構造、および使用方法に関する詳細な情報を提供しています。

補足

故障タイプバイト (FTB) については、 から に、様々なFTBの値とその意味が記述されています。
FTBを用いることで、2バイトDTCで表現できる以上の詳細な故障の種類を特定できます。

ユウタユウタ

パワートレインシステムのDTCコードについて

パワートレインシステムのDTCコードは、Pで始まります。 このグループには、ISO/SAEが管理する標準DTCと、メーカーが独自に定義できるDTCがあります。

標準DTC

SAE J2012/ISO 15031-6で定義されている標準DTCには、以下のようなものがあります。

  • P0XXX: ISO/SAEが管理するDTC
  • P2XXX: ISO/SAEが管理するDTC
  • P0DXX, P0EXX, P0FXX: ISO/SAEが予約しているDTC
  • P2C00, P2D00, P2E00, P2F00: ISO/SAEが予約しているDTC
  • P3500, P3600, P3700, P3800, P3900, P3A00, P3B00, P3C00, P3D00, P3E00, P3F00: ISO/SAEが予約しているDTC

メーカー独自DTC

メーカーは、P1XXX, P3XXX などの範囲で、独自のDTCを定義できます。 例えば、以下のようなものがあります。

  • P1XXX: メーカーが独自に定義するDTC
  • P3XXX: メーカーが独自に定義するDTC (一部ISO/SAE予約)
  • P1000: メーカーが独自に定義したパワートレインシステムのDTC
  • P3000, P3100, P3200, P3300: メーカーが独自に定義したパワートレインシステムのDTC

DTCの詳細

具体的なDTCコードとその意味の完全なリストを取得するには、SAE J2012 や ISO 15031-6 などの標準規格を参照する必要があります。これらの規格は、DTCコードの定義、構造、および使用方法に関する詳細な情報を提供しています。

パワートレインシステムDTCの例

過去の会話で出てきたDTCコードの例として、以下のようなものがあります。

  • P0127: このコードは、パワートレインシステムのDTCですが、具体的な意味は標準規格を参照する必要があります。

補足

  • DTCコードは、車両の故障診断において重要な役割を果たします。
  • DTCコードを読み取ることで、車両のどのシステムにどのような問題が発生しているかを特定できます。
  • DTCコードは、診断テスターを使用して読み取ることができます。
  • DTCコードの詳細な情報は、車両の修理マニュアルやオンラインデータベースで入手できます。

この回答は、提供されたソースと過去の会話に基づいています。より詳細な情報については、SAE J2012 や ISO 15031-6 などの標準規格を参照してください。

ユウタユウタ

シャーシシステムのDTCコードについて

シャーシシステムのDTCコードは、Cで始まります。このグループにも、パワートレインシステムと同様に、ISO/SAEが管理する標準DTCと、メーカーが独自に定義できるDTCがあります。

標準DTC

SAE J2012/ISO 15031-6で定義されている標準DTCの中で、シャーシシステムに関連するものはC0XXXです。

メーカー独自DTC

メーカーは、C1XXX, C2XXX などの範囲で、独自のDTCを定義できます。 例えば、以下のようなものがあります。

  • C1XXX: メーカーが独自に定義するDTC
  • C2XXX: メーカーが独自に定義するDTC
  • C1000: メーカーが独自に定義したシャーシシステムのDTC
  • C2000: メーカーが独自に定義したシャーシシステムのDTC

ISO/SAE予約DTC

C3XXXはISO/SAEが将来の利用のために予約しているDTCです。

DTCの詳細

具体的なDTCコードとその意味の完全なリストを取得するには、SAE J2012 や ISO 15031-6 などの標準規格を参照する必要があります。これらの規格は、DTCコードの定義、構造、および使用方法に関する詳細な情報を提供しています。

補足

  • DTCコードは、車両の故障診断において重要な役割を果たします。
  • DTCコードを読み取ることで、車両のどのシステムにどのような問題が発生しているかを特定できます。
  • DTCコードは、診断テスターを使用して読み取ることができます。

より詳細な情報については、SAE J2012 や ISO 15031-6 などの標準規格を参照してください。

ユウタユウタ

ボディシステムのDTCコードについて

ボディシステムのDTCコードは、Bで始まります。 他のシステムと同様に、ボディシステムにもISO/SAEが管理する標準DTCと、メーカーが独自に定義できるDTCがあります。

標準DTC

SAE J2012/ISO 15031-6 で定義されている標準DTCの中で、ボディシステムに関連するものはB0XXXです。

メーカー独自DTC

メーカーは、B1XXX, B2XXX などの範囲で、独自のDTCを定義できます。 例えば、以下のようなものがあります。

  • B1XXX: メーカーが独自に定義するDTC
  • B2XXX: メーカーが独自に定義するDTC
  • B1000: メーカーが独自に定義したボディシステムのDTC
  • B2000: メーカーが独自に定義したボディシステムのDTC

ISO/SAE予約DTC

B3XXXはISO/SAEが将来の利用のために予約しているDTCです。

DTCの詳細

具体的なDTCコードとその意味の完全なリストを取得するには、SAE J2012 や ISO 15031-6 などの標準規格を参照する必要があります。これらの規格は、DTCコードの定義、構造、および使用方法に関する詳細な情報を提供しています。

補足

  • DTCコードは、車両の故障診断において重要な役割を果たします。
  • DTCコードを読み取ることで、車両のどのシステムにどのような問題が発生しているかを特定できます。
  • DTCコードは、診断テスターを使用して読み取ることができます。

より詳細な情報については、SAE J2012 や ISO 15031-6 などの標準規格を参照してください。