2018年11月25日日曜日

WHR-G300NをJTAGで修理してみた。

だいぶ前にOpenWRTとかDD-WRTのファームウェアをいじっていたWHR-G300Nを書き込みミスで破壊してしまったのでJTAGで修理してみることに。FlashがCFIなのでライターが無いし…
u-bootすら起動しないのでシリアルコンソールも無反応で、電源をいれると電源LEDは光るんだけど、DIAGランプが薄く赤く光ってる感じ。

WHR-G300Nを検索するとv1とv2があるようなんだけど日本だとWHR-G300Nといえばv1らしい。CPUがRalink RT3052Fのタイプ。
Flash ROMはMaxim 29LV320DBTI-70G(4MB)で、RAMはESMT M12L128168Aが2つで32MBっぽい。

JTAGは上の写真で言う右側の真ん中より少し下にある14PinのSMDピンヘッダのパットがある辺りがそれっぽい。RT3052FはMIPSアーキテクチャなのでMIPSの14PinのJTAGっぽい。
周りに1005サイズの抵抗のパッドも残っていたけど、とりあえずR28だけ装着すればJTAGが使えそう。(TDOの部分)
本当は100Ωとかをつけておくべきなんだろうけどとりあえずジャンパした。
SMDのピンヘッダをつけたかったんだけど、とりあえずJTAGで行けるのか試したかったのでまずはケーブルをハンダしてみた。

とりあえずUSB BlasterでPCとつないでurjtagで接続してみることに。Windows版がうまく動かせなかったのでLinux版をラズパイ上で動かしてみた。
jtag> cable usbblaster
jtag> detect
IR length: 5
Chain length: 1
Device Id: 00010011000001010010001001001111 (0x1305224F)
  Unknown manufacturer! (00100100111) (/usr/local/share/urjtag/MANUFACTURERS)
detectコマンドを送る直前ぐらいにWHR-G300NのACアダプタを差したらうまく認識するようになった。0x1305224FはRalink RT3052FのIDらしい。urjtagにRalinkの情報が入っていないからUnknownになってるけど。
とりあえず認識できたんだけどurjtagにRalinkのコンフィグがないので海外フォーラムを参考に適当なコンフィグを使用することに。MIPS系ならエンディアンが同じとか。
jtag> include admtek/adm5120/adm5120
ImpCode=01100000010000010100000000000000 60414000
EJTAG version: 3.1
EJTAG Implementation flags: R4k ASID_8 MIPS16 NoDMA MIPS32
Processor entered Debug Mode.
jtag> readmem 0x1f000000 0x30000 uboot
address: 0x1F000000
length:  0x00030000
reading:
CFIのフラッシュメモリはJTAGで書き込めるみたいなんだけど、現状どうなってるのか見るためにuboot領域だけ読み出してみることに。
しかしどうやらubootが動いてないので初期化処理がされてないためか全然読み出せない…
OpenOCDでやらないとだめかも。あちらはコンフィグファイルでフラッシュの初期化とか色々できるみたいだし。

ubootを焼いてTFTPでファームを流し込めばいいんだけど、とりあえず純正のubootをdumpしてくれてる人がいたのでこれをもらってきて書き込めば良さそう。
JTAGで全部焼くと時間がかかるので、ubootだけ焼いてTFTPでdd-wrtを流し込んだらそこから純正ファームウェアに戻してみるとか…
BuffaloのRalinkのubootは暗号化されたファームウェアを受け付けないらしいのでDD-WRTから純正ファームウェアに戻す用のファームウェアを焼かないといけないという面倒なやつ。フォーラムの方からWHR-G300N-webrevert.rarをダウンロードしておく。(ログオンしないと添付ファイルが見えない仕様になってるので、登録してログオンすると見つけられると思う。)


2018年11月24日土曜日

ダンボールでBluetoothスピーカーを作ってみた

友人の家で使っていないPC用スピーカーを発掘したのでBluetoothスピーカーにリメイクしようぜということでテキトーにダンボールで作ってみた。

大学の研究室で適当なジャンクのスピーカーをダンボールに埋め込んで使っていたのを思い出し、今回はダンボールで作成することに。加工が楽だし。

BluetoothモジュールとしてはCSR8635が余っていたのでこれをつかうことに。ダイレクトにスピーカーを繋いでみたらそこそこ音量確保できてるようなのでアンプボードは使わないことに。

今回はパッシブラジエーターというものを使ってみたかったのでとりあえずポチったのはパッシブラジエータぐらい。あとは余っていた部品を使用…
このパッシブラジエータはeBayで2ドルぐらいだった。

バッテリーはジャンクノートから取り外したリチウムイオンバッテリ。充電はCSR8635にやらせると遅いのでTP4056搭載の充電モジュールを使用。保護回路も付いてるらしいし。

ダンボールを切って適当にスピーカーとパッシブラジエータをホットボンドで固定したところでCSR8635の書き換え。

書き換えツールは前回作ったものをそのまま利用。
とりあえずマイクはつけないのでHFPをオフった。

スイッチ類はタクトスイッチをホットボンドで固定。本当に適当である…
でも一応この箱を作るのにダンボールに下書きぐらいはしてるけど…

一応完成。このやっつけ感がやばい。

一応電源はソフトスイッチなんだけどトグルスイッチ。他にスイッチがなかった。

充電中は赤く光って終わると隣の青が光るはず。

まぁ音はまずまず。CSR8635のDSPの設定ができればもうちょっと良くなるかな?