Raspberry Pi で CAN通信(準備)

概要

Raspberry Pi からCANの送受信を行いたいという話があり、セットアップを試してみましたので2017/12/01 現在での手順を記録しておきます。

Raspberry Pi と MCP2515モジュール接続後

用意したもの

CANモジュールの改造

Raspberry のロジックレベルは3.3Vです。一方、安く販売されているMCP2515モジュールは5V用になっていますので、若干工作が必要です。

[quick-guide] CAN bus on raspberry pi with MCP2515 を参考にしました。

まず、裏側にあるパターンをカットします。
売られているモジュールはメーカーが違うものが多くありますが、だいたいどれも同じようです。
MCP2515モジュール裏面

次にTJA1050(小さいIC)の側に5V供給用のケーブルをはんだ付けします。
なお最初は裏面にはんだ付けしようと被膜を削りましたが、スルーホールに通してはんだ付けできたためケーブルは表に出しました。
(※力がかかるとすぐちぎれてしまうので、実用上は何かでケーブルを固定した方がいいですね。)
MCP2515モジュール表面

以上で改造終了です。

配線

Raspberry Pi のSPI用のピンと電源ピンに接続します。ピン配置は Raspberry Pi 2 & 3 Pin Mappings が見やすかったです。

Raspberry Pi モジュール側
ピン名 ピン番号 ピン名
GPIO 25 22 → INT
SPI0 SCLK (GPIO 11) 23 → SCK
SPI0 MOSI (GPIO 10) 19 → SI
SPI0 MISO (GPIO 9) 21 → SO
SPI0 CS0 (GPIO 8) 24 → CS
GND 25 → GND
3.3V PWR 17 → VCC
5V PWR 2 → 5V VCC

Raspberry Pi と MCP2515モジュール接続後

配線ができたら、Raspberry Pi を起動します。

Raspberry Pi のアップデート

設定の前にアップデートをしました。
私は下記のコマンドを一通り行ってアップデートしてしまいましたが、4番目でのファームウェアアップデートはひょっとするとしない方が安定版のままとなって良いのかもしれません。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ sudo rpi-update

アップデートをおこなったら再起動しておきます。
下記の uname コマンドでバージョンを確認すると私の環境では 4.9.66-v7+ でした。

$ uname -r
4.9.66-v7+

Raspberry Pi 上での設定

/boot/config.txt を編集してCANモジュールを利用するようにします。

$ sudo nano /boot/config.txt

といったコマンドで config.txt を開き、下記の行をファイルの最後に追加します。

# MCP2515 CAN module
dtparm=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
dtoverlay=spi-bcm2835
注意事項1
過去の記述例を見ると「dtoverlay=mcp2515-can0-overlay」等と、"-overlay"が最後についている例が多いですが、現在は付けなくなったようです。
× dtoverlay=mcp2515-can0-overlay,oscillator=8000000,interrupt=25
○ dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25
注意事項2
「oscillator=8000000」は、CANモジュールの発振子に合わせてください。私が使ったものは8MHzでした。
注意事項3
「interrupt=25」は、配線に合わせてください。ここでは GPIO 25 をモジュールの INT に繋いだため、25としてあります。

編集後、config.txt を保存したら Raspberry Pi を再起動してください。

認識確認

再起動後、下記のコマンドでメッセージを閲覧して mcp251x に関する行を探します。

$ dmesg

モジュールとの接続がうまくできていれば初期化成功と出るはずです。

[ 3.648878] CAN device driver interface
[ 3.731784] mcp251x spi0.0 can0: MCP2515 successfully initialized.

うまく接続できていなければ下記のようにエラーが出ます。
Raspberry Pi をシャットダウンして、配線を確認してみてください。

[ 3.650181] CAN device driver interface
[ 3.734445] mcp251x spi0.0: Cannot initialize MCP2515. Wrong wiring?
[ 3.734476] mcp251x spi0.0: Probe failed, err=19

 

今後の予定

この記事では以上です。
この後は実際にCANでの通信を確認してみたいです。

参考資料