ラベル 福祉・医療 の投稿を表示しています。 すべての投稿を表示
ラベル 福祉・医療 の投稿を表示しています。 すべての投稿を表示

2025年4月3日木曜日

スギ花粉の季節、鼻炎の症状が出ないホラー

やばいです.

わたしは高校生ぐらいからスギ花粉の症状が出始めて40年以上経ちます.

世間では今年のスギ花粉は酷いと聞きます.

しかし、どういうわけか今年のわたしは鼻炎症状がほとんどゼロなんです.2月からアレジオンを服用するのは例年通りなのですが、例年通りならアレジオンなんか効きゃしませんで、鼻炎症状に苦しむんです.

不気味です.免疫力がガタ落ちしてアレルギーする元気すらなくなってしまったのでしょうか? ホラーだよ

80歳の老人の免疫力のガタ減りは目も当てられないほどですが、わたしはまだ60歳なんでアレルギー消滅とかいうほどではないと思われ、HIVなのか? ホモじゃないよ

我が家の周辺にだけスギ花粉をブロックする領域が展開されているなどだったら安心なんですが.

抗体検査してもらおうかな?
郵送でできるサービスがあったよな気がする.

読者の中にもスギ花粉が治ってしまったHIVクンはいますでしょうか?

えいめん

2024年9月11日水曜日

たん吸引器レクチャー

今日はたん吸引器の使い方レクチャーを受けました。

たん吸引器はAmazonで3万円ぐらいで買えるんですね。医療行為には入らないのかな? 機器の構造はただの負圧ホースなので単純です。

喉に入れる時と出すときに引っ掛からないよう、ホースを潰して負圧をかけない様にするのがコツでした。

ホース挿入深さは口唇から5〜10cmと講師さんが言ってて、これがサッパリイミフでした。
だって5cmつうたら喉ちんこにすら達しませんぜ。ディープスロートのお姉さんに鼻で笑われちまいます。
10cmつうても、喉の奥から少し下がった程度でしょう。そんなんでたんを吸えるんでしょうか?

講師さんにクドクド訊いてなんとなく察知したところでは、
 ・素人は10cmぐらいにしとけ
 ・プロはもっと深く攻めることもある
 ・10cmだと声帯の全然手前
 ・10cmだと気管まで達しない
 ・まして気管支なぞ達しない
という事のようです。
優しい吸引。

講習で使った吸引ホースの先端部をもらったので、家で自分で10cmまで咥えて感触を味わってみるなり。

追記:自分で挿入してみた。10cmなんか喉の入口。12cm入れてオエッとなったけどまだ序の口感。ディープスロートはもっとだぁ~

かしこ

2024年7月27日土曜日

YAMAHA電動車椅子NiMHバッテリー 不揮発メモリ解析(6)書き込み

ここから先は安全面でヤバイ領域なので、迂闊に真似とかしないでください.燃えてもわたしは責任とりません.

つぎはいよいよEEPROMを書き替えてみる.活きの良いデータに書き替えるのだ.

24C04Cのdatasheetにeraseという言葉がどこにも無いんだけど、EEPROMって書く前に消去する必要ないんだっけ?

焼けました.書けました.

寿命で死んで充電に入りすらしないバッテリーが、充電に入るようになりました.とりあえずsystemの上辺だけですが、活きの良いモノに蘇ったといえるでしょう.CPUユニークなシリアルNo.との一致検出はしてないみたいです.

とはいえ、、、劣化した個体はNiMH自体が劣化してスカスカでしょうからEEPROMを焼き変えても満充電にならないと推測されます.しかしNiMHをフレッシュ品に交換すればいいわけです.

↓そんなに古くないはずの自作NiMHに換装する.かつ基板のEEPROMは活きの良いデータに焼き変え済.
↓その条件で充電試験中.これで5個点灯まで行けばOK.周囲の物は古いbatteryの残骸多数です.
追記:2ヶ点灯で止まってしまいました.NiMHがボケていたのか、劣化していたのか.温度上昇で止まった可能性もあり.
追記2:冷まして追加充電したら5ヶ点灯になりました.本当に蓄電できたのだろうか?

↓基板からGND,SDA,SCLの取り出し状況
↓EEPROMを焼く際はWrite Protect PinをLowに落とす必要がありますので、裏面でハンダジャンパーしてGNDにする.

