The Swamp of ECU Development

ようこそ.あなたは 2978 人目のお客様です.キリ番踏んだら連絡してね.

このサイトはniiimがオープンな情報を元に適当なまとめた情報を掲載しています.間違いがあればご指摘頂けると助かります.

CAN-FD ビットタイミング

はじめに

CAN,CAN-FD通信にあたり,コントローラは通信相手のコントローラとビットタイミングを同期する必要があります.このためにコントローラは1ビットあたりのタイミングを元に,これをより細かい単位に分解して定義して,所定の方法で調整します.どれくらい細かい単位で管理できるかは,どのクロック数で動作するかという話に他なりません.そこで本稿ではビットタイミングの調整方法と,必要なクロック数について説明します.

なお本稿では特に記載がない限り,コントローラとはCAN,CAN-FDコントローラの両方を指すものとします.

管理する時間の最小構成

コントローラ内で管理する時間の最小単位をTime Quantum(TQ)と呼びます.コントローラは入力クロック数に対してBaudRate Prescaler(BRP)で分周したものを実際に使用するクロック数として扱います.TQはその1クロックあたりの時間です.

例を示します.コントローラへの入力クロック数が40 MHz,BRPが2であれば,実際に使用するクロック数は20 MHzであり,従って1TQ = 0.5 usとなります.

1ビット時間の構成

コントローラ内では,1ビットの時間をより細かい4つのセグメントに区分します.これらをSYNC_SEG, PROP_SEG, PHASE_SEG1, PHASE_SEG2と呼びます.その単位はTQです。SYNC_SEGのみ1TQであると定義されています.

それぞれのセグメントの役割は次の通りです.

名称説明
SYNC_SEG・バス上の各ノードの同期がとれているかの判定に使われる
・各ビットの立下りがSYNC_SEGに入っていれば同期がとれていると判定
PROP_SEG・ネットワークの物理的な遅延時間を補正する期間
PHASE_SEG1
PHASE_SEG2
・PHASE_SEG1とPHASE_SEG2の境界がサンプリングポイントとなる
1ビットの構成セグメント

なおCAN-FDにおいては調停とデータ転送の2種類の転送モードがありますので,ビットタイミングはそれぞれ別々で定義されます.

同期タイミングの調整

上述の通りコントローラはSYNC_SEGの立下りで同期を判断します.SYNCが同期されなかった時に,このタイミングの調整に使用するパラメータをSJW(reSynchronization Jump Width)呼びます.同期方法は以下の通りです.

  • ビットの立下りがSYNC_SEGより後の時,PHASE_SEG1にSJWを増加
  • ビットの立下りがSYNC_SEGより前の時,PHASE_SEG2からSJWを減少

1ビット時間の構成と必要クロック数

通常CANの転送レートは500 KHzです.また通常CAN-FDでは調停に500 KHz、データ転送には2.0 MHzを転送レートに使用します.

先述の通り,コントローラではこれらの1ビットあたりに対して,より細かいTQに分解して管理します.従って(プロトコルの転送レート) * (1ビットあたりのTQの数) のクロック数が最低限必要となることが分かります.

具体例

CAN-FDの調停、データ転送時における適当なビットタイミングの設定例を示します.コントローラへの入力クロック数は40 MHzとします.

項目調停データ転送
転送ビットレート500 KHz2.0 MHz
PROP_SEG23 TQ5 TQ
PHASE_SEG18 TQ2 TQ
PHASE_SEG28 TQ2 TQ
1ビットあたりの時間 (TQ)40 TQ10 TQ
1ビットあたりの時間 (us)80 us5 us
サンプリングポイント80 %80 %
最低限必要なクロック数20.0 MHz20.0 MHz
PBR22