ULAを作る 第2弾(携快電話充電ケーブル編)
Mootan氏のFlashManagerがアクセスランプの点灯に対応しました。PA4,5にLEDを付ければよいわけですが、ケータイエディのケースは小さくて付けられそうにありません。
そこで、比較的ケースの大きい携快電話のUSBケーブルも持っているので、それで作ろうかと思ったのですが、たまたま充電ケーブルが入手できたので調べたところ、このケーブルにはLEDが最初から付いていました。
しかも携帯電話側に端子が沢山出ています。これを何とか利用できないか考えました。
注意!! |
・これは、通常のULAとは配線がまったく違います。この配線で通常のULA_HOSTやFlashManagerを使うと、最悪GBAやULAを壊すかもしれませんので注意してください。 ・逆にここで作ったファームを通常のULAで動かしても同様です。作成される方は注意してください。 ・携快電話の充電ケーブルはPC4,PC5,PB0を使用しています。しかも、チップの下を配線が通っていて、目で見ることが出来ません。したがって通常のULAケーブルを作成するときはパターンカットや部品の取り外しが必要になります。充電機能の無い携快電話のケーブルは大丈夫です。 |
携快電話充電ケーブルを調べる
まず、LEDをどのように点灯させているか調べなければいけません。テスターで配線を追って見ました。
まずはアクセスランプ用の黄色いLEDです。なんと!ポートに220オームの抵抗を通して直接GNDに落ちているではないですか。AN2131SCの出力で直接LEDを点灯させているようです。バッファも何も付いていません。大丈夫なのでしょうか。しかも肝心なPC4,5に接続されています。
FlashManagerの仕様ではアクティブLOWで点灯です。PC4,5はパターンカットすればなんとかなりますが、アクティブHIGHで点灯させているためこのままではちょっと使いにくいです。
後二つ、緑と赤のLEDも付いています。携快電話のマニュアルには何も書いてないようですが、赤が充電中。緑が充電完了のようです。これは充電管理用のIC(これを調べるのが大変でした)に接続されています。このICをポートBを使用して制御しています。無理すれば赤・緑のLEDも使えなくはなさそうです。実際携快電話の充電機能もデータシートと見比べると無理して使ってそうです。
さらに調べる
このケーブル、携帯電話側にやけに多くの端子が出ています。携帯電話と通信するには線が4本あれば十分だと思うのですが、なぜだか携帯電話のReserved端子にも接続されてます。
これを調べるとGND,PC0,PC1,PC2,PC6,PC7,充電用電源の7本出ているようです。PC0,PC6は10Kオームでプルアップ。PC7は10Kオームでプルダウンされています。GNDは満充電の電流設定のため1〜2オームくらい(デジタルテスターの精度が悪いのでふらふらしてる)を通しているようですが問題ないでしょう。
このような理由で標準で対応させるのは無理が出てきました。
しかしファームを書き換えて対応出来ればパターンカットや、部品の取り外しなどしなくてもULAが作成できます。端子にGBAのケーブルをはんだ付けするだけなので、作業も楽です。実際3分もあれば作れます。半田付けになれてなくても10分あれば作れるでしょう。
と、言う事で個人的に使用すると言う前提でファームの作成にも挑戦してみました。
作成
1.まず、携快電話のケースを開けます。ねじ2本で簡単に開きます。そして携帯電話側のケーブルをはずします。
2.下のように接続します
端子にはんだ付けするだけです。あとは何も必要ありません。
AN2131SCとGBAのピンは以下のように接続します。
AN2131SC-------GBA
PC0(14)---------SO(2)
PC1(15)---------SI(3)
PC2(16)---------SD(4)
PC6(20)---------SC(5)
GND------------GND(6)
PC2(今までのPC4&PB0)を入出力にして一本ですませました。
そのままGBAのケーブルを付けただけ |
3.最後はケースに収めて完成です。今回もストッパーがそのまま利用できましたがちょっと緩めです。
ファームの作成
ポートの配置を換えてしまったのでしまったのでファームを作り直さなければいけません。実はMootan氏とのやり取りでFlashManagerのファームを作成していただいたのですが、どうもうまく動作しませんでした。ハード的にチェックしきれていない場所があるかと思い、原因を追求するため自分でファームの作成(といってもヘッダの定数を変えるだけですが)してみることになりました。
GBA_BOOTのソースをダウンロードしてヘッダ部分の定数を書き換えてリビルドすれば出来上がりです。若干の元のソースに定数の直し忘れがあったようですが、そこも修正しました。
アクセスランプがPC4,5に接続されているため、うまい具合に定数をちょっといじれば、そのまま黄色LEDを点灯させることが出来ます。危険かもしれませんが、携快電話でも使っているので大丈夫でしょう。リード時とライト時でそれぞれのLEDが点灯します。
ついでに緑のLEDも点灯させて見ました。これはポートBを操作しないといけません。本当は入力ポートとして使っているところを出力にして緑LEDを点灯させてみました。
次にinfファイルの編集をします。作業はケータイエディと同じです。。
携快電話のINFを見るとVID=0731,PID=1001とVID=0731,PID=1002のようです。
やはりケータイエディと同じで、ローダのPIDが1001でファームを入れると1002になるようですので両方と入れておきました。
[Cypress] に
;Keikai Denwa
%USB\VID_0731&PID_1001.DeviceDesc%=EZUSB.Dev, USB\VID_0731&PID_1001
%USB\VID_0731&PID_1002.DeviceDesc%=EZUSB.Dev, USB\VID_0731&PID_1002
[Strings] に
;Keikai Denwa
USB\VID_0731&PID_1001.DeviceDesc="Project ULA Cable KeikaiDenwa"
USB\VID_0731&PID_1002.DeviceDesc="Project ULA Cable KeikaiDenwa"
と、追加しました。
あとはケータイエディと同じようにUSBに接続して認識させます。
ULA_HOSTを使う
今回作成したファームはULA-Hostでしか使用できません。ULA-HostをダウンロードしてきてULAHost.exeと同じフォルダにリビルドしたgba_boot.bixを入れておけば起動時にアップロードされます。
見事に、使用できました。緑のLEDでファームの起動が確認できます。通信を始めると、2個のLEDが点滅します。私は下の写真のように受信中は上のLED。送信中は下のLEDを点灯するようにしました。通信中は細かく点滅しているので若干暗いです。
赤のLEDも点灯させてみましたが、緑と黄色のLEDは3.3Vで駆動されます。しかし赤のLEDは約4V(充電電圧)で駆動されるため他のに比べて明るくバランスが取れません。今は点灯させていませんが、コントロール可能です。
動作中の様子。ケースに入れると反射でLEDが見えにくいので裸で撮影しました | |
ファームが動くと緑LEDが点灯します |
データのダウンロード中。上のLEDが点灯 画像では赤っぽいですが黄色です |
と、言う事でハード的には問題は無かったようです。今回初めてファームにまで手を出しましたが比較的簡単に変更することが出来ました。しかしあくまでも実験と言う事で、本来のULAとは配線が違っていて互換性が無いため実用的ではありません。
Mootan氏には動作可能を報告し再度ファームをチェックしていただけるようです。FlashManagerで対応していただくと、製作も簡単ですし使えますね。気長に待つことにしましょう。
(現在のバージョン(gba_boot_kkj.bix v0.04)で対応できるようになりました。gba_boot.bixにリネームしFlashManeger.exeと同じフォルダに入れておけば使えるます。LEDは緑が送信、赤が受信のようです)
携快電話の充電機能の無いケーブルも未使用の端子がいっぱい有って、これまた別のポートが出ています。なぜ充電ケーブルと一緒にしなかったのか分かりませんが、これもファームを変更すれば対応できそうです。
携快電話のケーブルは、クリスタルが邪魔で改造する気が起きませんでしたが、ファームの手直しで楽に配線が出来ます。またその気になったら充電機能無しのケーブルも改造してみようと思います。
参考
参考までに私が解析した充電ケーブルの動作を書いておきます。なにか他で使うときにも参考にしてください。あくまでも私が勝手に解析したものなので間違っているかもしれません。
回路図(下手ですがご勘弁を)
充電の制御用にミツミのMM1333というチップが使われているようです。このIC動きはデータシートを見てください。
ポート | I/O | 用途 |
PB0 | O | 強制充電用 |
PB4 | I | 充電完了検知用 |
PB5 | I | 充電中検知用 |
PB6 | O | 充電モード |
携快電話には二つの充電モードがあってそれぞれ動作が違うようです。
「充電完了を自動検出できる」モードと「できない」モードです。「できる」は充電ケーブルで充電完了を検知するもの。「できない」は携帯電話自体で充電完了を検知するもののようです。
「充電完了を自動検出できる」モード
ソフトで充電開始するとPB6(MM1333の1番ピン)がLOWになり充電開始です。充電を開始するとMM1333の7番ピンがLOWになり赤LEDが点灯し、PB5がHIGHになります。充電完了になるとMM1333の2番ピンがLOWになり緑LEDが点灯します。充電ケーブルはPB4がLOWになったことを検知し、充電を終了します。
「充電完了を自動検出できない」モード
ソフトで充電開始をしてもPB6(MM1333の1番ピン)はLOWにならずFETのゲートが約0V(ゼロボルト)になっているので、PB0をLOWにしてMM1333を使わずに強制的に充電モードにしているようです。充電を開始すると赤LEDが点灯しPB5がHIGHになります。しかしMM1333は機能してないので充電完了になっても2番ピンはLOWになりません。ソフト側で設定した時間で充電が終了するようです。
勝手にLEDを使うときの注意
・緑LEDはPB4を出力設定にして、アクティブLOWで点灯可能です。MM1333の2番ピンはオープンコレクタになっているのでそんなに問題は無いでしょう。
・赤LEDを点灯させる時はPB0をLOWにすればよいですが、HIGH(3.3V)にしても完全に消えません。多分FETのゲートが5V近くないとLEDに多少電圧がかかってしまうようです。完全に消すにはPB0を入力に設定する必要があるみたいです。
・どちらも吸い込み電流が定格を超えているかも知れませんが、充電ケーブルで使っているので大丈夫でしょう。
・PB6をLOWにすると、充電するバッテリーがつながっていない場合すぐに充電完了になってしまうようで、赤と緑の両方のLEDが点いてしまいます。
以上、私が勝手に解析したものでその動作が正しいか分かりません。もし、ファームを自作して故障等の不具合がおきても責任は持てません。あくまでも自己責任で使ってください。