CAN周りのメモ
CANとは
- 車とかで使われてるノイズに強い通信規格
- 通信の速度は最大
1Mbps
(CAN FD
というCAN
を強化した通信規格もあって、最大5Mbps
ぐらい出せる)
バス
バスというのは複数の機器が通信するとき、通信する経路を共有するような接続の形で、CAN
やi2c
で使われている。その通信経路に接続されてる各機器のことをノード
と呼ぶ
i2cとCANの比較
i2c
- SDLとSCLと呼ばれる信号線を共有してる
- 基本はシングルマスター・マルチスレーブ方式
マスターと呼ばれる命令する役のノードが1つと複数のマスターからの命令を受け付けるスレーブと呼ばれるノードが繋がれる形(基本はというのは、マスターを複数にすることも可能ではあるから)
→ スレーブはマスターから命令されないと何もできないのでマスターが無いと動かない
CAN
- CAN HIとCAN LOWと呼ばれる信号線を共有してる
- マルチマスター方式
どのノードも他のノードに命令することが可能で、どのノードも他のノードからの命令を受け付けれる
→ どのノードも命令を出すことが可能なので、一つ二つ壊れたノードがあっても動ける
CANでのデータのやり取り
CANではフレームと呼ばれる決まった形式のデータを送受信する。フレームには5種類あって、それぞれデータフレーム
リモートフレーム
エラーフレーム
オーバーロードフレーム
インターフレームスペース
と呼ばれる
※以下ではCANトランシーバー、CANコントローラーを使っている場合気にしなくていいインターフレームスペース
や、オーバーロードフレーム
、CRCフィールド
やSOF
、EOF
などの解説は省く
データフレーム
データを送信するためのフレーム
送受信されるデータ
- 調停フィールド
- このフレームが送信される優先順位とこのフレームのID
- 制御フィールド
- データフィールドで何byteのデータを送っているか、など
- データフィールド
- 送りたいデータ(8byteまで)
リモートフレーム
指定したIDのノードにデータを要求するためのフレーム
送受信されるデータ
- 調停フィールド
- データを送ってほしいノードのID
- 制御フィールド
- そのノードが返すデータが何byteか、など
エラーフレーム
エラーを各ノードに通知するためのフレーム
送受信されるデータ
- エラーフラグ
- 何のエラーかを表すデータが入る
CANトランシーバーとCANコントローラーについて
CANトランシーバーとは
CANの通信経路の回路は特殊で作るとめんどい。そこでCANトランシーバーと呼ばれるICを使うと回路部分をいい感じにしてくれる。これに以下で説明するCANコントローラーを繋ぐことでマイコンからCANコントローラーに対してSPIやI2Cなどの通信方法で命令するだけでCAN通信ができる
CANコントローラーとは
マイコンでトランシーバーと直接通信するのはめんどいのでこれを間につないでおくと便利。マイコン側からはSPIやI2Cのような通信方式でCANコントローラーに命令するだけでCANでのデータの送受信ができる。また、送信バッファや受信バッファを内蔵していたり、受信フィルタや受信マスクも搭載しているのでマイコンから直接トランシーバーと通信するより楽にCANが使えるようになる
送信バッファとは
送信待ちのフレームが一時的に置かれるところ。マイコン側から送信したいデータを送信バッファに置く命令を出してデータを送信バッファにセットしておくと送信処理はCANコントローラー側でやってくれるので、マイコン側は送信処理が行われている間も他の処理ができる
受信バッファとは
受信したフレームが一時的に置かれるところ。受信する処理はCANコントローラー側で勝手に行われてデータは受信バッファに入れてくれるので、マイコンが忙しくてもデータを受信可能(暇になってから受信したデータを使った処理ができる)
受信マスク、受信フィルタは設定しておくと受信バッファに入るフレームをIDで限定できるので、特定のノードから送られてきたフレームだけを受信するみたいなことが可能
他にCANコントローラーがしてくれること
フレームの解説のところで出た、オーバーロードフレーム
やインターフレームスペース
、データフレームやリモートフレームのCRCフィールド
やSOF
、EOF
はCANコントローラー側で勝手に生成してくれるので気にしなくていい