連載第1回「次世代車載ネットワーク FlexRayとは?」では、FlexRayに関するイントロダクションとして、FlexRayが策定された背景や通信プロトコルの主な特徴を紹介しました。
第2回は、FlexRayプロトコルのうち「通信構造/バスアクセス」「タイミング」「フレームフォーマット」「通信コントローラの状態遷移」の概要を簡単に説明します。
FlexRay通信は「サイクル」と呼ばれる、周期を繰り返す“時分割通信方式(TDMA)”です。このサイクルはFlexRay通信で基本となる最も大きい単位です。その概要を以下に示します。
- サイクルの長さは、ネットワーク全体(FlexRayでは通常「クラスタ」と呼びます)で共通の値として決められます。
- 1つのサイクルは、以下4つのセグメントで構成されます。各セグメントの長さもクラスタで共通の値として定義されます。
- スタティックセグメント(必須)
- ダイナミックセグメント(オプション)
- シンボルウィンドウセグメント(オプション)
- NIT(Network Idle Time)セグメント(必須)
- 各ノードは、サイクルの繰り返す回数を「サイクルカウンタ」として0からカウントします。このカウンタ数はある回数でリセットされ、これを「サイクルカウンタワードラップ」といいます。プロトコルバージョンV2.1におけるサイクルカウンタワードラップは定数=64と規定されており、サイクルカウンタは0を基点に63まで増加した後、0に戻ることを繰り返します(0、1、2、……、62、63、0、1、2、……)。一方、プロトコルバージョンV3.0以降では8〜64間の各偶数値をサイクルカウンタワードラップとして任意に設定できます。
図1 通信構造―「サイクル」
(※ベクター・ジャパンの資料を基に作成)
図2 サイクル構成のバリエーション:通信構成を柔軟に設計できる
(※ベクター・ジャパンの資料を基に作成)
Fixed TDMA通信を行うための領域です。連載第1回でも紹介したように、決まったフレームを決まったスロットタイミングで送信するため、一定の送信周期を保証でき、安全性重視のアプリケーションに適しています。
- 各サイクルの最初に必ず設定されます。
- 「スロット」で分けられます(スタティックセグメントのスロットを「スタティックスロット」と呼びます)。1つのスタティックスロットが経過するたびにスロットカウンターが1つずつ増えます(1、2、3、……)。
- 各スタティックスロットの長さはクラスタ共通で、すべて同じ長さです。
- 各スタティックスロットに対して送信ノードが割り当てられます。プロトコルバージョンV2.1では、1スタティックスロットに1ノードを割り付けます。一方、プロトコルバージョンV3.0以降では特定のスロット以外であれば1つのスタティックスロットに複数のノードを割り当てることが可能です。
- 送信タイミングがあらかじめ決まっているため、バスガーディアンによる保護が可能です。
図3 スタティックセグメントの構造
(※ベクター・ジャパンの資料を基に作成)
Flexible TDMA通信を行う領域です。送信の順番は事前に定義されますが、送信自体は要求に基づいて行われるため、高い応答性が求められるアプリケーションに適しています。
- スタティックセグメントの次に設定されますが、必須ではありません。
- 「ミニスロット」で細分化されます。1つのミニスロットが経過するたびにスロットカウンターが1ずつ増えます(1、2、3、……)。
- 送信要求があった場合のみ、複数のミニスロットで構成されるダイナミックスロットとなります。ダイナミックスロットの長さはフレーム長に応じて可変です。
- 複数のECUから同タイミングで送信要求があった際も、事前に定義された送信順に従って送信されるため、フレームの衝突およびそれに伴う送信遅延などは発生しません。
- 各チャンネルの各ダイナミックスロットに対して、別々に送信フレームが割り当てられます。
- 送信要求がなかった場合、1ミニスロット分が未使用のまま、次のミニスロットにスロットカウンターが進みます。ミニスロットがいわば「プレイスホルダ(場所取り)」の役割を果たします。
- 送信要求に応じて、2つのチャンネル(A/Bチャンネル)はそれぞれ独立してスロットカウンターを進めます。よって、同じタイミングに異なるスロットカウンター値を取り得ます。
- 要求に基づいた送信であるため、バスガーディアンによる保護はありません。
図4 ダイナミックセグメントの構造
(※ベクター・ジャパンの資料を基に作成)
ダイナミックセグメントの次に設定されますが、必須ではありません。FlexRayプロトコルにて「シンボル」と呼んでいる特定のビットパターンを送信する領域です。
プロトコルバージョンV2.1では、送信できるシンボルは「MTS(Media Access Test Symbol)」のみです。このMTSは各ノードのバスガーディアンが正常かどうかをチェックするために使用されます。プロトコルバージョンV3.0以降ではMTSに加えて、「WUDOP(Wakeup During operation Pattern)」と呼ばれるシンボルも送信できます。
各サイクルの最後には、必ず「NITセグメント」が設定されます。同期に必要な各パラメータの計算を実施する領域、かつ同期のための補正を行うためのいわゆる“のりしろ”となる領域であるため、データの送信などは一切ありません。ネットワーク上ではアイドル時間となります。
前述のスタティック/ダイナミックセグメントに関する図では、通信例として1つのサイクルのみを示しましたが、各サイクルに異なる通信スケジュールを定義することができます。これによりセグメントを有効に活用できます。これを「サイクルマルチプレキシング」と呼びます。
これは、各フレームに対して“何サイクルに1回送信するか”を示す「サイクルカウンタフィルター」を設定することにより実現されます。例えば、あるフレームがサイクルカウンタフィルター=2によってスロット3に設定され、最初のサイクル(=サイクル0)から送信される場合、このフレームが送信されるタイミングはサイクル0、2、4、6、……でのスロット3となります。サイクル1、3、5、7、……でのスロット3には別のフレームを定義できます。
図5 サイクルマルチプレキシングの例
フレームcがサイクルカウンタフィルター=2によってスロット3に設定され、最初のサイクル0から送信されるため、その送信タイミングはサイクル0、2、4、6、……となる。同じスロットのサイクル1、3、5、7、……では別フレームが送信できる
(※ベクター・ジャパンの資料を基に作成)
図6 FlexRay通信の例
(※ベクター・ジャパンの資料を基に作成)
FlexRayはタイムトリガー通信方式であり、この方式で重要なのは各ノード共通の“時間軸―タイムベース”です。FlexRayではクラスタ内の時間における共通の“物差し”である「グローバルタイム」が与えられ、このグローバルタイムと各ノードが持つ固有の「ローカルタイム」の差を測定・補正することで同期通信を実現しています。
これらタイムベースは、先に紹介したサイクルのほかに、「マクロティック(Macrotick)」「マイクロティック(Microtick)」といった3つの“単位”に基づいています。それらの関係は下図のようになります。
図7 タイミングの階層
(※ベクター・ジャパンの資料を基に作成)
- サイクル
FlexRay通信における最も大きな単位です。偶数のマクロティックから成り立っています。
- マクロティック(Macrotick)
「グローバルタイム」の最小単位であり、クラスタ全体で共通の値です。複数のマイクロティックから構成されます。
- マイクロティック(Microtick)
サンプルクロックから得られる「ローカルタイム」の最小単位です。サンプルクロックは発振器の周波数などノード固有の要因によって決まるため、当然、このマイクロティックの長さも各ノードで異なってきます。