ec2-18-223-211-203.us-east-2.compute.amazonaws.com , 118445th | 2002/10/10 UPDATED |
2000.10.7 納車 2000.10.8 ECU分解、何だか良く判らないからとにかく情報収集! 2000.11.17 8bit版ECUの逆アセンブル解析、通信プロトコル解析 解析してなんか良いことあるんかね。 2001.2.14 PowerFCを付けたので、交換したECUを久しぶりにイタズラ。 空きランドの配線追っかけ。 2001.2.21 5型RS・R用ECU(flash版)ゲット 2002.3.12 BDM用アダプタ作成、BDMポート増設 2002.3.13 読み出し成功 2002.4.7 ブートローダ発見 2002.4.24 外付基板製作開始 2002.5.2 外部ROM化成功、書き込みアダプタ製作開始 2002.5.24 MC68HC916Y3入手 2002.6.14 汎用HC16用ICD・プログラマ入手 2002.6.15 改造ファーム書き込み・エンジン始動テスト完了。 2002.8.3 スピリットRデータ入手 2002.8.12 テクトム基板入手 2002.8.23 2Mbpsメモリモニタープロシジャ完成
診断用プロセスはエンジン制御のためのCPU時間を補償していないらしいので、診断ポート使用中にエンジン制御がおろそかになることがある。
![]() 試作I/F基板 |
![]() ECU端子上の通信線 |
model\offs | +0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 |
---|---|---|---|---|---|---|---|---|---|---|
FD3S(I-III) MT |
0x15 | 'N' | '3' | 'A' | '7' | '-' | 'M' | 'P' | '*' | checksum |
FD3S(IV-) MT |
0x15 | 'N' | '3' | 'F' | '1' | '-' | 'M' | 'P' | '*' | checksum |
FD3S(IV-) AT? |
0x15 | 'N' | '3' | 'F' | '2' | '-' | 'M' | 'P' | '*' | checksum |
offs | +0 | +1 |
---|---|---|
to ECU | 0x03 | checksum |
offs | +0 | +1 | +2 | +2N-1 | +2N | +2N+1 |
---|---|---|---|---|---|---|
to ECU | 0x40 to 0x47 N=CMD-0x40+1 | address.1 | ....address.N | checksum |
offs | +0 | +1 | N | +N+1 |
---|---|---|---|---|
from ECU | command | data.1 | ...data.N | checksum |
offs | +0 | +1 | +2 | 2N+1 | 2N+2 | 2N+3 | 2N+4 |
---|---|---|---|---|---|---|---|
to ECU | 0x48 to 0x4f N=CMD-0x48+1 | address.1 | ....address.N | repeat count(C) | checksum |
offs | +0 | +1 | +N+1 | +N+2 | +CN+1 | +CN+2 |
---|---|---|---|---|---|---|
from ECU | command | data.0 | ...data.N | data.0 | ...data.N | checksum |
offs | +0 | +1 | +2 | +3 | +4 |
---|---|---|---|---|---|
to ECU | 0x50 | top addr | length(L) | checksum |
offs | +0 | +1 | ...+L+1 | +L+2 |
---|---|---|---|---|
from ECU | command | data[0] | data[L] | checksum |
offs | +0 | +1 | +2 | +3 | +4 | +5 |
---|---|---|---|---|---|---|
to ECU | 0x58 | top addr | length(L) | repeat count(C) | checksum |
offs | +0 | +1 | ...L+1 | CL+2 | ...CL+1 | +CL+2 |
---|---|---|---|---|---|---|
from ECU | command | data[0] | data[L] | data[0] | data[L] | checksum |
offs | +0 | +1 | +2 | +3 | +4 | +5 |
---|---|---|---|---|---|---|
to ECU | 0x90 0xa0 0xb0 | address | N/A | peripheral # | checksum |
offs | +0 | +1 |
---|---|---|
from ECU | 0x13(???) 0x1c(accepted) 0x1d(done) | checksum |
offs | +0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 |
---|---|---|---|---|---|---|---|---|
to ECU | 0x98 0xa8 0xb8 | address | N/A | peripheral # | peri.# | peri.# | checksum |
offs | +0 | +1 |
---|---|---|
from ECU | 0x13(???) 0x1c(accepted) 0x1d(done) | checksum |
offs | +0 | +1 |
---|---|---|
from ECU | 0x14 | checksum |
offs | +0 | +1 |
---|---|---|
from ECU | 0x19 | checksum |
id N3F1 | |||
---|---|---|---|
description | param. | address | unit |
intake air pressure | BPRS | 0x0018.w | @500/256 [mmHg], offset -1000mmHg |
throttle angle(Nallow) | TPSN | 0x001a | @5.00/256 [V] |
O² sensor voltage | O2S | 0x001c | @5.00/256 [V] |
battery voltage | BATT | 0x001d | @20.0/256 [V] |
water temperature | WTMP | 0x0022 | @160/256 [ºC], offset -40ºC |
intake air temperature | ITMP | 0x0024 | @160/256 [ºC], offset -40ºC |
fuel temperature | FTMP | 0x0026 | @160/256 [ºC] |
MOP position | MOP | 0x0029 | @5.00/256 [V] |
throttle angle(Wide) | TPSF | 0x002a | @5.00/256 [V] |
ignition point(lead) | IGNL | 0x0036 | @90/256 [deg.], offset -25º |
ignition point(trail) | IGNT | 0x0037 | @90/256 [deg.], offset -25º |
vehicle speed | SPD | 0x0039 | @356/256 [km/h] |
injection time(pri.) | INJP | 0x0032.w | @1/256 [ms] |
injection time(sec.) | INJS | 0x0034.w | @1/256 [ms] |
engine speed | RPM | 0x003a.w | @500/256 [rpm] |
turbo precontrol | TPC | 0x003e | @100/256 [%] |
wastegate control | WGC | 0x003f | @100/256 [%] |
idleing Control | ISC | 0x0042.w | @800/256 [%] |
id N3A7 | |||
---|---|---|---|
description | param. | address | unit |
intake air pressure | BPRS | 0x0021.w | @500/256 [mmHg], offset -1000mmHg |
throttle angle(Nallow) | TPSN | 0x0023 | @5.00/256 [V] |
throttle angle(Wide) | TPSF | 0x0024 | @5.00/256 [V] |
O² sensor voltage | O2S | 0x0025 | @5.00/256 [V] |
MOP position | MOP | 0x0026 | @5.00/256 [V] |
battery voltage | BATT | 0x0027 | @20.0/256 [V] |
water temperature | WTMP | 0x0028 | @160/256 [ºC], offset -40ºC |
fuel temperature | FTMP | 0x0029 | @160/256 [ºC] |
intake air temperature | ITMP | 0x002a | @160/256 [ºC], offset -40ºC |
engine speed | RPM | 0x002c.w | @500/256 [rpm] |
vehicle speed | SPD | 0x002e | @356/256 [km/h] |
injection time(pri.) | INJP | 0x0800.w | @1/256 [ms] |
injection time(sec.) | INJS | 0x0802.w | @1/256 [ms] |
ignition point(lead) | IGNL | 0x0804 | @90/256 [deg.], offset -25º |
ignition point(trail) | IGNT | 0x0805 | @90/256 [deg.], offset -25º |
idleing Control | ISC | 0x0806.w | @800/256 [%] |
turbo precontrol | TPC | 0x0809 | @100/256 [%] |
wastegate control | WGC | 0x080a | @100/256 [%] |
68HC16の同期シリアルには 32byteのバッファが付いていて、短いフレームであればほとんどCPU時間を消費せず処理することができる。 当然 2Mbpsで連続通信できるわけではないが、実測ではエンジン始動時で、50Kbpsの通信速度を得られた。
単なるワークエリアダンプであれば、16bit/charで16word/frameとすると、エンジン始動時でも、500kbpsほどのパフォーマンスが得られる。 しかし、リアルタイムでRAMの全貌を見る必要も無いし、だいたいその超ロングパケットを受けきれるマイコンは68HC16と同じシリアルモジュールを持つもののみなのである。;(^^)
offs | +0 | +1 | +2 | +3 |
---|---|---|---|---|
from ECU | 0000SSSS:read 0001SSSS:write 1111----:nop S = segment addr | address | read data or verify data | |
to ECU | 0000SSSS:read 0001SSSS:write 1111----:nop S = segment addr | address | write data |
![]() 通信のテスト中。 ちなみに、写真中のフラッシュROM AT49F1024は、BDM経由で10秒ほどで書き換えができる。 |
![]() 試作モニタI/F子亀基板 フラッシュ版ECU専用。 |
![]() 簡易モニタソフト |
![]() リアルタイム編集& マップトレース(軌跡追尾付き) |
![]() STK15C88不揮発SRAMモジュール チップはarrow.comで$15.9 |
このモジュールと、先の通信ルーチンを利用すれば、パワーFCやFCONのようにマップデーターをリアルタイムで変更することが可能となる。
内部クロックは 16MHzで駆動されている。
![]() 汎用MC68HC916Y3 digikeyで$67。 |
![]() 汎用書き込み機と インサーキットデバッガ。 P&E社製 $525。 |
ECUにBDM用端子を増設し、PC用のLPTポートに付けるBDMポッドを作る。
DO6-N3G1Copr.NIPPONDENSO・・・・読み出し中
/CS10セレクト端子に接続されていることからして、プログラム領域は内部ROMのまま、マップ部分のデータだけを外部ROMに置いて使う目的であったと推測される。
![]() 装着時 |
![]() 基板の配線。ちなみに電磁石ではない。(笑) |
![]() メイン基板との接続。QFPの足を跳ね上げて、基板側ピン側それぞれから配線を取り出す。 |
![]() デバッグ中。 対外一発では動かないものである。 |
![]() チューチュー |
![]() 装着時 |
![]() 基板裏 |
![]() QFP160ピンのげた |
![]() ゲタのアップ |
でも、ECU内にパターンカットをしてまでアナログ基板を内蔵するのは、イマイチである。 純正ECUがもったいない。 ECUのハーネスをカットしてユニットを1にまとめた方がよっぽどスマートでかっちょいい。
![]() ECU内基板 |
![]() 外付けユニット基板 |
![]() 基板おもて |
![]() 基板うら |
![]() コネクタ部 |
ちなみに、マスク版のCPUにはブートローダは搭載されていない。
EEPROMの書き換えプログラムを適用すれば、ROMデーターの任意のアドレスを書き換えすることができるし、読み出しプログラムを転送すればROMの吸い出しも可能である。
通信設定は、8bitノンパリティー stop bit 1で、速度は 9,600bpsである。
offs | +0 | +1 | +2 | +3 | +4 | +5 | +6.....N-1 | +N |
---|---|---|---|---|---|---|---|---|
to ECU | 'S' | top addr(MSB) | data length | data | check sum |
top addr(MSB)はアドレス24bitの上位16bitであり、下位8bitは 00がセットされる。 データーをlengthの長さだけ受信したら、チェックサムを照合して、top addrで指定した番地へプログラムカウンタがセット(JMP)される。
![]() -- LINK FREE -- |
||
HOME | LAST |