2013年01月02日

MagSafeの秘密(1)

初めてApple社のパソコンMacBook Airの11インチモデルを買いました。MacBookを買う上での不安要素は周辺機器が純正以外には豊富に供給されていない事、当実験室で使用する使用するソフトウエアはWindows用しか無いものが多い事、またソフトを自作するにも、Windowsは無償で使える強力なツール(お気に入りはC#)が有りますが、OSXはイマイチです。しかし、今回のノートパソコンの用途は移動時のWeb閲覧、メール、ワープロ等なので、まあ良かろうと…。使いやすさと性能は十分満足しています。買ってよかったと思っています。
でも、さっそく周辺機器の供給の貧弱さに遭遇しました。当実験室長は自宅やオフィス等決まった行き先にはパソコンの充電器を置いています。Windowsの電源は電圧と容量が合えばどのメーカーでも使えます。もちろん、コネクタは付け替えが必要な場合も有ります。秋葉原やヤフオクで安い中古をいくらでも買えます。
2012年Midに買ったMacBook AirにはMagSafe2という特殊な電源コネクタが使用されています。最初は特殊なのは形状だけと思っていました。中央の電極は制御端子らしく、充電状態を表示するために、赤と緑のLEDを表示させるために0Vと3.3Vの2値で、無視しても充電できると思っていました。形状は特殊なので、自作は難しいですが、以前の機種と互換性を持たせるために純正のMagSafe to MagSafe2コンバーターが980円で販売されているので、これを使用すればOKです。結構たいそうな箱に入っています。単にMagSafeとMagSafe2のサイズの変換で、中身に電気的な仕掛けは無いようです。MasSafeはマグネットの面積が少なく、外れやすかったと書いてあるサイトも有ります。
MagSafe2.JPG

こんな感じでMagSafe2に配線をつなぎました。これは実験用に仮の接続です。
両外側の電極がマイナス、外から2番めがプラス、中央が制御端子です。試しに安定化電源から15Vを供給してみました。ところが本体は外部から供給された電源で作動していますが、充電はいつまで待っても始まりません。
MagSafe2 2.JPG

ググってみると、MagSafeコネクタにはインテリジェントな回路が入っており、本体に電源が自分の情報を送ると本体のチャージャーが作動を始める仕組みらしいです。したがって、自動車の電源や外部電源からMacBookを充電している人は中古の純正電源を買ってきて、コードを切断し、外部電源に接続しているらしいです。つまり、自尊心の高いMacBookはどこの誰だか知らない人(電源)からの援助(充電)は受け入れないようです。

これは当実験室の出番です。さっそく、どんな情報を電源と本体が交わしているか探ってみました。
オリジナル電源からの信号と充電の様子を見るためにかなり苦しい仮のソケットを作ってみました。
MagSafe2 3.JPG

最終的にはこんな大袈裟な仕掛けで、電圧・電流と信号の解析を始めました。右のノートPCはロジックアナライザーです。ロジアナが有るのに、なんでオシロが必要かって?解析の途中で中央の制御端子は一本の線で双方向の通信をしていることがわかりました。ローレベルの電圧を見ることでMagSageと本体のどちらがスイッチングしているかがわかります。だんだん泥沼に引きずり込まれます。
MagSafe2 4.JPG
posted by ひら at 17:30| Comment(1) | MagSafeの秘密

2013年01月06日

MagSafeの秘密(2)

MacBookとMagSafeのインターフェースは下の配線図のようになっていると考えられます。制御端子はMacBookのチャージコントローラー側はプルアップされています。MagSafe側は切り離した状態でLレベルになるようにプルダウンされています。抵抗値はプルダウン>>プルアップで、双方が接続された状態で信号が出ていない時はHレベルになっています。
(クリックで拡大できます)
MagSafe interface circuit.jpg

MacBookは約5秒毎に600uSのLレベルの信号を送出します。それを受信したMagSafeは40uS後に145uSのLレベルの応答信号を出します。すると、MacBookは6バイト又は9バイトのデータを返します。
Timing PS ID.jpgTiming Charge status.jpg








タイムチャートで示すように、1ビット毎にスタートビットとストップビットが入ります。実は、6バイトデータの最後の2バイトはMagSafe側が送出しています。同様に9バイトデータの最初の1バイトを除く8バイトはMagSafeが送出します。ややこしいですが、これらのバイトではMacBookはスタートビットだけを送出し、MagSafeはスタートビットに同期してビットデータを送出します。試しに145uSの応答だけを送出してやると、それらのバイトではMacBookは0xFFを送出しているように見えます。MacBookが送出したそれぞれのスタートビットの後にMagSafeはHレベルを保つか、Lレベル側に引っ張ってビットデータを送出するわけです。オシロで見るとLレベルの電圧が少し違いどちらがデータを送出したか判断できます。データの送出順序はLSB > MSBです。なぜ判るかは後ほど説明します。
PC230376.JPG

6バイトデータ
0xCCで始まり、充電のステータスをMagSafeに知らせ、オレンジまたは緑のLEDを点灯させます。最後の2バイトはMagSafeから送出されます。充電アダプタが接続されている間は常に約5秒毎にこの情報が交信されます。
0xCC:6バイトデータのヘッダー
0x5A:不明(常に同じ)
0xFD(オレンジ)or 0xFE(緑):充電ステータス
0x01(緑)or 0xFE(オレンジ):充電ステータス
0xAA:不明(常に同じ)
0x3C(緑)or 0xC3(オレンジ):確認フィードバック?

9バイトデータ
0x33で始まり、MacBookはMagSafeに対し充電アダプタの情報(容量、シリアル等)を質問します。最初の1バイトを除き残りの8バイトはMagSafeから送出されます。この情報は一度MacBookが正しく受信すると後は聞いてきません。通常は充電アダプタを接続した時の最初の一回だけです。したがって、確認が難しいです。この質問に答えないか、不正な情報を送るとMacBookは約5秒毎に聞いてきます。つまり、最初の正しい9バイトデータを受信するまでは600uSのLレベル信号は6バイトデータと9バイトデータの2種類の情報に対する応答を求めて、それぞれ別に送出します。約5秒間に2回送出されるわけですが、面白いことに周期が僅かにズレていて、間隔が少しずつ変化するように見えます。
0x33:9バイトデータのヘッダー
0x85:ファミリー
0x90:シリアル番号(3)
0xA7:シリアル番号(2)
0x06:シリアル番号(1)
0xD8:不明
0x12:ID(2)+不明
0x7A:ID(1)
0x43:不明

製品のシリアル番号が含まれるので、この情報は私のMacBook Airの45W充電アダプタの固有の情報です。
OSのシステム情報→ハードウエア→充電器の情報と比較すれば説明は不要と思います。また、この情報との比較でデータの送出順序(LSB→MSB)とH/Lレベルと1/0の関係を確認できました。
スクリーンショット 2013-01-06 11.17.31.jpg

私のMacBook Airには45Wの充電アダプタが付属していましたが、を変更することによりMacBookに対し容量の大きい充電アダプタが接続されていると勘違いさせる事が可能か試してみました。ググってみるとID=0x07a1は45Wの充電アダプタで、他に0x0aa1=85W、0x0100=60Wとか有るようです。しかし、8バイトのどれか一つを変更しても、MacBookは不正データとして無視します。シリアル番号を一つ変えだだけでも不正データになってしまいます。つまり、8バイトの中に誤り検出情報が含まれているようです。9バイト目の0x43が怪しいので少しいじって見ましたが、一般的に公開されているチェックサムでは無いようです。どなたか、判る方がいましたら教えて下さい。

でも、ここまで分かれば45WのMagSafeの充電アダプタを作るのは簡単です。
posted by ひら at 19:20| Comment(0) | MagSafeの秘密

2013年01月14日

MagSafeの秘密(3)

これまでの成果を元にMacBookを誤魔化し、Windowsノートパソコン用の充電アダプタで充電する Windows to MagSafe2 AC Charger Interface(以下W2M2を作成してみました。マイコンにはPIC12F683の8ピンSOP版を使用して実用的に小さく作りました。
MagSafeからMacBookへ充電アダプタのIDを送らないと充電が始まらない事を利用して、AC電源で使用する場合にリチュームイオンバッテリーを満充電しないよう、充電モードと非充電モードを使い分けられるようにしました。リチュームイオンバッテリーは満充電状態で使用すると寿命を縮めるそうです。一部のノートは80%程度で充電をストップするモードが有ります。MacBookのバッテリーは古くなっても交換できる仕様にはなっていません。海外から購入できる怪しいものはありますので、買って自分で分解して交換する手は有ります。当実験室のW2M2をMacBookに接続すると、緑LEDが点灯し、しばらくすると赤LEDに変わりますが、充電は始まりません。MacBookのバッテリーインジケータはコンセントの形になっており、クリックすると「バッテリーは充電出来ません」と表示されます。充電したい場合はタクトスイッチを一瞬押すと点灯しているLEDが点滅に変わります。W2M2がMacBookに充電アダプタIDを送ると点滅が点灯に変わります。しばらくするとMacBookのバッテリーインジケータが充電マーク(稲妻マーク)に変わります。最終的なテスト中の写真です。基板の半分はPICマイコンにプログラムを書き込むPICkit2を接続するための6ピンのヘッダーピンをハンダ付けする為に有り、プログラムを書き終えたら切り取ります。使用した0.8mm厚のガラスエポキシ基板はハサミで容易に切断できます。
Under test.JPG

純正のMagSafe to MagSafe2コンバーターをコネクタとして利用しましたので、リードをハンダ付け後にエポキシ接着剤で固めました。実用性が有るものになっていると思います。リードのハンダ付けはあまり太いリード線をハンダ付はできません。ハンダが乗る部分の面積が小さく、あまり太いリードをハンダ付けしても直ぐに外れてしまいます。また、ある程度ハンダ付けのスキルが高くないと無いと難しいかも知れません。
MagSafe soldering.jpgMagSafe finished.jpg









完成です。使用している電源は20世紀に製造された富士通製の16V 2.8Aです。基板は透明の熱収縮チューブで保護しました。収縮させてからタクトスイッチの部分だけ切り抜きました。写真はクリックで拡大できます。
Finished Good.jpgFujitsu PS.jpg









興味がある方は配線図、プリントパターン、Cのソースコードを下からダウンロードして追試してください。なお、W2M2が送出するIDはPICのEEPROMに書き込みます。Cのソースコードのコメントとして書いていますので、マニュアルで書き込んでください。コンパイラーはPICCのプロ版をKeyGenで使用していますが、タイミングはタイマで取っていますので、多分Lite版でコンパイルしても大丈夫と思います。

MagSafe2.pdf
MacMagSafe_V2.pdf
MagSafe2 No charge option.C

posted by ひら at 21:07| Comment(3) | MagSafeの秘密

2015年11月03日

MagSafeの秘密(4)

MagSafeの通信プロトコルを解析していた時は知りませんでしたが、後でよく調べてみると、これはまさしくマキシムの1-Wireプロトコルでした。専用ICが有るようですが、低速なのでPICの様な汎用コントローラでも十分に構成できます。
また、W2M2ではチェックディジットを無視していますが、マキシムのサイトにはチェックディジット(CRC)の解説がありました。

Windows PCでもHPやDELLは1-Wireで同じような電源アダプタのチェックを行っているようです。実は会社のパソコンがDellからHPに変わったのですが、自宅用に置いていたDellの電源アダプタのコネクタはHPのと一見同じで、電圧も同じ、ラッキー!と思って差し込んだのですが、全く充電できませんでした。よく見るとコネクタの外筒の外側がGND、裏側が+19.5Vで、中心のピンは信号線のようです。ググって見るとこんなサイトが有りました。

http://hackaday.com/2014/03/03/hacking-dell-laptop-charger-identification/
https://hclxing.wordpress.com/2014/02/06/hacking-the-dell-laptop-power-adapter/

W2M2のプログラムを変更すれば基板はそのままで使えそうです。Dellの電源アダプタのケーブルを途中で切って、DellのアダプタとHPのパソコンの間に入れればOKです。でも、HPの電源アダプタは中古品が秋葉原やヤフオクで安い値段でいくらでも売ってます。結局、既に他のプロジェクトに取り掛かっており、時間がもったいないので、安易に中古品を買ってきてしまいました。
posted by ひら at 19:16| Comment(0) | MagSafeの秘密