「CAN通信って何?」という人向けにCAN通信の解説をしてみる

みなさん、お疲れ様です。私は根っからのアナログ回路畑出身の男です。通信って難しいですよね。パワエレ関係の人はアナログ回路畑の人が多いかもしれませんが、車に搭載されるパワエレユニットの場合、「あーせいこーせい」と指示はCAN通信で送信されます。

今日は「CAN通信ってなーに?はなほじー(@・u・@)」くらいの人に向けて「CAN通信」ってどういうもんなのか?ということについて書いてみようと思います。

以下の方が対象です。

開発でCAN通信に関わらないといけなくなったんだけど、通信のことはさっぱり

はじめてのCAN /CAN FD読んだけど理解できない俺って。。。(←筆者がこれでした。)

新人ですが、CAN通信って何ですか?

「実際に測定してみるのが早いよ」って言う人はいるかもしれないけど、「そもそも測定方法もわかんねぇよ!!」っていうのが初心者です。本記事はCAN通信さっぱりだった私が最初に躓いたところを記事にしてみました。

この記事を読んで準備体操をしてから、この↓のCAN童貞資料に目を通しましょう。

CAN童貞資料

vector:初めてのCAN/CAN FD

ルネサス:CAN入門書

ちなみに筆者が書いたCAN関連記事は以下になります。気になったら読んで頂ければと思います。

スポンサーリンク

ふわっとCANプロトコル(決まり事)を理解する

まずは例えばなしでふわっと理解しましょう。これからの例えはこの本↓の中で紹介されているものです。

CAN通信とは議長のいない全員が目隠しをしている会議みたいなもんだと思ってください。仕切りがいないので、みんな自由に発言が出来ます。でもみんなが好き放題喋っていたら会議の収拾がつきません。だからいくつか決まり事を作ります。

決まり事

①誰かが喋っているとき他の人は発言しない。逆に誰も発言していない時は誰でも発言していい。

②誰かがしゃべっている間は全員がそれを聞いている。(横入りしない)

③同時に喋り始めたら偉い人順(社長->部長->課長—)に発言権がある。

④喋るときの決まり事

①しゃべり始めるときは「はい!」と言う。

②自分の役職と名前を名乗る。

③どのくらい喋るか言う。

④喋る量だけ喋る。

⑤聞こえましたか?を訪ねる。
 聞こえていたら終わり。
 聞こえていなかったらもう一回喋る。

⑤話すスピードをみんな同じにする。

⑥喋っている内容が間違っていたら「おかしいよ!」と指摘する。

⑦間違い発言の数を数えて多ければある時間休憩をとる。

会議室=通信BUS、会議参加者=車載部品たち、発言権=部品ごとの優先順位、喋るときの決まり事=データフレーム構成、話すスピード=同期

平社員の田中君がいたとしたら

「はい!平社員の田中です。1分間喋ります。ごにょごにょごにょごにょ。聞こえましたか?終わります。」

というのが一つの通信のイメージです。

もし同時に話し始めたら、、、

平社員の田中
平社員の田中

はい!平社員の田中

平社員の田中
平社員の田中

あ、俺より役職が上の人が喋ってるから黙ろ。

課長の佐藤
課長の佐藤

はい!課長の佐藤です。

課長の佐藤
課長の佐藤

2分間喋ります。ごにょごにょごにょごにょ。。。

と役職(優先度)が低い方が喋るのをSTOPします。

CAN BUSで繋がった人たちは全員これをしているんですね。そんなイメージを持った上でCANのさわりを次に書いていきます。

実際のCANのあれこれ

それぞれの部品はどうつながってるの?

例え話に対してじゃあ、実際はどうなってんの?の話をしていこうと思います。

CAN通信はこのように↓一つの通信に対して複数部品がくっついています。

はじめてのCAN/CAN FD P8より引用

この繋がりが”会議”でMが”会議に参加する人たち”です。もうちょっと物理的に描くと↓こんな感じ。

はじめてのCAN/CAN FD 図28より引用

ノードA,Bが参加者。CANバスが会議です。各参加者(部品たち)がCAN BUSに手を伸ばして繋がっている感じです。ここを通じて喋ったり、聞いたりします。

どうやって喋るの?

CAN通信の世界(っというか通信の世界)では0か1で喋ります。いわゆる2進数ですね。CAN通信では”0″をドミナント、”1″をレセシブと言います。

ふつーに0か1って言えよ。って思いますが、仕方がないです。しかも大体のCAN資料には当然のように”ドミナント”、”レセシブ”と言ってきます。覚えてないと「あれ?1だっけ0だっけ」と素人感が出てしまいます。腹立たしいです。しかも見て下さい↓。

はじめてのCAN/CAN FD 図28より引用

電圧レベル的にはCAN_HとCAN_Lに電圧差がある方が”0″のドミナントなんですよ。んで、CAN_HとCAN_Lに電位差が無い方が”1″レセシブなんです。私の感覚的には逆なんだけどなぁ。。。

とにかく、ドミナントが”0″、レセシブが”1″です。もう覚えるしかねぇです。

そんで測定したり、仕様書とかには16進数で表示されることが多いです。(16進数って何?という方のために1例を出すと、2進数の”1111″は16進数のFです。まぁ調べたらすぐ出ます。関数電卓でも叩けば計算してくれます。)これもまぁ仕方がないですね。2進数と16進数だと計算しやすいからです。2進数はbin,16進数はhexと表記されていることが多々あります。「”bin”???なんのことや?」とならないようにガチ初心者は頭に入れときましょう。

あと、文字列のASCIIを数値に変換してやり取りとかしよるパターンもあるので、ASCIIの変換が必要な時があるよ。って頭の片隅に置いておいた方が良いです。(必要なときに調べりゃいいです。)

DOSプロンプト

喋るときの決まりは?

前述の通り、喋るときは決まった型で喋ります。この型のことを「フレーム」と言います。何個かフレームがありますが、ここでは一番使うデータフレームの標準フォーマットを紹介します。

はじめてのCAN/CAN FD 図12より引用

SOF:「はい!」

ID:「私は〇〇です!」

コントロールフィールド:「私はこのくらい話します。」

データフィールド:「ごにょごにょごにょごにょ」

ACK:「聞こえましたか?」

EOF:「終わります。」

ざっくり説明するとこんな感じで喋ります。ここでは超ざっくり説明しましたが、説明していないものについては、「はじめてのCAN/CAN FD」を読んで下さい(笑)

まとめ

本日はCAN通信の導入部分の解説をしてみました。

「目隠し会議をしていて、決まった内容をみんな喋ってるんだな。」っていうことをふわふわっと頭に入れてCAN童貞資料に目を通して頂ければ、少し理解の助けになるかなと思っています。

CANについて勉強していると段々疑問が出てくると思います。

・喋る内容(フォーマット)にはいくつか種類があるよ。

・どうやって喋るタイミングを合わせてるの?

・このフォーマットのこのビットの意味がわからん!

・エラーを数えるときの決まりごとは?

とか色々やってると疑問が出てくると思います。そのたびに調べて勉強していけば、いつの間にかCANそこそこマスターになっているはずです。たぶん。

以上です。最後までお読みいただきありがとうございました!!