CAN FDの物理層を理解する

f:id:aptpod-tetsu:20200429121302j:plain

はじめに

ハードウェアチームのおおひらです。 本稿では車載の制御通信バス規格として一般的なController Area Network (CAN)の物理層について、その上位側を中心に説明します。

一般的にCAN/CAN FDの仕様について調査するとフレームの種類や構造などのデータリンク層の情報が記載されたドキュメントを目にすることが多いと思います。過去エントリとしては弊社Embeddedチームの久保田の記事(CAN FDことはじめ)だったり、Google検索して出てくるところだとこちらこちらなど。または、Vector社の『はじめてのCAN/CAN FD』 もしかり。

弊社アプトポッドでも、モバイル回線を利用した遠隔車両データ計測を主たるユースケースとしてintdashプラットフォームのCAN FD対応が進んでおり、改めてハードウェア担当として物理層の理解をすべく規格を調査した次第です。 なお用語に関してはCANの規格書 (ISO 11898-11 および BoschのCAN FD仕様書2)を参照できるよう、過度に日本語翻訳していません。毎度のことながら、認識に誤りがありましたらご指摘いただけると有難いです。

そもそもCANの1ビットはどうやって決まるのか

物理層 :Physical coding sub-layer (PCS)

普段の会話で「CANフレームのIDは11bitで~」などと言うことがあるかと思いますが、そのビットの0 or 1を判別する仕組みがCANのPhysical layer (PL)の中のPhysical coding sub-layer (PCS) にあります。下記はCANの規格書をもとに作成したOSI参照層とCANのレイヤー構造の比較図であり、CAN FDは ISO 11898-1:2015で規格化されています。

f:id:aptpod_tech-writer:20200428103541p:plain

※ 因みにISO 11898-2はHigh-Speed CAN (~1Mbps) の物理層、ISO 11898-3は商用車や産業機械・重機向けのLow-Speed CAN (~125kbps) の物理層(主に電気的な仕様)の規格

上の図中の黄色でハイライトされた層が本稿で説明するPCSで、役割は以下の2点です。

  • Bit encoding / decoding
  • Synchronization

具体的には、CANノード間の同期・伝播遅延の補償・Sample Point (ビットの0,1判断)の位置決めなどの機能が、1ビットあたりの時間 : Bit TimeTime Quantum (tq) という時間単位でサンプリングして動作するロジックで実現されます。

例えばCAN FDを想定して考えてみましょう。1つのCANフレームの中にNominal Bit Rate (NBR)とData Bit Rate (DBR)の2種類の通信速度が存在します。BoschのCAN FDの文献3では実車環境を考慮した現実的な値としてNBR=500 kbps4、DBR=2 Mbps5 が記載されていますので、これに従うと逆数で1ビットあたりの時間(Nominal Bit Time (NBT), Data Bit Time (DBT))はそれぞれ 2 us、0.5 usと計算できます。

他方、上記のBit TimeをサンプリングするためのTime Quantum (tq)の周期は、個々のCANノード内のデバイス(CANコントローラ)に供給されるシステムクロックの周波数に制約されて決まります。CANコントローラがMCUやSoC内蔵のペリフェラルとして統合されている場合6 はそのペリフェラルに供給するクロック周波数に相当し、単独ICタイプの製品7 では外付けの水晶振動子とチップ内のPre-Scaler (分周器)の設定に依存します。多くのCAN FD製品では40 MHzのシステムクロックを用いて1 tq = 25 nsでサンプリングすることが推奨されているようです。

ここまでのCAN FDのフレームの構成要素を分解しつつ 鳥の目 to 虫の目 的に示したものが下の図です。フレーム→フィールド→ビットタイムの順に要素が細かい時間単位になります。(各ビットの役割などは他記事をご参照下さい)

f:id:aptpod_tech-writer:20200428103638p:plain

ビットが0(ドミナント)か、1(リセッシブ)かの判断は上図の赤字で示したSample pointで行われます。Sample pointのtq値は上位ソフトウェアから設定可能ですが、これはあくまで初期値であり、CANノード間のクロック周波数偏差や信号伝播遅延の影響を考慮して同期のロバスト性を高めるために自動的に位置をずらす仕組みが実装されています。次項ではBit Timeの単位で正確な同期を実現するためのSegmentの役割について記載します。

Bit Timeを構成するSegment

Synchronization Segment (Sync_Seg)

ノード間の同期をとるために定義されており、規格上1 tqと決められています。信号レベルのエッジがこの期間内に存在することが期待されます。

Propagation Segment (Prop_Seg))

ノード間の物理的な電気信号遅延の補償のために定義されています。最も伝播遅延の大きいCANノード間において、信号が行って返ってくるまでの合計時間よりも大きなtqを設定する必要があります。

Phase Buffer Segment 1 and 2 (Phase_Seg1 and Phase_Seg2)

後述する Resynchronization (再同期)のロジックにおいて位相補償を行います。初期値となるtqを設定した上で、Resynchronizationのために時間的に伸び縮みします。このtqの限度値は別途 Synchronization Jump Width (SJW) という値で制約することができます。

