Hacking The CTC POV Fan

 Hacking The Cenzic POV Fan こんな BOLG を見て、同様のノベルティーグッツがガラクタ箱に眠っていることを思い出した。

 CTC が Rackable システムの宣伝用に作ったノベルティーグッツです。Rackable と言えば2009/5 に SGI を買収し、社名ブランドを SGI にしてしまった会社ですね。まぁそんなことはさておき、Hacking The Cenzic POV Fan を読み進めるとコネクタに I2C のラインが出ているので、こいつをシリアルで書き変えろと書いてあります。フォーマットはビットパターンになっいてるらしい。

■まずは分解

 ん、Cenzic の物と部品の配置が違う!

 EEPROM は 24C02C だけど、コネクタのピン配置を調べるとこれも違うみたい。どうやら別物っぽいです。コネクタの配置は画像の手前から、Vcc, GND, 不明, SDA, SCL でした。真ん中はマスクチップにつながっており電源を供給した状態で HI 出力、役割はわかりません。

■ダンプ

 I2C であれば Arduino のライブラリでちょろちょろかなぁって楽観するも、やってみるといろいろはまり・・・まず、SCL、SDA は扇風機基板でプルアップされているので特に考慮することはない。Arduino の Wire ライブラリを使うと何故か ROM へのアクセスが安定しない。オシロでみると LOW レベルが 1V 付近に留まっている。AVR 側の入力インピーダンスが高いように見える。

 仕方がないので、普通に PIO 操作して通信用のファームを書いて吸い出すことに。で、こんなデータが出てきました。

E2 20 52 41 43 4B 41 42 4C 45 20 26 20 43 54 43
B5 20 2D 4C 45 41 44 45 52 53 20 49 4E F7 44 45
4E 53 45 2C 20 52 45 4C 49 41 42 4C 45 2C FA 45
4E 45 52 47 59 20 45 46 46 49 43 49 45 4E 54 B2
20 44 41 54 41 20 43 45 4E 54 45 52 95 20 53 4F
4C 55 54 49 4F 4E 53 0 0 0 0 0 0 0 0 0

 ビットパターンが入っているにしては短いなぁと思いつつ、ビット列を見るためのプログラムを Ruby でささっと作り表示してみる。

000 00 e2 11100010
001 01 20 00100000
002 02 52 01010010 R
003 03 41 01000001 A
004 04 43 01000011 C
005 05 4b 01001011 K
006 06 41 01000001 A
007 07 42 01000010 B
008 08 4c 01001100 L
009 09 45 01000101 E
010 0A 20 00100000
011 0B 26 00100110 &
012 0C 20 00100000
013 0D 43 01000011 C
014 0E 54 01010100 T
015 0F 43 01000011 C

 んが、Cenzic と全然違う。どうやら、CTC の扇風機はアスキーコードで文字を指定、さらに、表示パターンも定義しているようです。表示パターンは数種類あり、数秒間文字を表示(=2)、点滅(=5)、回転方向にワイプインし回転しワイプアウト(=7)、中心からワイプインし回転しワイプアウト(=10)のパターンが確認できました。

 文字列の先頭にある1バイト目の上位4ビットは文字列の長さを表現、ただし指定する数字は、文字列の長さ - 1 になっています。例えば、10文字ある場合は9を定義する。下位4ビットは表示パターンのコードを指定する。

 この組み合わせをパックにして並べることで次々と文字が現れます。終端は 0x00 っぽい。

■書き換えてみる

 試しにこんなパターンで行くと、

" HI JACK!"
" HACK"
" NYARO"
" RUBY"

 上記のルールに従ってデータを作ると、以下の30バイトになります。

82 20 48 49 20 4a 41 43 4b 21 45 20 48 41 43 4b
57 20 4e 59 41 52 4f 4a 20 52 55 42 59 00

 できた!

 奇麗じゃないけど Arduino のソースはこちら


Latest update at 2009/10/17