2013-04-17

ECUデータの逆アセンブル

CX4AのECUいじりも大分進んで来たが、未だにSST関連が手つかずとなっていた。
と言うのも、定義ファイルにSST制御関係のアドレスが記述されていないため、SST関連領域の設定が出来ない状態。

SST制御関係が解析完了され、配布されている定義ファイルを調べてみると、USDM、EDM仕様のがあったが、JDM仕様のはない。
と言うのも、JDMの定義ファイルはあまり出回っていないんですね。

となると、ECUのデータのバィナリデータを逆アセンブルして人間が読めるようなテキストデータにしなければならない。

色々調べると、DISHと言うフリーソフトを使うと良いようだ。

以下、ある程度の知識がある人向けの解説です。DOSの知識がない方は別途勉強してきて下さい。

お約束ですが、以下の記事に関しては自己責任で!

窓の杜 DISHのダウンロードページ

DISH2を入手したなら、展開し、逆アセしたいECUデータをそこへ入れます。
(ECUデータのファイル名はjdm.hexとします)
そしたら、プロンプトで
> b2mhex32 jdm.hex jdm.mot

するとmotファイルが出来ますが、逆アセ出来るのは32KBまでなので、分割する必要があります。
> split32 jdm.mot

とすると32KB毎に分割されます。うちの場合、jdm.000~jdm.096と97個のファイルが出来ました。

あとは、97回プロンプト画面で逆アセしていきますが、非常に面倒くさいのでバッチファイルを作るのがイイのですが、コピペしたり加算したりしていくだけでも面倒くさい・・・

なのでphpで下記のコードを書いてWebサーバーにアップロード、ブラウザでアクセスする事でバッチファイルがサクッと表示されますので、それをコピペしてbatファイルとして保存。

以下、bat.php
<?
$ii = 0;
for($i=1; $i<=97; $i++) {
$iii = str_pad($ii,3,"0",STR_PAD_LEFT);
echo "dish2 jdm.".$iii." >> jdm.log<br>";
if ($ii == 0) {
echo "COPY jdm.lst jdmALL.lst<br>";
} else {
echo "COPY jdmALL.lst + jdm.lst<br>";
}
$ii++;
}
?>
ここまで

これを実行させると

dish2 jdm.000 >> jdm.log
COPY jdm.lst jdmALL.lst
dish2 jdm.001 >> jdm.log
COPY jdmALL.lst + jdm.lst
     中略
dish2 jdm.096 >> jdm.log
COPY jdmALL.lst + jdm.lst

こんな感じで吐き出されますので楽ちんです。

JDM仕様のECUデータの逆アセが終わったら、次はEDM仕様のECUデータの逆アセもやります。
これは比較の為に必要なのでEDM仕様のデータを入手して下さい。
これがないと解析は出来ないです。エボフォーラムで探せば見つかります。

うちは2012年式なので、EDM仕様のデータも2012年式のものにしました。

そんなこんなで逆アセが終わると、jdmALL.lstとedmALL.lstが出来上がります。
ファイルサイズが280MByteとデカいですが、今のマシンスペックでやるなら大丈夫だと思います。

SST関連のデータの解析ですが、ざっくりと解説します。

SST Limit Temperatureと言う項目があります。これはSST油温が華氏293度以上になるとセーフモードに突入するように設定されています。
ECUFlashのEDM仕様の定義ファイルをみると、



<table name="SST Limit Temperature" address="54aee">
<table name="x">
<data>Limp Mode ON</data>
<data>Limp Mode OFF</data>
</table>
</table>


となっており、アドレスは54aeeと分かります。


エディタでedmALL.lstを読み込ませて54aeeで検索をかけます。


こんな感じで、.DATA.W H'00B9の値を参照している事が分かりますね。
あとはjdmALL.lstでも同様に54aeeで検索をかけます。


あれ、全然違いますね。しかし、EDM仕様のECUデータはJDM仕様と良く似ていると言われていますので、そのアドレスの近くを探してみます。


54aeeの7つ下にありました。そのアドレス、54afcをjdm仕様の定義ファイルに追加します。


<table name="SST Limit Temperature" address="54afc">
<table name="x">
<data>Limp Mode ON</data>
<data>Limp Mode OFF</data>
</table>
</table>

こんな感じですね。
あとはこんな風に解析していけば良いと思います。
3Dマップでアドレスが見つからないケースが出て来ると思いますが、末尾の値を1つ減らして検索かければ大丈夫です。

SST関連の設定って、結構あるので時間がかかりますが、じっくりと楽しみながらやっていきます。

このマップをいじればアクセルオフ時のエンブレがリアルタイムになるかも・・・


0 件のコメント:

コメントを投稿

SSTオイル(DCTF)交換

ウチのCX4A、75000Km走行していて、SSTオイルは無交換だったので交換する事にした。 某ショップでSSTオイル5.5L+フィルター交換で39500円と見積もり出されてたんで、ショップ交換を考えていたが、やはり自分でやりたくなったのでDIYでやることにした。 必要なもの...