技術情報
LIN通信プロトコル
概要
LINは、車両のバックボーン・ネットワーク以外の用途で、CANほど高いデータ伝送速度が求められない低コストのサブネットワークに向けて開発されました。CANの1/2~1/3ほどのコストで済む、単線式ネットワークです。
ドア・ユニット(ドア・ミラーやサイド・ウインドー、ドア・ロック)、エアコン、シート(座席)、サンルーフ、ヘッド・ライトなどの制御として、CANのサブネットワークとして使用されるケースが多いです。
通信プロトコルとして、パソコンのシリアルポートなどにも使われているUART(Universal Asynchronous Receiver Transmitter)を採用し、電源には12Vの車載バッテリを使います。
そのほか、次のような特徴を備えています。
1.マスターが通信を制御するマスター/スレーブ方式を採用。
2.シングル・マスター方式を採り、バス上に1つだけ存在するマスター・ノードが通信スケジュールを管理。そのため通信の衝突を起こさない。
3.ライン型のバス・トポロジを採用。
4.最大データ伝送速度は20kビット/秒。
1.LIN仕様の変遷
LINバージョン1.0は1999年7月に公開されました。これ以前にも、自動車メーカは車種ごとに独自サブネットを開発して製品に搭載していましたが、開発と保守の両コストの増大を招く結果となりました。しかし、この独自仕様のサブネットにはUART/SCI(※1)(UART:6.その他のLINの特徴 参照)を使用している例が多く、プロトコルをソフトウェアで規格化すれば標準化できると考えられ、この考えが後に、LINが開発されるきっかけとなりました。
※1)SCI:Serial Communication Interface.シリアル通信を行うインターフェース。
LIN1.0仕様のひな形としては、スウェーデンのある企業によって開発された「Volcano Lite」というバス規格をベースにしていました。その後、LIN規格は幾度とアップデートされました(図10.1参照)。2000年3月にLIN1.1が、2000年11月にLIN1.2が公開され、その後、2002年12月にLINコンソーシアムはLIN1.3を公開しました。このときの変更は物理層とノード間の互換性の改善が中心でした。2003年9月にはLIN2.0が公開されました。LIN2.0はLIN1.3に対して大きく手を加えています。問題のある部分を明らかにし、信頼性を向上させ、LIN対応機器のプラグ・アンド・プレイを可能にする機能が追加されています。また、2006年にはLIN2.1が正式公開されています。
2.LINプロトコルの基本概念
LINはOSI参照モデルのネットワーク層、データリンク層、物理層を含むプロトコルです。LINはOSI参照モデルの各層に対して上記のように定義しています。
特にデータリンク層はMAC層(Media Access Control:媒体アクセス制御)とLLC層(Logical Link Control ; 論理リンク制御)に分けられており、特にMACサブ層はLINプロトコルの核となる機能を有しています。
・MAC(Media Access Control)サブ層
LLCサブ層から受け取ったメッセージを送出し、LLCサブ層に送られるメッセージを受け取ります。
・LLC(Logical Link Control)サブ層
メッセージの選別とリカバリの管理を行います。
また、物理層では信号が実際にどの様に送信されているのかを定義しています。LINプロトコルではこれをトランシーバ/レシーバ特性として定義しています。
3.LINバスの構成
車内の各ECUは、トランシーバIC(データの送受信を行う電子部品)を介してLINネットワークに接続され、それぞれのECU間は1本のバスでネットワーク接続されます。このバスケーブルは、1本のメタル線が用いられています。他の車内LANの接続では、メタル線2本をより合わせた「より対線」が用いられるため、LIN通信を適用することで、ワイヤハーネスの削減に貢献します。
また、LINにおいてECUは2種類の通信ノードが組み込まれます。1つは「マスタノード」といい、通信スケジュールの管理をします。もう1つは「スレーブノード」といい、マスタノードの要求に従いレスポンスを返します。スレーブノードはマスタノードの指示がない限り機能しません。また、マスタノードはスレーブノードの機能も持ち合わせています。
マスタノードはネットワーク上に1つだけ存在し、スレーブノードは機能ごとに用意されるため、シングルマスタ/マルチスレーブ方式となります。通信スケジュールをネットワーク上で唯一のマスタノードが管理することから、送信タイミングの衝突は起こりません。
すべてのスレーブノードはマスタノードが管理するため、たとえば後からスレーブノード(ECU)を追加したとしても、そのスレーブノードはマスタノードの管理下に設定しない限り、通信することはできません。各スレーブノードはマスタノードから送られるメッセージが自分宛かを判断して、レスポンスを返す仕組みになっているため、マスタノードに新しいスレーブノードについての設定を追加するだけでよく、その他のスレーブノードにはハードウェアやソフトウェアの変更が必要ありません。
また、LINバス上の1つのスレーブノードのECUに何らかの障害が発生した場合、そのECUとの通信を行うことはできませんが、LINバス上の他のネットワーク処理は続行されます。しかし、マスタノードECUに障害が発生した場合、スケジュール管理がされず、通信が開始されないため、他のスレーブノードが正常であったとしても、LIN通信は途絶えてしまいます。
また、LINバス最長は40mとなっており、接続ノードは最大16ノードまで可能です。さらに、転送速度最大は20kbpsと規定されています。この値はシングルワイヤ通信方式のEMI制限に依存して定められています。EMIとは電磁波ノイズのことであり、EMIの強度が大きいと、周囲の機器に誤動作などの悪影響を及ぼすことがあります。そのため、各国が電子機器のEMIの上限を定めています。なお、実際に使われている転送速度としては、UARTなどで設定できる転送速度が利用できますが、2.4kbps、9.6kbps、10.4kbps、19.2kbpsが推奨転送速度として使われています。
4.LINの通信フレーム
ここではLINのフレームについて詳しく説明します。LINバス上を移動する信号の基本単位を「フレーム」と呼びます。LINのフレームは、マスタノードから出力される「ヘッダ」と、スレーブノードから出力される「レスポンス」で構成されます(下記画像参照)。
ヘッダはブレーク(SYNC_BREAK)、同期バイト(SYNC_FIELD)、識別子(IDENT_FIELD)で構成され、レスポンスはデータ(DATA_FIELD)、チェックサム(CHECKSUM_FIELD)で構成されています。それぞれの内容について、表にまとめます。
名称 | 内容 | 値 |
---|---|---|
ブレーク (SYNC_FIELD) |
新しいフレームの始まりを示す可変長のフィールドで、 スタートビットと後に続くブレーク境界(ブレーク 信号の終わりを示す)で構成されます。 |
最小13ビット、最大16ビットの0(固定値ゼロ)で表します。 ※一般的なブレーク長は13ビットです。 |
同期バイト (SYNC_FIELD) |
スレーブがマスタと同期をとって通信を行うための固定長 (10ビット)のフィールドです。 マスタが送ってきた同期バイト中の”0x55″をスレーブが 正常に受信できていれば同期が取れます。 |
固定長(10ビット)で表します。ビットごとの内容は |
識別子 (IDENT_FIELD) |
フレームの種類を指定する固定長(10ビット)のフィー ルドです。 識別子は0~63(6ビット)の値をとります。 また、この識別子はマスタが個々のスレーブを指定 するためにも使います。 |
識別子を表す0~63(6ビット)に続いて2ビットのパリティ ビットがあります。 その前後に同期バイトと同様に、1ビットのスタートビットと 1ビットのストップビットがあるため、全体で10ビット長 となります。 |
データ (DATA_FIELD) |
データそのものを転送する可変長のフィールドです。 データサイズはあらかじめ取り決められたバイト数 (1~8バイト)のデータを伝えます。 |
1ビットのスタートビットと1ビットのストップビットを 1バイトのデータに加え10ビットとなります。 このため、データのフィールド長は「バイト数×10ビット」 となります。 |
ここで、LINのバスレベルについて説明します。一般的なデジタル信号では、値をHigh/Lowで表しますが、LINのバス信号は、「ドミナントレベル」と「レセシブレベル」で表します。ドミナントは”優先的”、レセシブは”受容的”という意味で、ドミナントレベルのほうがレセシブレベルより高優先です。各レベルのビット値はドミナント=0、レセシブ=1をとり、バス電圧はドミナント=0V、レセシブ=12~24V(バッテリ電圧)となります。バスにつながるノードが一つでもドミナントレベルを出力すると、バスのレベルはドミナントになります。逆に、バスにつながるすべてのノードがレセシブレベルを出力しなければ、バスのレベルはレセシブレベルになりません。以下の図はLINフレームのバスレベルについて表したものです。
前述のとおり、LINバス上にはマスタノードとスレーブノードが存在し、通信スケジュールをマスタノードが管理します。ここでは、LIN通信における通信スケジュールについて説明します。マスタノードと2つのスレーブノードの間の通信内容を例に図6に示します。
マスタECUからは、データ送信するメッセージIDを含むメッセージヘッダを送信します。各ECUは送信されたメッセージヘッダに自ECUが対応すべきIDを含んでいる場合に、当該するメッセージレスポンスを送信データとして送出します。結果として、LINネットワーク上に送出されるデータは、メッセージヘッダとメッセージレスポンスが1組になるメッセージフレームが送信されます。
5.LIN通信手順
具体的にLINの通信がどのような手順で行われているかについて、図を用いて説明します。
前述の通り、LINの通信はマスタから開始されます。マスタはアクションを行わせたいスレーブのIDを含むヘッダを、図のスケジュールテーブルにあるように【ID1→ID3→ID2→ID4→ID1…(以降繰返し)】の順番で送信していきます。送信されたヘッダはLINバスで繋がれたマスタを含む全てのノードに送られ、各ノードは送られてきたヘッダが自分の担当IDである場合にレスポンスを返します。
下記画像の場合、まずマスタからID1宛のヘッダが送信されます。ID1のアクションを担当しているノードはLINバス上にレスポンスを返します。レスポンスはヘッダと同様にLINバス上の全てのノードに送信され、送信担当ではないノードがもつ、データ格納バッファにレスポンスのデータ情報が格納されます。
マスタは前回の送信を行ってから周期設定した50ms後、次のID3を含むヘッダの送信を開始します(下記画像を参照)。ヘッダを受けたノードは先ほどと同様に、自分が担当しているIDを含むヘッダが送られてきた際にはレスポンスを返し、他のノードが担当するIDを含むヘッダが送られてきた際には、他のノードからのレスポンスを受信します。受信したレスポンスのデータ情報は格納バッファに格納され、次の通信を待ちます。
続いてマスタはID2のヘッダを送信します(下記画像を参照)。この例のように、マスタとスレーブの機能はスケジュール機能以外については同じ機能を持ちます。マスタから送信されたヘッダは他のスレーブと同様に、マスタが受け取り、レスポンスを返します。また、マスタは他のノードと同様に、他のスレーブから送られてきたレスポンスのデータを格納するバッファを持っています。
また、各ノードはスレーブCのように複数のIDを担当することができます。つまり、ID3のヘッダが送られたときはデータAのレスポンスを返し、ID4のヘッダが送られたときはデータBのレスポンスを返すというように、機能を複数持たせることができます。
スケジュールテーブルに書かれているIDを一通り送信すると、マスタは2順目のヘッダ送信を行います。その際、ノードから返されたレスポンスデータは、該当ID用の格納バッファに上書きされていきます(下記画像を参照)。
ここで、誤った設定をした際のLIN通信を例に挙げます(図11)。マスタの通信周期の設定をこれまでは50msとしていましたが、この周期を5msに設定した場合を見てみましょう。マスタはID1宛のヘッダを送信し、5ms待った後、ID3宛のヘッダを送信します。しかし、このときスレーブからのレスポンスは送信が完了しておらず、LINバス上でマスタから送られたID3宛のヘッダと衝突を起こし、通信が途絶えてしまいました。
マスタは前回の通信の完了を待たずに、周期設定した時間を待った後、次のヘッダ送信を開始してしまいます。LINバスは1本のメタル線を用いているため、同時に双方向の通信は行えません。そのためLINでは、LINバス上で情報が衝突するのを防ぐため、マスタのヘッダ送信周期間隔を、マスタがヘッダを送信してから、スレーブがレスポンスを送信完了するのに十分な時間を設定する必要があります。
6.ウェイクアップ/スリープモード
LINは電源マネジメントを使用することにより、ECUの低消費電力化を測ることが可能です。
(ア)ウェイクアップ
スリープ中におけるすべてのLINノードはウェイクアップを要求できます。ウェイクアップの要求は、LINバスを250us~5msドミナントレベルにすることにより発生します。
電源と接続されているすべてのスレーブノードは、ドミナントを150us以上検出したことによりウェイクアップ要求を認識し、ドミナントの終了から100ms以内に、受信可能な状態になるための準備をします。マスタノードもウェイクアップし、ヘッダを送信することによりウェイクアップ要求の発生理由を確認します。
ウェイクアップ要求から150msの間にマスタノードがヘッダを送信しない場合は、ウェイクアップ要求を行ったノードが新たなウェイクアップ要求を発生します。3度のリトライが失敗した場合、ウェイクアップ要求ノードはさらに1.5s以上待ってから4回目のウェイクアップ要求を発生させます。
(イ)スリープ
活動中のクラスタのすべてのノードは、Data Fieldの1バイト目が”0″の診断マスタ要求フレーム(ID=0x3c)を送信することで、すべてのスレーブノードをスリープモードにすることができます。この特殊な診断フレームは「go-to-sleep(強制スリープ)」といいます。
なお、LINバスが4s以上レセシブ(活動がない状態)になると、スレーブノードは自動的にスリープモードに入ります。
7.エラー機能
通信の信頼性確保のため、LINはフレーム内にチェックサムフィールドを含みます。また、LINプロトコルでは以下の6種類のエラーにも対応しています。
これらのエラーに対する処置はLINプロトコルでは特に規定されておらず、通常、アプリケーション側で対処します。
8.その他のLINの特徴
・UARTベース
LINプロトコルの構成は、UART(Universal Asynchronous Receiver Transmitter)がベースとなっています。このため、既存デバイスのUART機能を使用したソフトウェアによるLIN通信も可能です。UARTの目的は、PC のパラレルバスからやってくるバイトデータをシリアルのビットストリームに変換することです。シリアルポートから出ているケーブルはデータをシリアル(直列)に送るようになっており、データが流れる方向それぞれについて1つしか線がありません。シリアルポートは一度に1 ビットずつビットストリームを送ります。逆に、外付けケーブルを経由してシリアルポートに入ってきたビットストリームは、コンピュータが処理できるパラレルなバイトデータに変換されます。UART はデータをバイト単位で扱います。通信速度は、およそ2400~19200bit/sが使われています。
ご相談・ご質問等ございましたら、
お気軽にお問い合わせください。
名古屋市中区栄三丁目3番21号セントライズ栄6階 TEL (052)220-1218 / FAX (052)218-5855