Arduino sketchを全面公開するのはやめときます.
EEPROM writeの箇所だけ転記しておきます.
    for(int adrs = 0; adrs<512; adrs++){
      int a = adrs & 0x100; // adrs[8]
      a = a==0 ? 0 : 1; 
      Wire.beginTransmission(0x50+a);
      Wire.write(adrs&0xFF); //lower address[7:0]
      Wire.write(eprom[adrs]); //write data
      Wire.endTransmission();
      delay(5);
    }


かしこ

YAMAHA電動車椅子NiMHバッテリー 不揮発メモリ解析(5)寿命品と現役品のEEPROM比較

YAMAHA NiMHバッテリ解析の続きです.

活きの良いバッテリと寿命が尽きたバッテリのEEPROMデータです.
赤い部分が違うところ.ずいぶん違いますねぇ.

活きの良いバッテリーのデータ(BLACK)
000 : 20 15 04 00 1C 1B FF FF FF FF FF FF FF FF FF FF 
010 : 40 1A 1E 0D 1E 0D 1E 0D 00 FF FF FF FF FF FF FF 
020 : 01 10 42 00 42 00 43 00 01 10 14 00 45 00 01 10 
030 : 00 00 50 00 08 00 48 00 EB 47 CF 66 00 00 00 00 
040 : 00 00 00 00 00 00 00 00 BC 7F 04 00 00 00 00 00 
050 : 60 0D 7C 21 1D 2B CD 05 C3 00 42 00 01 00 00 00 
060 : 00 00 00 01 00 00 00 00 00 3E 00 00 00 00 00 00 
070 : 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 
080 : 00 00 F0 B4 1E 00 0C 01 00 00 02 16 0D C5 0A 94 
090 : 00 0D 03 00 DE 03 25 50 01 01 02 01 32 46 3A 3B 
0A0 : 6D 6B 67 5D 5B 5E 5D 56 00 00 00 00 00 00 00 00 
0B0 : 30 00 29 06 04 17 00 29 05 18 FF FF FF FF FF FF 
0C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
0D0 : 22 11 4E 13 54 24 E8 03 88 13 AD 01 18 00 77 00 
0E0 : E8 03 10 27 00 00 18 00 F0 00 E8 03 FF FF FF FF 
0F0 : FF FF FF FF FF FF FF FF 00 17 FF FF FF FF E4 01 
100 : 1A 00 00 00 09 74 00 00 09 D0 00 00 09 A7 01 00 
110 : 09 02 02 00 09 5F 02 00 03 B6 5A 00 00 00 00 00 
120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 


寿命で死んだバッテリーのデータ(BLACK)
000 : FE FE 01 00 1C 09 FF FF FF FF FF FF FF FF FF FF 
010 : 9A 0D 00 00 08 30 14 83 FF FF FF FF FF FF FF FF 
020 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
030 : 00 00 CF 01 1E 00 C1 01 00 00 00 00 00 00 00 00 
040 : 00 00 00 00 00 00 00 00 C6 DE 19 00 00 00 00 00 
050 : 35 01 F9 24 EC A3 26 0C 9A 06 0D 01 00 00 00 00 
060 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
080 : 00 0F 10 4E CE 00 13 12 FF 00 20 F4 0C 20 0B 63 
090 : 02 07 0F 00 E5 08 1C 0C 02 03 02 02 1D 01 1A 1C 
0A0 : 61 4C 5D 61 5A 4C 5B 55 00 00 00 01 00 00 00 00 
0B0 : 0E 00 25 09 14 92 00 25 08 1D FF FF FF FF FF FF 
0C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
0D0 : 22 11 76 13 54 24 E8 03 88 13 AF 01 18 00 77 00 
0E0 : E8 03 10 27 00 00 18 00 EC 00 E8 03 FF FF FF FF 
0F0 : FF FF FF FF FF FF FF FF 00 17 FF FF FF FF 0A 01 
100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

4へ     6へ

かしこ

YAMAHA電動車椅子NiMHバッテリー 不揮発メモリ解析(4)直接占拠

暑いから家に閉じこもって回路設計してますか? してますよね?

