リアルECU解析のための環境構築 ~ヨーレートセンサーを添えて~

はじめに

こんにちは、MsYです。

今回は、リアルECUをハックしてみたいと思い、ヨーレートセンサーの値をラズパイで取得するまでの手順をまとめました。

主にしゅーとさんの書籍・ブログを参考にさせて頂きました。

booth.pm

www.shutingrz.com

なお、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を給電しなければなりません。そのために、基盤をカットする必要があります。

詳しくは以下のブログを参照してください。

CAN通信に入門!波形とプロトコルを確認してみた

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通信に入門!波形とプロトコルを確認してみた

CANトランシーバ[MCP2562]の役割とCANコントローラとの違いを解説 | Tommy blog

Raspberry PiでOBD-II (CAN)の情報を取得するための基板を自作する #RaspberryPi - Qiita

changelog

2022/09/16: 配線の詳細, table of contentsを追加