連載
» 2010年11月16日 00時00分 UPDATE

車載ネットワーク「LIN」入門(3):LIN2.0/LIN2.1の新仕様 (1/2)

今回はLIN2.0/LIN2.1で追加された「ステータスマネジメント」「診断」「ノードコンフィグレーションと識別」「ノード機能ファイル」を解説する!!

[倉田正人(ベクター・ジャパン),@IT MONOist]

 前回までは、LINプロトコルの特徴やフレーム構造、フレームタイプといったLINプロトコルの概要について説明しました。

 最終回となる今回は、LIN2.0/LIN2.1で追加された「ステータスマネジメント」「診断」「ノードコンフィグレーションと識別」「ノード機能ファイル」について詳しく説明します。

1.ステータスマネジメント

 LIN2.0では、各スレーブノードがエラーを検知した際に、マスターノードに報告するステータスマネジメントが追加されました。

 これにより、マスターノードはエラーの発生や原因となるノードの特定ができるので、より適切なリカバリ制御や処理が可能となります。ただし、連載第2回でも説明したとおり、LINの仕様にはエラー処理が定義されていないため、別途アプリケーションで定義する必要があります。

 各スレーブノードは、マスターノードにエラー状況を報告するために、送信するアンコンディショナルフレームの1つ(ステータス管理フレーム)に、1ビットのレスポンスエラー(response_error)シグナルを定義します。

 このレスポンスエラーシグナルは、フレームのレスポンスでエラーが検出された場合にスレーブノードのドライバにより自動的に設定されます。また、ステータス管理フレームの送信が完了すると、このシグナルは自動的にクリアされます。

2.診断

 車載ネットワークにおける“診断”とは、ECUが自身の状態を判断すること、または外部からECUの状態を読み出し判断することにより、ECUの故障を診断するものです。

 外部から診断を行う場合、診断テスターなどの「情報を読み出す側」から「対象となるECU」に対し、「診断要求(リクエスト)」を送信します。診断要求を受信したECUは要求に応じた処理を行い、「診断応答(レスポンス)」によって結果を返信します。

 この診断応答には、受信した診断要求を正常に処理できた場合に送信される「肯定応答(ポジティブレスポンス)」と、エラーなどで処理できなかった場合に送信される「否定応答(ネガティブレスポンス)」の2種類があります。

 LIN2.0では、この診断の仕様が追加されました。マスターノードとスレーブノードでは、以下のように診断の方法が異なります。

マスターノードを診断する場合
マスターノードは、通常CANなどの基幹ネットワークと接続されます。そのため、LINではなく基幹ネットワークを使用します。

スレーブノードを診断する場合
LIN通信は、マスターノードが通信制御を行うため、スレーブノードは診断テスターと直接通信できません。そのため、マスターノードを経由して行います。

LIN2.0で追加された「診断」の仕様 図1 LIN2.0で追加された「診断」の仕様(※ベクター・ジャパンの資料を基に作成)
※マスターノードの診断(左図)は、CANなどの基幹ネットワークを使用する。スレーブノードの診断(右図)は、マスターノードを経由(ゲートウェイ)して、LINネットワークを使用する

 このように、LIN通信を用いた診断はスレーブノードに対してのみ使用され、マスターノードはスレーブノードに診断要求を、スレーブノードはマスターノードに診断応答を送信します。

 次項では、診断で使われる通信手順「トランスポートプロトコル」について説明します。

トランスポートプロトコルとは

 トランスポートプロトコルとは、OSI参照モデルのネットワーク層の通信手順で、LINでは8バイトを超えるデータを分割して送受信する際に使用します。LINのトランスポートプロトコルは、基本的にCANで使われている「ISO 15765-2」と同じで、データバイト内の一部に特別な情報を格納して送信されます。

 LIN2.xでは、このトランスポートプロトコルを診断、ノードコンフィグレーションと識別に使用します。

 トランスポートプロトコルを用いた通信では、診断フレーム(ID:0x3C、0x3D)を使用します。マスターノードは、対象となるスレーブノードに「マスターリクエストフレーム(ID:0x3C)」を送信し、診断要求(リクエスト)や設定の変更などを行います。また、診断要求を受信したスレーブノードは「スレーブレスポンスフレーム(ID:0x3D)」を使用し、診断応答(レスポンス)や設定変更の結果をマスターノードに送信します。スレーブノードの識別には、スレーブノードごとに割り振られたノードアドレス(NAD)を使用します(図2)。

スレーブノードの識別 図2 スレーブノードの識別(※画像提供:ベクター・ジャパン)
※診断フレームのフレームIDは共通となるが、NADを使用することでスレーブノードごとに個別の診断フレームを送信できる

トランスポートプロトコルのLINフレーム(データバイト)構造

 トランスポートプロトコルを使用した場合、データバイトには下記の値が格納されます(表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つのフレームで送信する「非分割送信(シングルフレーム送信)」
  • 複数のフレームを使用して送信する「分割送信(マルチフレーム送信)」

■非分割送信(シングルフレーム送信)

 送信するデータが、1つのフレームに収まる場合に使用されます。PCIには「0x01〜0x06(データ長1バイトから6バイトのシングルフレーム)」が格納されます。

非分割送信について(1) 図3 非分割送信について(1)(※画像提供:ベクター・ジャパン)
※データバイトの最初3バイトにNAD、PCI、SID(RSID)を格納するため、シングルフレームで送信できるデータはSID(RSID)を含め、最大6バイトとなる。つまり、SIDを含めて7バイト以上のデータを送信する場合はマルチフレームを使用する

 受信したスレーブノードが要求を処理できない場合(受信したサービス(SID)が未対応など)、否定応答となります。否定応答ではサービスに関係なく、PCIは「0x03(データ長3バイトのシングルフレーム)」、RSIDは否定応答を表す「0x7F」になります。また、D1はSID、D2はエラーコード、D3〜5は使用しないため「0xFF」になります(図4)。

非分割送信について(2) 図4 非分割送信について(2)(※画像提供:ベクター・ジャパン)

■分割送信(マルチフレーム送信)

 送信するデータが、1つのフレームに収まらない場合に使用されます。マルチフレームには、最初のフレーム「First Frame(FF)」と2つ目以降のフレーム「Consecutive Frame(CF)」の2種類があります。

分割送信について 図5 分割送信について(※画像提供:ベクター・ジャパン)
※マルチフレームの最初のLINフレームはFF、2つ目以降はCFと呼ばれる。すべてのデータが送信されるまでCFを送信する

 また、LIN2.1では1つのマスターリクエストフレームで全スレーブノードに診断要求を行う「ファンクショナルアドレッシング」の仕様が追加されました。ファンクショナルアドレッシングで送信する場合、ノードアドレスには「ファンクショナルノードアドレス(0x7E)」が格納されます。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.