前回が2024年5月23日でしたから間延びしてしまったYAMAHA電動車椅子バッテリーハッキングの続きです.前回はこちら

なお免責:真似して燃えても俺はしらん

↓経緯は過去投稿を読んでもらうとして、古くなって使えないBLACK batteryから取り出した基板のEEPROMを直接読んでみた.
↓24C04という4kbit=512bytesのEEPROMが載ってる.(写真は剥がしたとこ)
I2Cを取り出すサービスコネクタのランドがありんす.ここにarduinoを接続して、直接占拠を行う.本体のCPUが24C04に繋がったままだが、静止状態ではI2C busをHigh-zにしたままで本体CPUは何もしないので、外部者がサービスコネクタからアクセスできてしまうという事情だ.
↓作業風景

たぶん読めたと思う512bytesデータを示します.
寿命で死んだバッテリーのデータ(BLACK)
000 : FE FE 01 00 1C 09 FF FF FF FF FF FF FF FF FF FF 
010 : 9A 0D 00 00 08 30 14 83 FF FF FF FF FF FF FF FF 
020 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
030 : 00 00 CF 01 1E 00 C1 01 00 00 00 00 00 00 00 00 
040 : 00 00 00 00 00 00 00 00 C6 DE 19 00 00 00 00 00 
050 : 35 01 F9 24 EC A3 26 0C 9A 06 0D 01 00 00 00 00 
060 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
080 : 00 0F 10 4E CE 00 13 12 FF 00 20 F4 0C 20 0B 63 
090 : 02 07 0F 00 E5 08 1C 0C 02 03 02 02 1D 01 1A 1C 
0A0 : 61 4C 5D 61 5A 4C 5B 55 00 00 00 01 00 00 00 00 
0B0 : 0E 00 25 09 14 92 00 25 08 1D FF FF FF FF FF FF 
0C0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 
0D0 : 22 11 76 13 54 24 E8 03 88 13 AF 01 18 00 77 00 
0E0 : E8 03 10 27 00 00 18 00 EC 00 E8 03 FF FF FF FF 
0F0 : FF FF FF FF FF FF FF FF 00 17 FF FF FF FF 0A 01 
100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

binaryを眺めたってどうにもなんないけど、256番地以降はall zeroみたいよ.addressingをしくじって読めてなけりゃFFになるはずなのでall zeroは真実なのだろうと思ふ.

ーーーー
arduino sourceについて

Arduinoのsketchについて参考になったのはこちらのページでした.

↓これがsketchの全部.解説はサボる.24C04のaddressingが間違いやすいのでそこだけ下の方に書いておく.EEPROMを読むだけのsketchです.

#include "Wire.h"

void setup() {
  Wire.begin();
  Serial.begin(115200);
}

int adrs = 0; // address[8:0]

void loop() {
  // set address
  int a = adrs & 0x100; // adrs[8]
  a = a==0 ? 0 : 1; 
  Wire.beginTransmission(0x50+a); // device address & addres[8]
  Wire.write(adrs&0xFF); //lower address[7:0]
  Wire.endTransmission();

  Wire.requestFrom(0x50, 1); // read a byte

  byte val = Wire.read();

  char strbuf[50];

  if((adrs%16)==0) {
    sprintf(strbuf, "%03X : ", adrs);
    Serial.print(strbuf);
  }

  sprintf(strbuf, "%02X ", val);
  Serial.print(strbuf);
  if((adrs%16)==15) Serial.println("");

  delay(5);

  adrs++;
  if(adrs==512) while(1);

}

24C04のセカンドソースはたくさんあるらしいのでdatasheetは適当に検索よろ.
↓この手のserialものには定番の、何種類かあるread access方法のうち、上のsourceではrandom accessを使った.前半でaddress指定、後半で1byte readという建て付け.
↓これの前半を拡大する.
アドレス指定バイト=10100000=A0 で良いのだろうと思ったら違ってた.
↓正しいbit assignはこうなっている.下へ1bitずらした7bit=0x50をI2Cへ与える必要がある.
アドレス指定バイトを送信するI2C関数への引数が0x50になっているのはそのせいだ.
 Wire.beginTransmission(0x50+a);
なお、+aはP0 bitで、512アドレス空間のbit8をここに納める.

