前回の続きです.
YAMAHAの電動車椅子ユニットのNiMHバッテリー.新品で5万円ぐらいする.300回で劣化.日常使いするモノにしてはコスパ悪いもんです.
これのNiMHを交換しても解決にはなりませんで、EEPROMを初期化しないと新品同様になりません.そこでEEPROMの解析をします.
(読者が真似して失敗してもわたしは責任取りませんので)
↓ハッキング風景.ぐちゃっ
↓接続構造はこうです.
・STM32のGPIOのpollingでSCL/SDAを監視します(割り込みよりも高速だった)
・プリント基板上のロジックは5V系のようです
STARTはSTM32の出力(3.3V).SCL=1の時にSDAが立ち下がるとSTART eventになる.受信開始の意味である.
positive edge SCLはSTM32の出力(3.3V).このtimingでSDAを取り込むと1bitのdata受信になる.35uSecぐらいのbit rateである.
最もtiming的に厳しいところがSCL posedge~STARTの間隔が10uSecしかないところですが、そこも上手く検出できているので合格とします.
START~STARTの間に、9bitが2度送信されています.前半がcommandで後半がbyte dataになっている.9bitである理由は、8bit+ACK bitだから.
ーーーー
疑問: EEPROMへのアクセスはいつ生じるのか?
充電器にバッテリを挿したり、バッテリ基板の電源をon/offして調べました.
わかったこと.
・バッテリ基板に通電した最初にバースト的にEEPROMアクセスが発生
・充電器に挿した時はEEPROMアクセスが生じない
・走行時にappendするかもだけどそれは目撃してない
こんな観測結果を得ました.
これは何を意味するのかというと、YAMAHA chip内部RAMにEEPROMのdata copyを作っておいて、同copyで諸動作を実行するのでしょう.EEPROMの書き込み回数上限に触れないようにするためよくやられる作法です.
なのでバッテリ基板に通電したときのバーストアクセスを解析すれば何か判るんじゃないかと期待します.
ーーーー
今後の取り組み.
EEPROMアクセスをPCに飛ばします.
やること:
・EEPROMは512 bytesなので、STM32のRAMにとりあえず積む
・積み終わったらCOM portへ送信する
ーーーー
基板1枚のEEPROMアクセスを採取できました.アクセス時系列順です.
横に連なるのは先頭アドレス+Nをシーケンシャルに読んだ結果です.
アドレス100h以降は全部ゼロでした.
ASCII変換したら何か文字が出てくるかな? →出ませんでした
ADRS BYTE DATA
--------------
BD 1D
FE 1D1D
8C 4B082900
90 04B98EF4216ESA0BDSA11D
FE 1D1D
8C 4B082900
90 04B98EF4216E0F3A0800FE02AE006403
A0 800FFE001644000B8E8E818100000017
B0 0000005FFFFFFF5C9000E700A31D
00 8C15A00A251C1C1B0F032851A007000C
10 03007AA0000009032850A00A030C6432
20 02909101210287880642027C7D0E6F02
30 7C7D23F403CADEF20A060003CADEF20A
40 070003CADEF20D0800C0C0ACBABAA6B6
50 B6A2EAE2D4E5DCC9E2D7C2798C44FED0
60 53D004194B7D960D0000080A5A037E90
70 101462440A28284A741E08010A190000
80 00143B6E3814000000000497
理屈ではこう言えるでしょう.
・比較的フレッシュなバッテリーを入手する.(新品ならなお良し)
・そのEEPROMを全部読む.①
・古いバッテリーのEEPROMを①の情報で焼き変える.
・古いバッテリーが蘇る.
↑やりたいのはこれです.
かしこ