2024年5月21日火曜日

YAMAHA電動車椅子NiMHバッテリー 不揮発メモリ解析(1)

YAMAHAの電動車椅子ユニットのNiMHバッテリー.新品で5万円ぐらいする.300回で劣化.日常使いするモノにしてはコスパ悪いもんです.
少し器用な人ならば、バラしてNiMHだけ交換するのを思いつくことでしょう.そうゆう業者もいます.わたしも自分で交換したことがあります.ただし自分でNiMH交換するのには問題があるんです.

問題とは?
バッテリパックの内部基板がこれです.右上のchipがEEPROMで、型名M24C04です.4kBit I2C.
EEPROMの中に充放電回数などが記憶されていて、寿命判定で充電しなくさせるとか、リフレッシュさせるとか、そうゆう操作を充電器にやらせる判断材料になっています.このせいで、自力でNiMHだけを新品に交換しても寿命を延ばせないんです.

バッテリー交換業者はEEPROMをリセットする手順を知っているのでしょうから業者がNiMH交換するなら問題ないのだと想像します.

netを徘徊してもこのEEPROM reset手順の情報は見当たりません.

そこでEEPROMをハックしてみるかというのがこの投稿の目的です.
(読者が真似して失敗してもわたしは責任取りませんので)

ーーーー
M24C04の仕様
4kbit
clock <400kHz

ハッキング方法
M24C04へ通じるI2Cを脇から盗聴したい.

プラン1:
最も簡単なやりかたはこれだけど、STM32内のI2Cが反応してACKを返してバスが衝突するんじゃないかなと思う.
追記:STM32のI2Cは謂わばmaster(clkを出す人)なのでこれ無理なんだわ
プラン2:
STM32内I2Cを使わずに割り込みとport読みでやる方法.SCL周波数がいくらなのか? 割り込みが対応できる速度なのか? それ次第ですね.
プラン3:
かったるいけど堅実なやり方はこれかと.めんどうだけど.
どうしようかなぁ・・・・

SCL,SDAの観測
123の判断材料としてSCL,SDAの波形を知りたい.
↓こんな感じでSCL,SDAを直接観測します.
↓まずはSCL周波数を知りたい.最短28kHzぐらいになってる.意外に遅い.あと5Vスイングしてやがる.
↓これも重要な情報です.I2C規格のSTOP/STARTが映っています.おおよその時間を読むと、
 SCL→STOP 5uSec
 SCL→START 10uSec
これはsoftで処理するにはtiming的に厳しい.(hardwareでなら無問題)
なぜかというと、5uSec間隔でGPIO割り込みが発生するのは短すぎてCPUが取りこぼすだろうから.プラン2は実現が難しそうかなぁ.

プラン1Aを思いついたので、それを試してみます.乞うご期待.

追記:プラン2をpollingのみでやる(割り込み無し)ので上手くできそうな感じがする.HAL driverでGPIOアクセスすると遅いのですが、LL libraryを使うとGPIOアクセスが結構速くなります.


あでゅ~

2 件のコメント:

  1. これはすごい
    五年くらい前にどこかのブログでみたのですがYAMAHAかどうかは覚えていない
    バッテリーのリコールがあって 年月でバッテリー使えなくなる
    自転車屋にいくと バッテリーのフアームを書き換えてくれて バッテリーが復活する
    知らない金持ちは バッテリーを新品買うというもの
    わかる自転車屋にいくと直してくれる
    バッテリーは回数制限あるから豆に充電しないほうがよいとはきいたことある

    返信削除
    返信
    1. これからプラン1Aを行います!
      STM32をプログラミング中!

      削除