↓結果的に以上の仕組みではあったが、、、R/W bitはどうすんの?と思ってしまって納得できんのだが、そいつはI2C関数かI2C peripheralが勝手に末尾に付加してくれるものなんだろう.

次回は、活きの良いBLACK batteryのEEPROMを読んでみるです.

#3へ     #5へ

かしこ

2024年5月23日木曜日

YAMAHA電動車椅子NiMHバッテリー 不揮発メモリ解析(3)混沌のブラック

前回の続きです.混沌としてきました.

混沌としている理由は・・・・
(読者が真似して失敗してもわたしは責任取りませんので)

↓グレー品(旧品)とブラック品(現行品)でプリント基板が違います.
グレー品はEEPROMのアクセスが簡単です.
ブラック品はEEPROMアクセスがわけわからん.解析不能.コピー不能.混沌.

↓グレー基板 EEPROMはTSSOP8
↓ブラック基板 EEPROMはSOP8
形状は違いますけど、モノは同じで4kbitのもの.
回路が全然違います.
でも、EEPROMの運用は同じかもしれません.

後日追記:ブラック品に新旧中間仕様の基板を発見しました.メインICは旧品ですがコネクタが新しくなっています.

ーーーー
I2Cアクセス履歴の採取(グレー品)

fuseを挿した起動時のI2Cを盗聴してEEPROMのアクセス履歴を採取しました.
2個体を採取しました.
リストの簡単な読み方を説明すると、アドレスデータになっています.S=START、Q=STOP.

結構ベタッと全アドレスを舐めているので、地道にmappingすれば全体像を復元できそうです.そして重要なのは、固体差は赤の部分だけということです.赤の部分が過去の使用履歴なのでしょう.

バッテリA
SA0BDSA11DQ   ←BDがアドレス 1Dがリードデータ
SA0FESA11D1DQ
SA08CSA14B082900Q
SA090SA104B98EF4216ESA0BDSA11DQ
SA0FESA11D1DQ
SA08CSA14B082900Q
SA090SA104B98EF4216E0F3A0800FE02AE006403Q
SA0A0SA1800FFE001644000B8E8E818100000017Q
SA0B0SA10000005FFFFFFF5C9000E700A31DQ
SA000SA18C15A00A251C1C1B0F032851A007000CQ
SA010SA103007AA0000009032850A00A030C6432Q
SA020SA102909101210287880642027C7D0E6F02Q
SA030SA17C7D23F403CADEF20A060003CADEF20AQ
SA040SA1070003CADEF20D0800C0C0ACBABAA6B6Q
SA050SA1B6A2EAE2D4E5DCC9E2D7C2798C44FED0Q
SA060SA153D004194B7D960D0000080A5A037E90Q
SA070SA1101462440A28284A741E08010A190000Q
SA080SA100143B6E3814000000000497Q

バッテリB
SA0BDSA11DQ
SA0FESA11D1DQ
SA08CSA169080300Q
SA090SA101764BD9C79B0A071100SA0BDSA11DQ
SA0FESA11D1DQ
SA08CSA169080300Q
SA090SA101764BD9C79B0A0711000C02A5007D01Q
SA0A0SA16D02FE0012B1003A8181878100000000Q
SA0B0SA100000000FFFFFFFF80000100011DQ
SA000SA18C15A00A251C1C1B0F032851A007000CQ
SA010SA103007AA0000009032850A00A030C6432Q
SA020SA102909101210287880642027C7D0E6F02Q
SA030SA17C7D23F403CADEF20A060003CADEF20AQ
SA040SA1070003CADEF20D0800C0C0ACBABAA6B6Q
SA050SA1B6A2EAE2D4E5DCC9E2D7C2798C44FED0Q
SA060SA153D004194B7D960D0000080A5A037E90Q
SA070SA1101462440A28284A741E08010A190000Q
SA080SA100143B6E3814000000000497Q

ーーーー
I2Cアクセス履歴の採取(ブラック品)

グレー品はfuseを挿すとEEPROMアクセスが生じましたが、ブラック品はfuseを挿して通電した直後にはなにも動きがありません.充電器に挿した時にEEPROMアクセスが生じます.

採取個体はN=1です.

