概要
Raspberry Pi からCANの送受信を行いたいという話があり、セットアップを試してみましたので2017/12/01 現在での手順を記録しておきます。
用意したもの
- Raspberry Pi 3 Model B
- CANコントローラ MCP2515 モジュール
- Amazonにあったこれ を使いました
CANモジュールの改造
Raspberry のロジックレベルは3.3Vです。一方、安く販売されているMCP2515モジュールは5V用になっていますので、若干工作が必要です。
[quick-guide] CAN bus on raspberry pi with MCP2515 を参考にしました。
まず、裏側にあるパターンをカットします。
売られているモジュールはメーカーが違うものが多くありますが、だいたいどれも同じようです。
次にTJA1050(小さいIC)の側に5V供給用のケーブルをはんだ付けします。
なお最初は裏面にはんだ付けしようと被膜を削りましたが、スルーホールに通してはんだ付けできたためケーブルは表に出しました。
(※力がかかるとすぐちぎれてしまうので、実用上は何かでケーブルを固定した方がいいですね。)
以上で改造終了です。
配線
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 を起動します。
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での通信を確認してみたいです。