Raspberry Pi と MCP2515 で CAN 通信

組み込み
スポンサーリンク

Raspberry Pi を使って CAN (Controller Area Network) 通信する方法を紹介します.割とお手軽にできます.

スポンサーリンク

回路構成

使用する主なデバイスは,以下.

MCP2515
MCP2515
Microchip 社の CAN コントローラ. [データシート]
I/O 電圧は 3.3V なので,Raspberry Pi と直接接続できます.外付け素子として,発振子もしくは発振器が必要です.


MCP2551
MCP2551
Microchip 社の CAN トランシーバ. [データシート]
5V 単一電源で動作し,I/O は 3.3V に対応しています.そのため,MPC2515 と直接接続できます.


セラミック発振子 20MHz
セラロック
コンデンサ内蔵のセラミック発振子.外付けのコンデンサが要らないので,ブレッドボードとかで扱いやすくお勧めです.


こらの素子を以下のような感じでつなぎ合わせます.MCP2515 の割り込み端子(INT)は Raspberry Pi の GPIO25 に接続.

RaspberryPi CAN ブレッドボード

詳細は,データシートや「MCP2515 回路」とかで検索するとでてくる回路図を参考にしてください.(一応,上図の Fritzing ファイルをここにおいておきます)

手軽に済ませたい場合は,AliExpress で売られている MCP2515 CAN Bus Module を使うのがお勧めです.送料含めて数百円で入手できます.

MCP2515-CAN-Bus-Module

設定

昔は,カーネルにパッチをあてたりする必要があったようですが,2015-05-05 以降の Raspbian であれば,カーネルをアップデートして設定をしてやるだけで動きます.

まず,カーネルのアップデートは次のように行います.

設定は /boot/config.txt に以下のように記載します.

20000000 は MCP2515 に接続する発振子の周波数を示しています.異なる周波数を使う場合は適宜書き換えてください.

再起動し,/sys/class/net/can0 が現れていれば設定完了です.

動作確認

can-utils を使うと簡単に動作確認できます.

まず次のようにして,ビルドします.

次に,can0 をリンクアップして,cansend コマンドを実行すれば CAN が出力されます.

コマンド実行後,CAN トランシーバの CANH/CANL をオシロでみるとこんな感じの波形が見れるはずです.

MCP2515 の CAN 波形

コメント

  1. […] 708/这个目录根本没有,只有一个相似的叫arch/arm/mach-bcm/这样的一个目录,而且里面也没找到类似的文件。没办法,面向Google编程呗,于是又找到了这篇文章(日语)。里面有一段这样说的: […]