スバルセレクトモニターと90年代のスバル車のページ
90年代のスバル車をこよなく愛する人たちへ
ECU ROMの解析 | セレクトモニタ(WRX) | セレクトモニタ(SVX) | クルーズコントロール

ECU ROMの解析


セレクトモニタのプロトコルとパラメータの格納位置

ディーラーにあるセレクトモニタを解析された"Diagnostics and Datalogging for Subaru SVX"のPhilさんには感謝しかありません。このページと出会わなかったら、ここのページにあるソフトウェアは実現しなかったでしょう。彼と彼の協力者たちは多くのプロトコルとECU ROM/RAM上にあるパラメータについて長年時間をかけて解析されたのだとおもいます。これほど多くの解析結果をまとめたサイトはそれまでみたことがありませんでした。
このページでも言及されているように、カシマ氏のページhttps://kaele.com/~kashima/car/gc8.htmlも参考にされているようです。セレクトモニタのプロトコルは、コマンドを送ったら必ずレスポンスが帰るという保証はなく、いわゆる垂れ流しで、レスポンスが来たかどうか読み出し側で見ながら、返事が来ないようなら再送するなどの処理が必要です。うまく作らないととても通信速度はとても遅くなってしまいます。SSMプロトコルに関しては、他で解説されていますので、ここではあえて解説しないことにします。
Philさんはセレクトモニタを入手して、通信内容を傍受することによって、どんなコマンドが送受信されているのを調べたようです。また、セレクトモニタ自体も解析して、カートリッジ内に保存されいているECUパラメータのアドレス、パラメータの名前や単位、値の計算方法についても割り出したようです。
私はSVX以外にも98年式のインプレッサWRXを所有しており、友人やクラブのメンバーもまだ90年代のスバル車に乗っています。そこでSVX以外にも対応できればということで、当初稀にオークションに出品されるセレクトモニタを入手して同様に解析しようと考えました。ところがセレクトモニタ自体も中古でボロボロの割には法外に高いうえに、車種ごとにカートリッジが必要で必要な情報が入ったカートリッジが付属しているのかどうかもよくわかりません。ディーラーに相談しても、「現在はSSM3やSSM4を使っていて、以前確かこんなカートリッジを使用していたと思う」的な回答しか得られませんでした。カートリッジはまだ注文できるようですが、それも1つ当たり数万円もしてとても個人でいくつも揃えられるような金額ではありません。そこでセレクトモニタの解析は諦めて、ECU自体を解析することにしました。
初代インプレッサは前期・中期・後期でECUが大きく異なっています。前期はSVXや2代目までのレガシィと同じ9ピンの角形コネクタを有しており、他のメーカーと互換性がありません。MPUには三菱のM37700シーリーズである。M33391が使用されているようです。これはJECSがカスタムしたMPUで、詳しい資料は公開されていません。M37700のデータシートやマニュアルは入手可能ですので、およそこれに似た感じだろうということは推測できます。おそらく内部のマスクROMのサイズやADコンバータの数などが異なるとおもわれます。M37791のメモリ空間の先頭はI/Oで、次いでRAMがあり、ROMは後ろ半分の32KBのようです。間に不明な空間もありますが、一部は大気圧モジュールのようです。大気圧モジュールは前期型のSVX当初は国内向けには搭載されず、US仕様のみだったようですが、その後順次搭載されるようになったようです。
一方、中期のインプレッサはODBコネクタが搭載されています。しかし、コネクタの形状はODBですが、CANの信号は接続されておらず。メーカー固有で予約されている空きピンに従来のSSM2の信号が割り当てられています。形状がODBなので、ODB IIの診断機やELM327を接続してなにも表示されないのでがっかりする人も多いようです。中期のMPUは不明ですが、命令コードが同じようなので同じM37700シリーズのようです。ただし、メモリマップは異なっていて、先頭にRAM、後半の43KBがROM領域のようです。M37700MPUは入力ピンの一部で内部ROMと外部ROMを切り替えできるようですが、現時点ではECUの中を開けていないのでチップ内部のROMを使用しているか、外部ROMを使用しているのかは不明です。

エンジン回転数や水温などのパラメータが格納されているメモリ上の位置はそれぞれ車種ごとに異なります。同じMPUを使用しているSVXと前期型GC8でも場所は異なります。格納される情報はおおよそ共通なのでどの車種でも同じ場所にしておけばセレクトモニタのカートリッジを更新する必要もなく、便利だと思うのですがそうなっていません。もともとそんな情報を外部から読み出すようなことは考えられていなかったのかもしれません。前期型と中期型のインプレッサではRAMとI/Oの場所が変わっていますので、当然同じ位置ではありません。

逆アセンブラだけではよくわかりません

