Invention Board
(ミニディベロップメントキット付属ボード)
を使った簡易波形観測玩具
PSoCミニディベロップメントキットにはInvention Boardと呼ばれているUSB接続のPSoC基板が付いてくる。基板上にはPSoC(CY8C27443のSOP版)と、USBコントローラが乗っていて、USB経由でオンボードのPSoCをプログラミングできるだけでなく、ターゲットボードのPSoCとケーブルで接続して書き込む、いわゆるISSP(イン・システム・シリアル・プログラミングアダプタ)としても使えるようになっている。
と、ここまでが一応公開されている情報である。

ところで、Invention Boardをインストールしたときに組み込まれるドライバの名前を調べてみたら、なんと「ezusb.sys」である。これはEZ-USBファミリ用の開発ツールをインストールしたときに組み込まれるドライバと同一名称である。ひょっとして?と思ってEZ-USB用のコントロールパネルを開いてみたら、Invention Boardもしっかり認識されてしまった。

さて、PSoC側に目を移すと、実はプログラミングで使われるクロックとデータのピンというのはCY7C26443のI2Cコントローラのクロックやデータピンにもなる。その目でプログラミング波形を見てみるとそこはかとなくI2Cの香り漂う動きと言えなくもない。ひょっとしてひょっとするとということで、調べ上げていくと、I2CモードでPSoCをアクセスするコマンドが用意されていることがわかってきた。完全な解析は終わっていないのだが、とりあえずわかったのはI2Cモードで1バイトリード/ライトするコマンドである。デバイスリクエストのフォーマットは下記のとおり。
ここで、AddressというのはI2Cバス上のデバイスアドレスである。今回作ったサンプルではPSoCのI2Cバスアドレスを0x01にしたので、リード時のwValueの下位8ビットは0x03になる。
リード時、ライト時とも2バイトのデータが返ってくる。リード時は2バイト目のデータがI2C経由で読み取ったデータになる。ライト時に返されるデータの意味や、リード時の1バイト目の意味は今のところ不明である。

Read I2C(I2Cバス経由での1バイトリード)
bmRequest Type bRequest wValue wIndex wLength
0xC0 0x02 0x00 Address(7bit) '1' 未使用? 0x0002

Write I2C(I2Cバス経由での1バイトライト)
bmRequest Type bRequest wValue wIndex wLength
0xC0 0x02 Data(8bit) Address(7bit) '0' 未使用? 0x0002


○ターゲット(PSoC)側
というところまでわかったので、とりあえずリード方向だけを使ってみることにした。PSoC側は簡単にI2Cと6ビットADC、あとPGAを二つ組み込んでA/Dしたデータを取り込むだけという、何の工夫もないサンプルである。電圧レンジの調整も無いし、時間軸方向もホストが取り込むタイミング次第ということで、実用性は全く無いに等しい。ちゃんとやるなら、タイマなどを使って定周期でサンプリングしたデータをバッファに詰めてから渡すという方法を取るべきだろう。
ホストからのコマンドでゲインを変えたり、トリガ機能をつけたりしていけば、PSoCのアプリケーションノートにあるPoor man's Oscilloscopeと同等にすることもできるのではないかと思う。あちらはRS-232Cなのでレベルコンバータが必要だが、こちらはミニキットそのままでいいのは利点か。


○ホスト側
ホスト側は勝手知ったるEZ-USBのドライバなので、そちら向けに作っていたVBサンプルを拝借して、改造して作ってみた。「READ」ボタンをクリックすると128バイト取り込んで、データを表示する。EXITで終了と、ただそれだけである。
サンプル作成はMSのサイトでフリーで転がっているVB5-CCEを使ったけれども、VB6でももちろん問題ない。ExcelなんかのVBAでも良さそうなのだけども、折れ線での波形描画をするためのPictureボックスがどこにあるのかわからなかった。セルにデータを流し込んで、それをExcelのグラフ機能でグラフ化して表示するというのはできたのだが、あまり格好良くいかなかったので、今回は割愛。


ToyScopeファイル
(ダウンロードはこちら)
PSoC DesignerとVBのプロジェクト一式
Invention Board Programmerを使って書き込んだら、USBケーブルの抜き差し(ボードの電源OFF/ON)をすることを忘れずに。
接続図

接続図を言えるようなものかどうかは置いておくとして、とにかくこんなもので遊ぶことはできた。2番ピンからAGND電圧(VCC/2)を出して4番ピンで受けている。コンデンサはDCカット用。CRとも値はたまたま机の上に転がっていたのを使ったという程度の適当なもの。