リアルECU解析のための環境構築 ~ヨーレートセンサーを添えて~
はじめに
こんにちは、MsYです。
今回は、リアルECUをハックしてみたいと思い、ヨーレートセンサーの値をラズパイで取得するまでの手順をまとめました。
主にしゅーとさんの書籍・ブログを参考にさせて頂きました。
なお、Raspberry pi 3 Model B, ZERO WHのどちらでも再現できました。
用意するもの
- 直流安定化電源
- OUTPUTスイッチがあるものを購入*1。
- Raspberry pi
- ZERO WHを使用。3 Model Bは文鎮化。
- CAN コントローラ・CAN トランシーバ
- MCP2515とTJA1050が合わさったモジュール*2を使用
- ヨーレートセンサー
- ブレッドボード
- ワイヤ
- テスター
- はんだ、はんだごて(optional)
CANモジュールの改造
今回使用するCANモジュールでは、CANトランシーバに5Vを給電しなければなりません。そのために、基盤をカットする必要があります。
詳しくは以下のブログを参照してください。
Raspberry Pi で CAN通信(準備) – キルロボブログ
背面を鋭利なもので削った後、はんだ付けを行いました*3。
しかし、素直にPICAN2/3か別の対応HAT*4を使ったほうがいいかもしれません(参考)。
ラズパイとCANモジュールとの配線
次のブログと同じ配線にしました。
Raspberry Pi で CAN通信(準備) – キルロボブログ
ピン番号とモジュールのピン名の対応
ラズパイ | CANモジュール |
---|---|
22 | INT |
23 | SCK |
19 | SI |
21 | SO |
24 | CS |
25 | GND |
17 | VCC |
2 | 5V VCC |
モジュールのINTをラズパイのGPIO 25(22) と繋ぐことにより、この後の設定を使い回すことができます。
Raspberry Pi OS上の設定
カーネルのバージョン
$ uname -a Linux raspberrypi 5.15.56+ #1575 Fri Jul 22 20:26:40 BST 2022 armv6l GNU/Linux
can-utilsのインストール
sudo apt update -y && sudo apt upgrade -y sudo apt install -y can-utils
CANモジュールの対応
/boot/config.txt
に以下を追加しrebootする。*5
dtparam=spi=on dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=500000 dtoverlay=spi-bcm2835-overlay
起動後、以下の表示が出ていたらラズパイがCANモジュールを認識していると分かります。
$ dmesg | grep "spi" [xxxx] mcp251x spi0.0 can0: MCP2515 successfully initialized.
Pi3 だとdtoverlay=spi-bcm2835
でした。設定に不備があった場合は、ラズパイ起動時に画面右上にspi-bcm2835 not found
のようなポップアップが出てくるので、それで判断してください。
別のCANコントローラを使う場合は、oscillator
の周波数をそちらに合わせてください。
interrupt
は、配線の仕方によって値が異なります。今回は、GPIO 25 をモジュールのINTに繋いだため、25
となりました*6。
CANインタフェースの動作確認
CANインタフェースのloopbackをオンにします。
sudo ip link set can0 up type can bitrate 500000 loopback on sudo ifconfig can0 up
ターミナルでcandumpを起動し、dumpをし続けます。
# 受信側
candump can0
もう一方のターミナルで適当な値をcansendし、先ほどのターミナルでdumpできたら成功です。
# 送信側 cansend can0 123#1122334455667788
確認後、loopbackをoffにします。onのままだとCANのデータはECUに流れません。
sudo ifconfig can0 down sudo ip link set can0 up type can bitrate 500000 loopback off sudo ifconfig can0 up
配線
ヨーレートセンサーのピンアサインはしゅーとさんのブログで紹介されていたため、それを参考にしました。
リアルECUを召喚して本物のCAN通信の雰囲気を知る | Shooting!!!
ラズパイとCANモジュールは既に繋げているため、あとはCANモジュール、ヨーレートセンサー、及び直流安定化電源を繋げて、candumpをします。
実際に繋げた様子が次の通りです。
12Vを流したところ、以下のようにcanパケットが流れました。成功です!
公開しても問題ないとは思いますが、念の為ぼかしています。
おわりに
自分で必要な機器を揃え、実際にcanパケットを見ることができて嬉しい!
次はエンジンメーターや他のECUの解析をやってみようと思います。
ここまで読んで頂き、ありがとうございました。
参考文献
0円で始めるカーハッキング - シャトルネットワークス - BOOTH
リアルECUを召喚して本物のCAN通信の雰囲気を知る | Shooting!!!
Raspberry Pi - CAN Bus communicatie (GPIO)
Analyze AutoMotive ECU - Speaker Deck
CANトランシーバ[MCP2562]の役割とCANコントローラとの違いを解説 | Tommy blog
Raspberry PiでOBD-II (CAN)の情報を取得するための基板を自作する #RaspberryPi - Qiita
changelog
2022/09/16: 配線の詳細, table of contentsを追加
*1:https://www.amazon.co.jp/dp/B0B711CMPW
*2:https://www.amazon.co.jp/dp/B01GF75R0O
*3:カッターで削ったけど、これでいいのだろうか...
*4:https://www.amazon.co.jp/dp/B08LCKLHBX
*5:http://domoticx.com/raspberry-pi-can-bus-communicatie-gpio/#:~:text=Configure%20CAN%20Bus%20on%20the%20Raspberry%20Pi の通り
*6:http://www.kirurobo.com/2017/12/raspberry-pi-can.html と同じ配線にしました