CANコントローラの実装上、Phase_Seg1のtq数はProp_Segのtq数と合算して設定してよいことになっています。また、1 Bit Timing期間の総tq数は、Classical CANの場合8~25 tq、CAN FDの場合はNBTで8~80 tq , DBTで5~25 tq と規定されています。

Synchronization:ノード間のビットタイミング同期

ノード間の同期機能は、1 tq 時間内にステートマシン動作として実現され、1 Bit Timeあたり1回だけ動作することが規定されています。 Hard synchronizationResynchronization の2種類の同期方法が規定されています。

Hard synchronization

CANフレーム間にリセッシブからドミナントへの信号変化のエッジ(つまりSOFビット)を検知したとき、Bit Timeをリセットしてそのエッジの箇所をSync_Segと定義します。Bit Timeのtqカウンタのリセット機能と言い換えることもできます。この同期手段はSJWのtq数の制約を受けません。

Resynchronization

Sync_Segの期間内に信号のエッジを検出できなかった場合にタイミングの再同期を行います。Phase_Seg1 or 2 の伸張tq数はSJWで制限されます。

信号エッジの検出位置 Phase Error定義 再同期の実現方法
Sync_Segのtq期間内 e=0 -
Sync_SegとSample Pointの間 e>0 Phase_Seg1を伸ばす
Sample Point と次のBit TimeのSync_Segの間 e<0 Phase_Seg2を縮める

Transmitter Delay Compensation (TDC) : 伝播遅延補償

CAN FDの高データレートで2~5Mbps 程度になってくると、CANネットワーク上の電気的な遅延だけではなく、CANコントローラとCANトランシーバ8の間で生じる数十~数百 ns オーダの遅延量に対する補償も必要となります。例えばCANコントローラが出力した信号がトランシーバのTxピンに伝送され、トランシーバIC内部の送信回路と受信回路を通ってRxピン経由で再度CANコントローラに戻ってくるループバック経路を考えただけでもISO 11898-59では 最大255 ns の遅延が許容されていますので、CAN FDのデータレートを高めていく10と全くビットのサンプリングが成り立たないことが分かるかと思います。デバイス単体でのループバックテストすらエラーになってしまいますね。。

ここまでくるとICの設計者的な視点でかなり深い話になってきますので、詳細が気になる方は別途資料11をご参照頂くとして、その補償手段としてデータビットレートにおけるビットのサンプリングを遅延させる Secondary Sample Point (SSP) 機能が実装されています。これはアービトレーションフェーズにおけるFDFビットとresビット間のリセッシブからドミナントに信号変化するエッジのループバック信号をCANコントローラが計測し、Tx(送信)とRx(受信)の時間差分を用いてSSPの位置を決めるものです。0~63 tq の範囲でSample Pointを遅延させてSSPを実現することが規定されています。

おわりに

物理層の上位側に相当するPCSの仕組みをまとめてみました。規格書をじっくり読むと高データレート・ロバスト・低コストという要素を両立させるべく色々な工夫がされていることが分かって面白いものですね。 次回はBoschのOriginal CAN FD仕様とISO仕様との違いとか、ISO 11898-2:2016のWake Up Pattern (WUP)など、もう少しCAN FD規格を深堀りしてみたいと思います。

※そうこうしているうちにCAN XLという更に高データレートな規格も議論されていたりしますが…

CAN FDの遠隔計測・制御ソリューションにご関心をお持ちの方はぜひ一度アプトポッドまでご相談下さい。

脚注


  1. https://www.iso.org/standard/63648.html

  2. https://can-newsletter.org/assets/files/ttmedia/raw/e5740b7b5781b8960f55efcc2b93edf8.pdf

  3. https://www.bosch-semiconductors.com/media/ip_modules/pdf_2/papers/icc14_2013_paper_hartwich_1.pdf

  4. 米国自動車技術会(SAE) J2284で規定された値で、現在の乗用車で採用されている一般的な定格ビットレート

  5. 実車における電気的な制約、EMC(電磁波の不要輻射)、温度変動要件などを考慮するとこのあたりの速度が適当らしい

  6. ルネサス, NXP, STMicroelectronics, Cypressなど各社が多くのSystem on a Chip (SoC)を供給している

  7. MicrochipのMCP251xxFDシリーズ、Texas InstrumentsやInfineon Technologiesの製品ラインナップにあるController & Transceiverを統合したSystem Bases Chipなど

  8. 電気信号のシングル-差動変換・温度補償・CANバスの線路の短絡/過電圧保護やSleep/Wake upの状態管理をする末端ICの一般名称

  9. High-speed CAN (1Mbps) の低消費電力の拡張規格

  10. CAN FDのデータレートの上限は規定がなく、ECUのリプログラミングなどの特定用途では5~8 Mbpsの速度も想定されている

  11. https://www.infineon.com/dgdl/Infineon-IFX_The_Physical_Layer_in_the_CAN_FD_world_published-WP-v02_00-EN.pdf?fileId=5546d462525dbac40152a66f6a440d63