車載ネットワーク(12)LINのフレーム構造

LIN フレームは、マスタタスクが送信する「ヘッダ」部と、スレーブタスクが送信する「レスポンス」部で構成される(図1)。ヘッダ部は次の5つで構成される。

(1) Break fieldフレームの区切り(13ビット以上)
(2) Break delimiter次の Sync byte field 検出用区切り(1ビット以上)
(3) Sync byte fieldスレーブノードがクロック同期をとる領域(10ビット)
(4) Inter-Byte Space次の Protected identifier field 検出用区切り(0ビット以上)
(5) Protected identifier fieldスレーブタスク指定(10ビット)

「ヘッダ」部の最小長は34ビット(13+1+10+0+10=34)で、最大長は最小長に40%マージンを加えた値となる(34×1.4=47.6ビット)となる。上記の(1)から(5)までの長さが、47.6ビット時間に収まる必要がある。「Break field 13ビット以上」はマスタが送信する際の決まりで、スレーブ側での検出は、11ビット時間あれば検出ができる。このため、マスタ側の送信が13ビット長よりも若干短くなっても、マスタ⇔スレーブ間の通信が可能だ。マスタとスレーブのクロック精度の差などの要因を加味した柔軟な仕組みだ。

スレーブタスクが送信する「レスポンス」部は 1 ~ 8 バイトのデータで構成する。データの数はあらかじめ決めておく必要がある。

ヘッダとレスポンスを構成する各部は、基本的に図2 「バイトフィールド」と呼ぶ 8 ビットデータでできているが、 Break field はこのルールから外れ、13 ビット以上のドミナントで構成する。

LIN フレームフォーマット
図1 LIN フレームフォーマット

各領域の間は、「break delimiter」「Inter-byte space」「Response space」などの区切りビットが入る。

Byte Field フォーマット
図2 Byte Field フォーマット

ヘッダ

Break Field

Break Field は、新しいフレームが始まったことを示す。Byte Field フォーマット(図2)に従わない唯一のフィールドで、常にマスタが送信し、少なくとも13ビット長の「ドミナント」の後に、Break Delimiter が続く。Break Delimiter は1ビット以上の長さが必要。

Sync Byte Field

Sync Byte Field は、マスタが送信する Byte Field でデータは 0x55だ。スレーブは、Sync Byte Field の 1/0 の繰り返し波形から受信データの伝送速度を検出し、以降のデータ受信の基準クロックとなる。Sync Byte Field の後には、最小長さ0の Inter-Byte Space が続く。

Protected Identifier Field

Protected Identifier Field は、2つのサブフィールドで構成される。「フレーム識別」と「パリティ」だ。フレーム識別用に 6 ビットが割り当てられ、0 ~ 63 の範囲を使用でき、次の3つのカテゴリがある。

0 ~ 59 (0x3B)信号用
60 (0x3C)/ 61 (0x3D)診断とコンフィグ用
62 (0x3E)/63 (0x3F)予約(拡張用)

Parity は、図3 の様に割り当てられ、計算式は次式だ。

  • P0 = ID0 + ID1 + ID2 + ID4
  • P1 = (ID1 + ID3 + ID4 + ID5)

Rev 1.x には、ID4 と ID5 で 64 個のフレーム識別のセットを、それぞれ 2/4/8 個のデータフィールドを持つ 16 個の識別子の 4 つのサブセットに分割するオプションがある。

図3 Protected Identifier Fieldフォーマット
図3 Protected Identifier Fieldフォーマット

Data

1 ~ 8 バイトデータを伝送できる。

Checksum

フレームの最後のフィールドが Checksum だ。Rev 2x では、 Protected Identifier Field と Data が計算の対象で「 enhanced checksum 」、Rev 1x では Data のみが計算の対象 で「 classic checksum 」と呼ぶ。バージョンにより互換性がないので注意が必要だ。

送信ノードはチェックサムを計算し、 Checksum 領域に書き込む。Checksum の生成は8ビットデータを加算し、キャリーは LSB に加算する。全ての加算結果の逆数がChecksum Field(図4) に書き込まれる。受信ノードは受信データを順次加算し、最後に Checksum を加算した結果が「0xFF」になればデータが正しく受信できたと判断する。0xFF でない場合は、エラーが発生したと判断し、データを廃棄する。計算方法は、図5 の例を参照いただきたい。この例は、次の4 バイトを順次加算し、キャリーがあれば LSB(最下位)に加算する。最終加算結果を反転したものが「Checksum」になる。この例は、「LIN Specification Package Revision 2.2A」を引用している。

  • 0x4A/0x55/0x93/0xE5
図4 Checksum Field フォーマット
図4 Checksum Field フォーマット
図5 Checksum 計算例
図5 Checksum 計算例

車載ネットワーク

この記事を書いた人

岩崎 有平

早稲田大学 理工学部 電子通信学科にて通信工学を専攻。
安立電気(現 アンリツ)に入社後、コンピュータ周辺機器の開発を経てネットワーク機器の開発やプロモーションに従事する。
おもにEthernetを利用したリアルタイム監視映像配信サービスの実現や、重要データの優先配信、映像ストリームの安定配信に向けた機器の開発行い、Video On Demandや金融機関のネットワークシステム安定化に注力した。
現在は、Ethernetにおけるリアルタイム機能の強化・開発と普及に向けて、Ethernet TSNの普及活動を行っている。