Edited at

Raspberry Pi CAN通信 (MCP2515 TJA1050 CAN Bus Module)

More than 1 year has passed since last update.

以下で確認しました。

- Raspberry Pi 1 Model B (Raspbian Wheezy 2015-05-05 からアップデート)

- Raspberry Pi 2 Model B (Raspbian Jessie 2015-09-24 からアップデート)


動機


  • MCP2515 TJA1050 CAN Bus Moduleというのが、$5+送料くらいで買える。(安いけど、おくられてくまで時間がかかる)

  • 最近のRaspbianでは、MCP2515を使うことはラクらしい。(config.txtを編集すればよく、Kernelのビルドの必要がない)


注意点


  • らずぱいのGPIOの入出力電圧は3.3V

  • 安いMCP2515 TJA1050 CAN Bus Moduleは、arduino向けっぽいのか、5V仕様


    • TJA1050の電源 (supply voltage 4.75 < V_CC < 5.25 V) => 5V仕様

    • MCP2515電源電圧 (2.7 < V_DD < 5.5 V) 3.3V/5V 可能で、5Vが使われている。

    • MCP2515出力は V_DD - 0.7V ... そのまま使うと、4.3Vくらいになってしまう??



=> MCP2515の電源ピンを浮かせて、3.3Vを送り込む。(下図参照)

(確認してないけど、だいじょぶだろう...ぉぃ)


  • ブレッドボードにて MCP2515のVDDピンを浮かせて、紫色のワイヤーではしっこのほうにだして、3.3Vをつないでます。右のほうにあるのはUART-USB.

    Raspberry Pi + MCP2515 CAN通信


手順


  • 1. 配線


    • 8本、間違えないように。



P1-01 3V3          -> MCP2515の浮かせたピン3.3V電源

P1-02 5V -> VCC 5V電源
P1-06 GND -> GND
P1-24 GPIO8(CE0) -> CS
P1-19 GPIO10(MOSI) -> MOSI
P1-21 GPIO9 (MISO) <- MISO
P1-23 GPIO11(SCLK) -> SCK
P1-22 GPIO25 -> INT


  • 2. Raspbian


    • SDにイメージを焼く

    • ソフトの更新など(sudo apt-get update / upgrade/ rpi-update)



sudo apt-get update

sudo apt-get upgrade
sudo apt-get dist-upgrade
#再起動
sudo reboot
 
# ファームアップデート
sudo rpi-update
#再起動
sudo reboot
 
# 設定など
sudo raspi-config


  • 3. CAN Moduleを使えるようにする


    • config.txt の編集- 最後のほうに追加 (% sudo vi /boot/config.txt とか % sudo nano /boot/config)

    • oscillator=8000000 はついてるオシレータにあわせる。(これは、8MHz)。16MHzだったり、いろいろあるらしい

    • 編集後、再起動。




/boot/config.txt

# Added for SPI-mcp2515

dtparam=spi=on
dtoverlay=spi-bcm2835-overlay
dtoverlay=mcp2515-can0-overlay,oscillator=8000000,interrupt=25


  • 4. 確認 (% dmesg | grep spi)


    • こんなのがでるとCAN Moduleが認識されている。でなかったら、配線を確認。



pi@raspberrypi:~$ dmesg | grep spi

[ 5.383449] spi spi0.0: setting up native-CS0 as GPIO 8
[ 5.409457] spi spi0.1: setting up native-CS1 as GPIO 7
[ 20.347837] mcp251x spi0.0 can0: bit-timing not yet defined
[ 20.347879] mcp251x spi0.0: unable to set initial baudrate!
...


  • 5. 接続


    • SocketCAN




500kbpsで接続

pi@raspberrypi:~$  sudo ip link set can0 type can bitrate 500000

pi@raspberrypi:~$ ifconfig can0
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

pi@raspberrypi:~$



  • 6. ツールの準備


    • can-utils



git clone https://github.com/linux-can/can-utils.git

cd can-utils
make


  • 7. ダンプしてみる


    • なんかしらCANデバイスにつなぐ。HとLに注意。




msg_idは、xxxxxxxxにしてます...

pi@raspberrypi:~/can-utils$ ./candump -cae -t z can0,0:0,#FFFFFFFF

(000.000000) can0 xxxxxxxx [8] 01 20 34 F3 34 F3 34 F3 '. 4.4.4.'
(000.000464) can0 xxxxxxxx [6] 01 43 34 F3 34 F3 '.C4.4.'
(000.001028) can0 xxxxxxxx [8] 08 20 34 F3 34 F3 00 00 '. 4.4...'
(000.001603) can0 xxxxxxxx [8] 08 00 00 00 00 00 00 00 '........'
...


メモ

SCLK - Serial CLocK

CE - Chip Enable (CSと同じ)
CS - Chip Select (CEと同じ)
MOSI - Master Out Slave In
MISO - Master In Slave Out


  • wireshark/tsharkでも見れるよ

    sudo apt-get install wireshark tshark