EEPROMアクセスがグレー品と全く違います.ぎゃふんと言っちゃいます.
アクセスアドレスが飛び飛びなので、mappingしても全体の復元をできそうにありません.
さらに、同じ個体でも起動する度に半分ぐらいのデータが違うんです.先頭でpage切り替えしているみたいなんですけど、それにしたってだろというワケワカメです.
もしかしたら、アクセス速度が早くて盗聴STM32が追い付いてないのかもしれませんが、諸般の事情から推察するにその可能性はあまり高くないです.説明は略します.

結論:ブラック品は、I2Cの盗聴ではEEPROMの全体像をmappingできない.残念.

SFFQ
SA2FFSA307Q  ←page切り替えっぽい
SA0F9SA117Q  ←F9がアドレス 17がリードデータ
SA0FFSA101Q
SA01050200DQ
SA0F8SA100Q
SA032SA14700Q
SA034500400Q
SA036502000Q
SA044SA100000000Q
SA0485025060200Q
SA050503006Q
SA052SA17C21Q
SA054503712Q
SA056SA18305Q
SA058SA1AB00Q
SA05A501E00Q
SA05C500000Q
SA05E500000Q
SA080SA100Q
SA081SA100Q
SA082SA1304A1C00Q
SA086SA102Q
SA087SA101Q
SA0885000Q
SA089SA100Q
SA08ASA102Q
SA08B500B06Q
SA08D506205Q
SA08F504300Q
SA091SA10AQ
SA0925001Q
SA093SA100Q
SA094SA1A003Q
SA0965012Q
SA097SA147Q
SA098SA104010101Q
SA09CSA114174143Q
SA0A050272F2E2FQ
SA0A450252B2C29Q
SA0A8SA100Q
SA0A9500000Q
SA0ABSA10000Q
SA0DASA1AD01Q
SA018SA100Q
SA012SA1E807Q
SA014507403Q
SA01801Q
SA0910BQ
SA0F800Q
SA038E8Q
SA03947Q
SA03A74Q
SA03B66Q

ーーーー
さぁてどうしますかね?

次のプランは、EEPROMの直接占拠を行う.

ーーーー
EEPROM直接占拠のための調査を行う.
ブラック基板のEEPROM近傍を拡大すると、意味深なサービスコネクタが見られます.
EEPROM S24C04を外してみると、WC/SCL/SDAがサービスCNに配線されています.
回路図はこうなっている.
これねぇ、、、非アクセス時にメインチップがI2CをHi-Zにする仕様だったらすごく嬉しい.なぜなら、サービスコネクタの先にSTM32を取り付けて、メインチップが休んでいる時にサービスコネクタ経由でEEPROMにアクセスしたい放題だから.

パターンカットせずに、簡単にEEPROMの直接占拠できるよな気がしてきたぞ.

2へ    4へ

かしこ

2024年5月22日水曜日

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

前回の続きです.

YAMAHAの電動車椅子ユニットのNiMHバッテリー.新品で5万円ぐらいする.300回で劣化.日常使いするモノにしてはコスパ悪いもんです.
これのNiMHを交換しても解決にはなりませんで、EEPROMを初期化しないと新品同様になりません.

そこでEEPROMの解析をします.
(読者が真似して失敗してもわたしは責任取りませんので)

