連載
» 2008年07月09日 00時00分 UPDATE

車載ネットワーク“CANの仕組み”教えます(2):CAN通信におけるデータ送信の仕組みとは? (3/3)

[増田浩史(ベクター・ジャパン),@IT MONOist]
前のページへ 1|2|3       

通信調停

 CANで採用しているCSMA/CAでは、バス使用中に他ノードはデータフレームやリモートフレームを送信することができない仕様になっている。

 しかし、実際には複数ノードから同時に送信されてしまうことを防ぐことができない。そのため、通信調停を行う必要がある。

 CANにおいて通信調停に使用されるのは図6のIDとRTRだ(ここでは標準フォーマットを例に解説する)。


通信調停 図6 通信調停
※ベクター・ジャパンの資料を基に作成

 それでは、実際の通信調停がどのように行われているのかを見てみよう。

 図7に、ID 0x653と0x65Bの2台のノードより同時にデータフレームが送信された場合を示す。

通信調停の例 図7 通信調停の例
※ベクター・ジャパンの資料を基に作成

 同時にデータフレームが送信される場合、複数ノードからの開始位置は同一となる。はじめにSOFが送信されるが、SOFは1ビット長のドミナント固定となっており、バスの状態はドミナントとなる。

 各ノードは自身が送信したものとバス状態をモニターし比較するが、SOFにおいては各ノード自身が送信した内容のままになっていると判断し送信を継続する。

 続いて、IDが1ビットずつ送信されるが、送信中の複数ノードの送信ビットが同一、例えば複数ノードからリセッシブが送信されればバスはリセッシブとなり、送信した内容そのままとなる。

 リセッシブとドミナントが別々のノードより同時に送信された場合、ドミナントが優先され、バスの状態はドミナントとなる。このとき、リセッシブを送信したノードは自身が送信したものとバス状態の違いにより、通信調停に負けたことを検出し送信を停止する。

 このことより、複数ノードから同時送信が起こってしまった場合、他ノードがリセッシブ送信を行っているときにドミナントを送信したノードが通信調停に勝つので、優先順位が高いIDは0x0であり、IDの値が小さいものほど優先順位が高くなる。

 IDの割り当てについてはデータフレームのデータフィールドの割り当てと同様に、設計者が自由に割り当てできるが、通信調停時の優先順位の関係で重要度の高いものはIDの値を小さくするなど、ネットワーク全体を考慮する必要がある。

 基本的にはIDのみで通信調停が行えるが、なぜRTRも通信調停に使用するのか? それは、同じIDのデータフレームとリモートフレームが同時に送信された場合、IDのみでは調停は行えないからである。このようなことが起きた場合、IDだけではなくRTRも使用して通信調停を行うが、データフレームではRTRはドミナント、リモートフレームではRTRはリセッシブであるため、データフレームが優先されることになる。



 さて、次回は残る2つのフレーム「オーバーロードフレーム」と「エラーフレーム」と、エラー処理について解説する予定だ。(次回に続く)

【 筆者紹介 】
増田 浩史(ますだ ひろし)
ベクター・ジャパン株式会社 トレーニング部 チームリーダー

ベクター・ジャパンのトレーニング部 講師としてCAN、LINといったさまざまな通信プロトコルや開発ツールを対象としたトレーニングサービスに従事。受講者のレベルに応じて最適なトレーニングを提供できるように日々業務に取り組んでいる。

ベクター・ジャパン
http://www.vector-japan.co.jp/
トレーニングサービスの概要
http://www.vector-japan.co.jp/vj_training_jp,,6863.html


前のページへ 1|2|3       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.