今回はLIN2.0/LIN2.1で追加された「ステータスマネジメント」「診断」「ノードコンフィグレーションと識別」「ノード機能ファイル」を解説する!!
前回までは、LINプロトコルの特徴やフレーム構造、フレームタイプといったLINプロトコルの概要について説明しました。
最終回となる今回は、LIN2.0/LIN2.1で追加された「ステータスマネジメント」「診断」「ノードコンフィグレーションと識別」「ノード機能ファイル」について詳しく説明します。
LIN2.0では、各スレーブノードがエラーを検知した際に、マスターノードに報告するステータスマネジメントが追加されました。
これにより、マスターノードはエラーの発生や原因となるノードの特定ができるので、より適切なリカバリ制御や処理が可能となります。ただし、連載第2回でも説明したとおり、LINの仕様にはエラー処理が定義されていないため、別途アプリケーションで定義する必要があります。
各スレーブノードは、マスターノードにエラー状況を報告するために、送信するアンコンディショナルフレームの1つ(ステータス管理フレーム)に、1ビットのレスポンスエラー(response_error)シグナルを定義します。
このレスポンスエラーシグナルは、フレームのレスポンスでエラーが検出された場合にスレーブノードのドライバにより自動的に設定されます。また、ステータス管理フレームの送信が完了すると、このシグナルは自動的にクリアされます。
車載ネットワークにおける“診断”とは、ECUが自身の状態を判断すること、または外部からECUの状態を読み出し判断することにより、ECUの故障を診断するものです。
外部から診断を行う場合、診断テスターなどの「情報を読み出す側」から「対象となるECU」に対し、「診断要求(リクエスト)」を送信します。診断要求を受信したECUは要求に応じた処理を行い、「診断応答(レスポンス)」によって結果を返信します。
この診断応答には、受信した診断要求を正常に処理できた場合に送信される「肯定応答(ポジティブレスポンス)」と、エラーなどで処理できなかった場合に送信される「否定応答(ネガティブレスポンス)」の2種類があります。
LIN2.0では、この診断の仕様が追加されました。マスターノードとスレーブノードでは、以下のように診断の方法が異なります。
このように、LIN通信を用いた診断はスレーブノードに対してのみ使用され、マスターノードはスレーブノードに診断要求を、スレーブノードはマスターノードに診断応答を送信します。
次項では、診断で使われる通信手順「トランスポートプロトコル」について説明します。
トランスポートプロトコルとは、OSI参照モデルのネットワーク層の通信手順で、LINでは8バイトを超えるデータを分割して送受信する際に使用します。LINのトランスポートプロトコルは、基本的にCANで使われている「ISO 15765-2」と同じで、データバイト内の一部に特別な情報を格納して送信されます。
LIN2.xでは、このトランスポートプロトコルを診断、ノードコンフィグレーションと識別に使用します。
トランスポートプロトコルを用いた通信では、診断フレーム(ID:0x3C、0x3D)を使用します。マスターノードは、対象となるスレーブノードに「マスターリクエストフレーム(ID:0x3C)」を送信し、診断要求(リクエスト)や設定の変更などを行います。また、診断要求を受信したスレーブノードは「スレーブレスポンスフレーム(ID:0x3D)」を使用し、診断応答(レスポンス)や設定変更の結果をマスターノードに送信します。スレーブノードの識別には、スレーブノードごとに割り振られたノードアドレス(NAD)を使用します(図2)。
トランスポートプロトコルを使用した場合、データバイトには下記の値が格納されます(表1)。
名称 | 意味 | |
---|---|---|
NAD(Node Address) | ノードを特定するために各スレーブノードに割り振られたアドレス。データバイトの1バイト目に格納する | |
PCI(Protocol Control Information) | 上位4ビットで「フレームの種類(PCIタイプ)」、下位4ビットで「データ長」を表す。データバイトの2バイト目に格納する ・上位4ビットが0000:Single Frame(SF) ・上位4ビットが0001:First Frame(FF) ・上位4ビットが0010:Consecutive Frame(CF) |
|
LEN(Length) | データ長。最大4095バイト | |
SID(Service Identifier) | 診断要求の意味(サービス)を表す | |
RSID(Response Service Identifier) | 診断応答の意味(サービス)を表す。SIDに0x40を加算した値が格納される(SIDが「0x10」の場合、RSIDは「0x50」となる) | |
Err(Error Code) | 否定応答で使用し、エラーの意味を表す | |
D1〜D6 | データバイト。SID、RSIDにより格納する情報が異なる。各フレームのデータ長は8バイト固定で、使用しないデータバイトには「0xFF」が格納される | |
表1 トランスポートプロトコルを使用した場合のデータバイトの値 |
トランスポートプロトコルの送信方法には、下記の2種類があります。
■非分割送信(シングルフレーム送信)
送信するデータが、1つのフレームに収まる場合に使用されます。PCIには「0x01〜0x06(データ長1バイトから6バイトのシングルフレーム)」が格納されます。
受信したスレーブノードが要求を処理できない場合(受信したサービス(SID)が未対応など)、否定応答となります。否定応答ではサービスに関係なく、PCIは「0x03(データ長3バイトのシングルフレーム)」、RSIDは否定応答を表す「0x7F」になります。また、D1はSID、D2はエラーコード、D3〜5は使用しないため「0xFF」になります(図4)。
■分割送信(マルチフレーム送信)
送信するデータが、1つのフレームに収まらない場合に使用されます。マルチフレームには、最初のフレーム「First Frame(FF)」と2つ目以降のフレーム「Consecutive Frame(CF)」の2種類があります。
また、LIN2.1では1つのマスターリクエストフレームで全スレーブノードに診断要求を行う「ファンクショナルアドレッシング」の仕様が追加されました。ファンクショナルアドレッシングで送信する場合、ノードアドレスには「ファンクショナルノードアドレス(0x7E)」が格納されます。
Copyright © ITmedia, Inc. All Rights Reserved.