連載
» 2011年03月29日 11時27分 公開

FlexRayプロトコルの概要(その2)次世代車載ネットワーク FlexRay入門(3)(3/3 ページ)

[丹野 清嗣 ベクター・ジャパン,@IT MONOist]
前のページへ 1|2|3       

3.スタートアップ

 連載第2回の「POC(Protocol Operation Control)の状態遷移」でも示した通り、通信開始に向けた準備段階、通信開始までのプロセスをFlexRayでは“スタートアップ”と呼びます。このスタートアップにて各ノードがどのようにタイミングを合わせて通信を開始するのかを説明します。

 通信中における“同期方法”では複数の同期ノードが基準となって同期を図っていましたが、スタートアップ時でも“コールドスタートノード(Coldstart Node)”という複数の特別なノードが中心になって同期を図ります。またコールドスタートノードが送信し、送信開始に向けたタイミング合わせのために使用されるフレームを“スタートアップフレーム”といいます。コールドスタートノードは必ず同期ノードであり、スタートアップフレームは必ず同期フレームです。

 主な特性を以下に示します。

  • スタートアップのためには、1つのクラスタに少なくても2つのコールドスタートノードが必要
  • リーディングコールドスタートノード(Leading Coldstart Node):最初に起動するコールドスタートノード
  • フォローイングコールドスタートノード(Following Coldstart Node):リーディングコールドスタートノードに同期を取るコールドスタートノード
  • これらリーディングコールドスタートノードやフォローイングコールドスタートノードとなるノードは事前に定義されず、実行時に決まる


  • 2チャンネル(A/Bチャンネル)を装備したシステムの場合、スタートアップは両チャンネル同時に実施される

 大まかなスタートアップ手順は、以下の通りです。

①複数のコールドスタートノードのうちの1つが、“CAS(Collision Avoidance Symbol)”と呼ばれるシンボル――いわゆる“合図”を送ります。これがリーディングコールドスタートノードです。

②その後、リーディングコールドスタートノードは最初のスタートアップフレームを送信します。その後、計4サイクルにわたって、スタートアップフレームを送信し続けます。

③1つ以上のフォローイングコールドスタートノードは、リーディングコールドスタートノードが送信したスタートアップフレームを検出し、サイクル0〜3の間に同期を試みた後、サイクル4〜6中にスタートアップフレームを送信します。

④その他のノードが送信された最低2つのスタートアップフレームに対して、自身を同期させて、通信に参加します。


スタートアップ手順のイメージ 図15 スタートアップ手順のイメージ(※ベクター・ジャパンの資料を基に作成)

スタートアップの具体例

 簡単な例を基にスタートアップの手順や各ノードの動作をもう少し詳しく紹介します。

 まず、ノードの構成は以下の通りとします。コールドスタートノード数=2と最小構成です。

  • ノードA:コールドスタートノード(リーディングコールドスタートノード)
  • ノードB:コールドスタートノード(フォローイングコールドスタートノード)
  • ノードC:通常のノード(コールドスタートノードではない)

 ノードA→ノードB→ノードCの順番で通信を開始する具体的なフローは以下の通りです。

スタートアップの具体例 図16 スタートアップの具体例(※FlexRay Specification V2.1 Rev.Aから抜粋/編集)

ノードAが自身のコントローラのステートをスタートアップに移行します。またバスの通信状況を確認し、通信がされていないことを確認します。

ノードAはリーディングコールドスタートノードとなり、CASを送信します。

このCASにより、他のノードBとCはノードAを検知します。

CAS送信から特定時間が経過後、通信サイクルがサイクル0から始まります。ノードAはサイクル0にて最初のスタートアップフレームを送信します。その後、計4サイクルにわたって(サイクル0〜3)、スタートアップフレームを送信し続けます。

FlexRayプロトコルでは、コールドスタートノードと定義されている全てのノードがリーディングコールドスタートとなってCASを送信できるため、ノードBもほぼ同時にCASを送信する可能性があります。仮にノードAがCAS送信後にノードBが送信するCASを受信したとき、ノードAが直ちに①の“バスの通信状況を確認する”状態に戻り、ノードBもスタートアップを中断することで、衝突を避けます。

ノードBではノードAが送信したスタートアップフレームを検出した後、サイクル0〜3の間に初期化やノードAにタイミングを合わせ、サイクル4でスタートアップフレームの送信を開始します。つまり、ノードBがフォローイングコールドスタートノードとなります。

ノードAはサイクル4〜5での2つのスタートアップフレームからクロックの補正を行い、何もエラーがなかった場合、サイクル6からノーマルアクティブ=通常の通信状態になります。

ノードBがスタートアップフレーム送信を開始してから3サイクル(サイクル4〜6)の間に、クロック補正について何もエラーがなく、他のコールドスタートノードであるノードAを正しく認識できている場合、サイクル7から通常の通信状態になります。

ノードCでもノードAが送信したスタートアップフレームを検出した後、初期化などを行い、ノードAとBから送信される2つのスタートアップフレームにタイミングを合わせます。4サイクル(サイクル4〜7)にわたってスタートアップフレーム×2を受信した後、通常の通信状態となり、通常のフレームの送信を開始します。


 この例から分かる通り、FlexRayの通信開始にはコールドスタートノードの役割が大きく、クラスタ設計上、クラスタ内におけるコールドスタートノードの“数”が重要となります。プロトコル仕様では、コールドスタートノード数=2を認めてはいますが、この場合、仮に何らかの原因により1つのコールドスタートノードが起動しなかったとき、2つのコールドスタートノードがそろわないことになります。結果、クラスタ全体が通信を開始できなくなるため注意が必要です。

 以上、今回はさまざまな補正方法やスタートアップなど、FlexRayの特徴をよく示した仕様を説明しました。このような仕組みにより、FlexRayは高いレベルの信頼性と同期通信を実現しています。

 次回は、欧州での適用事例やさまざまな取り組みなどを紹介します。ご期待ください。(次回に続く)

【 筆者紹介 】
ベクター・ジャパン株式会社 開発ツール部 チームリーダー
丹野 清嗣(たんの きよつぐ)

ベクター・ジャパン 開発ツール部のチームリーダーとして、CAN、LIN、FlexRayなどの車載ネットワークに対応した開発ツールやハードウェア・インタフェースの提供、サポート業務に従事している。
ベクター・ジャパン
http://www.vector-japan.co.jp/
ベクターFlexRayソリューション
http://www.vector.com/vj_flexray_solutions_jp.html

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.