M37700シリーズのMPUというのは少々かわったMPUです。通常のMPUは命令コードの動きは固定されて変わったりしません。しかし、このMPUはステータスレジスタ内のMフラグ、Xフラグの状態によって、扱うデータのサイズが8bitになったり16bitになったりします。そうすると命令コードのオペランド(引数)の数も変わります。同じ加算命令が2バイトだったり3バイトだったりするわけです。そうなると、その命令が実行されるときのステータスレジスタの状態がわからないとどちらの命令なのかがわからないことになります。本来8bitで動作する命令を16bitで扱うと、次の命令の1バイトを引数の一部として扱ってしまうことになりますし、本来16bitで動作する命令を8bitで扱うと、引数の一部を次の命令として扱ってしまうことになり、正しい動作ができません。ROMのバイナリデータをアセンブルリスト(ソースコード)に直す処理でも、その場所の命令が8bitで動作するためのものなのか、16bitで動作するためのものなのかがわからないと解読できないことになります。
カシマ氏によって作成された逆アセンブラはとてもよくできていて、フラグの状態を設定したうえでバイナリコードをアセンブリ言語に直すことができます。しかし、これを手作業で行うのにはとても時間がかかります。そこで、プログラムを実際に走らせながら、Mフラグ、Xフラグの状態を更新しながら逆アセンブルしてしまおうということで、解析ツールを作り始めました。ようするにエミュレーターです。
エミュレートするのはMPUだけで、チップ内部のタイマやSIOなどのI/Oや基板上に乗っている外部I/Oまではエミュレートしていません。したがって、I/Oの終了待ちなどで無限ループに入ってしまうことを回避するために、単純にエミュレーションをするだけでなく、分岐命令に着目して、分岐先をそれぞれ別途解析する機能を追加しました。解析が終わるとプログラム部分はアセンブリ言語に、それ以外はデータとして表示されますので、プログラム中に埋め込まれたデータを発見するのに役立ちます。分岐命令でジャンプされた場所は逆アセンブルリスト中にはラベルとして表示されます。
更に、データとしてメモリアクセスしに行ったことも記録し、読みだされたのか、書き込まれたのかによってメモリの内容を色分けして表示できるようにしました。これによってデータへのアクセスを調べやすくなっています。
またプログラムカウンタを自由に設定して任意の位置からプログラムを走らせることも可能です。これによってプログラムの動きをより正確に知ることができます。エミュレーション機能においてはウオッチポイント等の機能があるともっとよいのですが、とりあえずセレクトモニタソフトウェアで使用するパラメータを見つけるという目的には十分になってきたので、ここでいったん一区切りとして公開しようと思います。プログラムの解析が完璧ならば、将来的にはアセンブラを用意することでソースコードからROMデータを作ることも可能になるかもしれません。


使用方法について

ECUのROMのプログラムを変更するにはM37700の詳しい知識と理解が必要ですが、ここでは簡単にセレクトモニタソフトウェアで参照しているデータの格納アドレスを見つける方法を説明しておきます。


1) まずは解析するMPUのタイプによってROM,RAMなどの位置と範囲を設定します。


2) ファイル->ROMファイルを開く でセレクトモニタソフトウェアで読み出したROMデータを読み込みます。


3) 解析タブを表示して、全解析ボタンを押すと解析が始まります。


4) 解析が終わると、ROM/RAM上のメモリ内容が色わけされて表示されます


5) 逆アセンブルタブをクリックするとプログラム部分がアセンブリ言語で表示されます。データの部分はデータとして表示されます。


6) RAM部分は読み書きのされたところが色分けされて表示されます。


7) 逆アセンブル画面でROM/RAM上のパターンを検索することもできます。



ダウンロードとインストール

下記のリンクからzipファイルをダウンロードして、PCの任意のフォルダに解凍してください。レジストリは使用していません。設定の変更はインストールしたフォルダ内の"ecu_analizer.ini"ファイルに保存されます。)


SUBARU M377xx ECU解析ツール

Build 240224 (Beta) 右クリックでダウンロード
Build 230303 (Beta) 右クリックでダウンロード





免責事項と不具合対応について

あまり細かいことは書きたくないのですが、トラブルを避けるために簡単ですが使用許諾について 最低限記載しておきます。

ソフトウェア使用許諾
  1. 商用利用の禁止
    「本ソフトウェア」の使用は個人的な目的に限られます。商用目的の利用は原則認めません。(商用利用したい方がおられましたら、お問い合わせください)
  2. 使用許諾
    「本ソフトウェア」を許可なく再使用許諾、譲渡、販売することはできません。頒布、賃貸もしくは貸与すること、 複製もしくは翻訳することは自由です。
  3. 権利の帰属
    「本ソフトウェア」およびその複製物にかかる一切の権原および所有権は、グルーヴデザインサービスに帰属します。
  4. 保証の否認・免責
    1. 「本ソフトウェア」は、『現状のまま(AS-IS)』の状態で使用許諾されます。グルーヴデザインサービスは、 「本ソフトウェア」に関して、商品性および特定の目的への適合性の保証を含め、いかなる保証も、明示たると黙示たるとを問わず一切しないものとします。
    2. 「本ソフトウェア」の使用または使用不能から生ずるいかなる損害(逸失利益およびその他の派生的または付随的な損害を含むがこれらに限定されない )について、一切責任を負わないものとします。
  5. サポートおよびアップデート
    本ソフトウェアの機能は外部から提供された情報およびサービスマニュアルに記載していある情報により作成されています。情報に間違いがあったり資料に未記載の部分は推測で作成されたりしている部分もあります。使用されて実際の状態と異なっているなどの情報は歓迎します。ソフトウェアの修正に役立てたいと思いますが、ソフトウェアアップデートのタイミングについてはお約束できません。すぐに対応できない場合がありますのでご了承ください


寄付と連絡先について

本ソフトウェアの作成について、いくらかの手間と費用が掛かりました。本ソフトウェアをリリースするにあたり、今後のメンテナンスをどこまで行うかは悩むところではありますが、本ソフトウェアをドネーションウェアとすることにしました。寄付の方法は、当面の間、E-mailタイプのAmazonギフトとします。寄付の金額は任意です。使っていただいて価値があると思われましたら任意で送付ください。送付先は におねがいします。不具合報告や、改善リクエストに関しましても、同メールアドレスへご連絡お願いします。

アマゾンギフトへのリンクを掲載しようと思ったのですが、迷惑サイト(詐欺サイト)と判断されてしまうようです。お手数ですが、"Amazonギフトカード (Eメールタイプ)"で検索ください。
アクセスカウンター アクセスカウンター