↓ハッキング風景.ぐちゃっ
↓右上のがM24C04というEEPROM.
↓こんな配線になってる.SCL/SDAをハッキング用STM32へつなぐ.
↓信号取り出し場所はこちら.
↓接続構造はこうです.
・STM32のGPIOのpollingでSCL/SDAを監視します(割り込みよりも高速だった)
・プリント基板上のロジックは5V系のようです
・STM32は3.3Vだけど、5V torerantの端子があるので直結(便利なもんだ)
↓STM32がI2Cのeventを検出した様子をオシロに表示させる.ちゃんと検出できてる.
SCLは原信号(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を①の情報で焼き変える.
 ・古いバッテリーが蘇る.

↑やりたいのはこれです.

1へ    3へ

かしこ

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アクセスが結構速くなります.


あでゅ~

2024年4月21日日曜日

アルツにバイアグラ

検索すると今年の2~3月ごろだったのだけど、「バイアグラはアルツを69%減らす」というNEWSが流れました.その後どうなったんですかね?

わたしの毒父はアルツで死にました.アルツに伴う嚥下不良肺炎とかではなくて、アルツが脳幹にまで達したようで呼吸も体温維持も機能を失って死ぬというアルツに全てを捧ぐ死に方.
アルツは発狂するので迷惑なので、アルツの進行を遅くして、なるべく肺炎とか癌とか卒中で死なせるのがベターでしょう.

ところがアルツ薬ときたら、統計的になんとか有意差ありぐらいの効いたかどうだかわかんねーレベルの新薬が承認されて株価が上がるとかショボイ競争が繰り広げられています.

それに比べたらバイアグラはアルツを1/3にするっていうんだから良く効くもんです.脳の血流改善→神経細胞死なない というメカニズムだそうです.アソコの血流だけじゃなくて脳の血流を左右するにはどのくらい大量に飲むのか知らんけどね.

そこらじゅうのジジババがバイアグラで回春して介護士を襲う事件が続発したらなんだかなぁではある.

かしこ

2024年3月7日木曜日

ヤマハ電動車椅子 ひじ掛けを3Dプリンタで改造する(データあり)

ヤマハの電動車椅子をよくみかけます.生産終了かつ部品供給終了の機種もあるので、今後は永久に自分で修理や改造しなくっちゃです.
 モデル名:JWX-1
 型式:X0CまたはX0D
 生産終了時期:2015年
先日、この機種のジョイスティックを修理しました.

今回は、搭乗者の身体的都合により、ひじ掛けを延長してみます.
CADデータは末尾にリンクを張っておきます.

↓わたしが使ってるCADはDesignSparkMechanicalです.こんな2体構造を作ります.
↓既存のひじ掛けには内径15.5mmぐらいのパイプがあります.機種によって違うかもなので各位で構造を確認してください.このパイプを利用してひじ掛けを延長します.
↓15mmのアルミパイプにM6の穴を開けます.これも寸法は機種によりけりでしょう.
↓アルミパイプをひじ掛けパイプに挿入して共締め.M6ネジでした.
↓3DPで印刷した部品でアルミパイプを挟む構造.ネジは適当なコーススレッドを使用.
↓こんな感じに固定します.
↓11cm延長しました.
↓下から見上げ.締結構造.

これで使いやすくなったでしょう.

3Dプリンタをお持ちの方のために、データをupしときます.これらが入ってます.
 ・DesignSparkMechanicalのCADデータ
 ・STL
 ・3mfファイル (cura)
 ・gcode(参考までに)

かしこ

2024年2月27日火曜日

ヤマハ電動車椅子スティックを3Dプリンタで修理する(データあり)

ヤマハの電動車椅子ユニットを組み込んだ車椅子をよく見かけます.世間ではまだまだ現役だと思うのですが、YAMAHAによると生産中止だそうです.故障したら自分で修理しなくちゃいけません.途上国の修理動画みたいな状況です.

モデル名:JWX-1
型式:X0CまたはX0D
生産終了時期:2015年  ←ずいぶん古いな
この機種が故障すると、部品が無いので困ります.
以前、フットレストを修理したのを投稿しました.この時も3Dプリンタで修理しました.

今回の修理箇所はジョイスティックです.
↓我が家ではジョイスティック折れが何度も生じています.レストランなどで机に衝突させるとある日ポキッと折れるんです.あちゃ~っ
↓折れたジョイスティックは中心にM6ネジ(1mmピッチ)が貫通しているので回すと外れます.ただしサイドのM3イモネジ(0.5mmピッチ)を先に緩める必要がたぶんあります.
↓3D CADでモデリング.スライス.
↓印刷
↓左が純正品、右が平坂製作所による模造品.イモネジが見えます.
↓3DPの加工精度ではM6やM3のネジを再現できないので、仕上げとしてM6タップでネジを切ります.サイドにはM3タップでネジを切ります.
↓M6へねじ込んで、さらにサイドのイモネジを取付.
↓修理完了.何故か赤いやつ.
これは交換パーツとして売れる.需要はある.
純正品が¥800ぐらいだったので儲かりはしないけどね.

3Dプリンタをお持ちの方のために、データをupしときます.これらが入ってます.
 ・DesignSparkMechanicalのCADデータ
 ・STL
 ・3mfファイル (cura)
 ・gcode(参考までに)

かしこ