Raspberry Pi を使って CAN (Controller Area Network) 通信する方法を紹介します.割とお手軽にできます.
回路構成
使用する主なデバイスは,以下.
- MCP2515
-
Microchip 社の CAN コントローラ. [データシート]
I/O 電圧は 3.3V なので,Raspberry Pi と直接接続できます.外付け素子として,発振子もしくは発振器が必要です.
- MCP2551
-
Microchip 社の CAN トランシーバ. [データシート]
5V 単一電源で動作し,I/O は 3.3V に対応しています.そのため,MPC2515 と直接接続できます.
- セラミック発振子 20MHz
-
コンデンサ内蔵のセラミック発振子.外付けのコンデンサが要らないので,ブレッドボードとかで扱いやすくお勧めです.
こらの素子を以下のような感じでつなぎ合わせます.MCP2515 の割り込み端子(INT)は Raspberry Pi の GPIO25 に接続.
詳細は,データシートや「MCP2515 回路」とかで検索するとでてくる回路図を参考にしてください.(一応,上図の Fritzing ファイルをここにおいておきます)
手軽に済ませたい場合は,AliExpress で売られている MCP2515 CAN Bus Module を使うのがお勧めです.送料含めて数百円で入手できます.
設定
昔は,カーネルにパッチをあてたりする必要があったようですが,2015-05-05 以降の Raspbian であれば,カーネルをアップデートして設定をしてやるだけで動きます.
まず,カーネルのアップデートは次のように行います.
1 |
$ sudo rpi-update |
設定は /boot/config.txt
に以下のように記載します.
1 2 3 4 |
dtparam=spi=on dtoverlay=mcp2515-can0-overlay,oscillator=20000000,interrupt=25 dtoverlay=spi-bcm2835-overlay dtoverlay=spi-dma-overlay |
20000000 は MCP2515 に接続する発振子の周波数を示しています.異なる周波数を使う場合は適宜書き換えてください.
再起動し,/sys/class/net/can0
が現れていれば設定完了です.
動作確認
can-utils を使うと簡単に動作確認できます.
まず次のようにして,ビルドします.
1 2 3 |
$ git clone https://github.com/linux-can/can-utils.git $ cd can-utils $ make |
次に,can0 をリンクアップして,cansend コマンドを実行すれば CAN が出力されます.
1 2 |
$ sudo /sbin/ip link set can0 up type can bitrate 500000 $ ./cansend can0 123#deadbeef |
コマンド実行後,CAN トランシーバの CANH/CANL をオシロでみるとこんな感じの波形が見れるはずです.
コメント
[…] 708/这个目录根本没有,只有一个相似的叫arch/arm/mach-bcm/这样的一个目录,而且里面也没找到类似的文件。没办法,面向Google编程呗,于是又找到了这篇文章(日语)。里面有一段这样说的: […]