バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
ISO11898-1ことCANのデータリンク層について。
の前編あたり。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
「はじめてのCAN/CAN-FD」を読めばいいんじゃん

前回、CANの物理層の話をしたが。

この流れだと、今回はデータリンク層だね。

まぁこれもVector社の「はじめてのCAN/CAN-FD」を読めばいいんじゃん?
Vector社の「はじめてのCAN/CAN-FD」

そんな身もふたもない。
だったら、今回ははこれで終了?

さすがにそれはちょっとアレなんで、
「はじめてのCAN/CAN-FD」では語られていない部分をちょっと補完する感じにする。
CANの洗礼

前回、使用するボーレートは500kbpsとしたんだけど、
これはどうのように決定するかわかる?

UARTとかと同じノリだと、
システムクロックかペリフェラルクロックを分周して
ボーレートクロックを作るってイメージでいたけど。

そうだよねー。
普通はそう思うよねー。

え?違うの?!

最初にCANにガチで触れる時に受ける洗礼のようなものだね。
ボーレートの設定方法が謎すぎる問題。

CANoeの時はそんなややこしいことなかったと思ったんだけど?

CANoeがうまく隠してくれてたって感じかな。
厳密には細かい設定はできるんで、魔境が垣間見れたかもしれないけど、
その時は特に追及しても意味無さそうだったんでスルーした。

うーん、とりあえず説明して。
わからなかったら質問するよ。
CANのボーレートとサンプリングポイント

先ほど、太郎くんからペリフェラルクロックの話が出たと思うのだけど、
それをボーレートプリスケーラってので分周してCANのシステムクロックが必要となる。

それがボーレートを決めるクロックだと思ったのだけど。

これで決まるCANシステムクロックがボーレートを決める前段階のクロックになる。

え?そのままボーレートにならないの?
意味わからん。

CANの1bitはさらに分解出来て、クウォンタムってものが最小単位になるんだけど、
この1クウォンタムの時間幅を決定するのが、CANシステムクロック

で、そのクウォンタムは何個で1bit分になるの?

決まっていない。

は?

12個かもしれないし、16個かもしれない。
ボーレートから逆算して決めることになるね。

え?だったら、例えば、最初から16個なら16個って決めておけば、
自動的にボーレートも決まって、そもそもクウォンタムって概念を認識しなくても良いのでは?

そうだね。
UARTなんかそのイメージ。
UARTも厳密には内部で固定的なクウォンタムを持っているけど、
固定なんで、設定する側は意識する必要は全くない。
しかし、CANの場合は意識させる。
それはなぜか?

なぜ?

サンプリングポイントを設定させるため。
CANのサンプリングポイント

サンプリングポイント?
また新しい言葉が・・・。

別にCAN独自用語ってわけでもないよ。
UARTもソフトウェア側からは見えないけど、サンプリングポイントってのはある。
まぁUARTの場合は50%位置固定になっているだろうね。
ものによってはスタートビットだけは75%位置になってるかもしれないけど。

ちょ、ちょっと待って!
50%とか75%ってどこの話をしてるの?

UARTでも良いので波形を思い浮かべてみな。
波形のどの位置でサンプルすると安定的に信号のHighとLowを拾えると思う?

あー。なるほど!
High、Lowの変化点から一番遠い真ん中が安定かな?
その中を指して50%っていってるか!

その通り。
CANの場合、このサンプリングポイントを任意の位置に変更できるんだ。
まぁ実際は完全な任意ではなく、設定幅はあるんだけど、
規格上は50%~90%の間かな。
ボーレートとサンプリングポイント

んー、でもまだ頭の中で整理できてない。

じゃ、恒例の絵で説明してみようか。


あーこれこれ。

なんとなくわかったぞ。
たぶん、こんか感じで考えていくんだな。
①サンプリングポイントを\(75[\%]\)にしたい
②クウォンタム数を16個くらいにしておく。
③\(500[kbps]\)にしたい場合は、\(500[kHz]×16[qt]=8000[kHz]=8[MHz]\)をCANシステムクロックとしておく。
④サンプリングポイント\(75[\%]\)にしたいので、\(12[qt]\)あたりでサンプルするように設定する。

大正解!

よし。これでCANマスター!

いや。ここで半分くらいかな。

まじかー。
まとめ

まとめだよ。
- 基本的には「はじめてのCAN/CAN-FD」を読んでおけばOK。
- CANのボーレート設定は特殊。
- いきなりボーレートを決めることはできず、1bitを分解したクウォンタム時間を先に決める。
- 総クウォンタムがボーレートになるので、設定したいボーレートから逆算する必要がある。
- CANはサンプリングポイントを調整できる。
- 総クウォンタム中のどこのクウォンタムでサンプルするかで決定できる。
- [%]で表現されることが多い。
- 真ん中であれば50[%]、やや後ろ側(3/4あたり)あれば75[%]。
バックナンバーはこちら。
ボッシュ自動車ハンドブック 日本語第4版
CAN入門講座: 組込みマイコンで学ぶCANプロトコルとプログラミング
CANおよびCANopenによる組み込みネットワーク
カーハッカーズ・ハンドブック ―車載システムの仕組み・分析・セキュリティ
車載イーサネット “クルマIT”高度化への基盤技術
詳解 車載ネットワーク -CAN、CAN FD、LIN、CXPI、Ethernetの仕組みと設計のために
自動車用ECU開発入門 システム・ハードウェア・ソフトウェアの基本とAUTOSARによる開発演習 (エンジニア入門シリーズ122)
車載ネットワ-ク・システム徹底解説: CAN,LIN,FlexRayのプロトコルと実装 (Design wave mook)
コメント