概要PSoCを使ったボードのデバッグが必要になったので、Cypressのサイトから、PSoCのICE-Cube(CY3215-DK)というものを買ってみた。doggieさんのページを見ると、自分が買ったのと内容が全然違う。→実際はACアダプタも付いていたけどケーブルの先に変なコネクタが付いていて、あとDIPパッケージのようなものに細いピンが立っているが。これを接続するための部品が無い。何か間違って買っちゃったんだろうか?→これじゃどうしようもないよね肝心の部品が不足している気がする。それで英文でメール出してみたんだけど1音沙汰なし。PODを追加で購入→29xxx用のPODとDIP用FOOTのセット→CY3215-DKとは、ケーブルとFOOTが重複しているこの先に接続するデバイスの代わりになる部品をFeet(Foot)というらしい。これはデバイスのパッケージごとに違う。これは28PINのDIP用ということになる。結局、基板上からフラットケーブルで、28PINのDIPに接続するアダプター2を作成した。これは多分、28PINのSOIC用FOOTを購入して、基板に半田付けするっていうのが正式なやり方なんだろうけど、さらにSOICのFOOTを購入する気にはならなかったので。→フラットケーブルは基板上のSOICの端子に半田付けはっきり言ってこのPODとFOOTの組合せは使い辛い3。輪ゴムで止めないと取れちゃうし。PastelMagicさんで買えば良かったのかな?それとも今はこれが普通なのか。実際のところ、今回はほとんど動いた後に使った4ので、書き込み器みたいな使い方だった。デバッガのありがたみを感じられなかったけど、初めからやれば違っただろうな〜。ICE-Cubeは、初めに名前ありきで、デザインされているみたいだ。日本のメーカーなら、絶対こんなデザインにはしないだろうな〜。→デバッグしてるところ。遊んでるように見える?青色LEDも、ムダに光ってるし。いうところが好きだけど。最初は、ICEの接続に手間取ったので役に立たなかったが、別の用途用に全面的に書き直すことになって、使ったらやっぱり便利5だった。(090414追記)でも、あらためて調べてみると、やっぱりCY3215-DKにはPODは含まれているのが本当だったんじゃないかなと思う。あぁ〜なんか損した気がする。4.xで確認したもの。1英語で意味が通じなかったのかもしれないけど。2というか基板に直付けしただけだけど。3これ考えたの誰なんだ。4使えるようにするまでに時間が掛かり過ぎた。5最初はデバッガなしで、よくやったもんだなぁ。Designerをインストールしておく。Designerを起動後、ICECUBEに12VのACアダプタを接続、PCとUSBケーブルで接続する。projectsにチェックを付けておく。これは、両方とも同じUSB設定にする必要6があるようだ。Deviceで、ICEを選択していることを確認するだけでした。voltage:5V、或は3.3Vを選択可能。podを選択、電圧を選択。ICEの起動Debugメニュー→Connectを選ぶ。パネル上のConnectボタンを押す。Connectedと表示される。CPUレジスタの値やフラグの状態は、ステータスバーに常時表示される。Emulatorを選ぶと、エミュレータ(プログラム本体も含む)がICEにDownloadされ、Verifyされる。DownloadとVerifyには数十秒の時間が掛かる。Programでプログラムが実行される。Debug→Goも同じ7Executeボタンを押しても同じ。Connectしてなければ、自動的にConnect,Loarding後に実行される。Connectedと表示される。一度、ICEに書込んでしまえば、デバッガを外しても動作する。ICEの停止Debugメニュー→Halted現時点の状態で停止、次に実行されるコマンドに→が表示される。Debugメニュー→Resetリセット状態で停止、つまり0番地の実行コマンドに→が表示される。6別々に指定する意味があるとは思えないけど。同じ設定が2箇所にあるんだろう。7というか使い分けが分からない。最初はExecuteじゃないと実行出来ないので、Goは継続実行か?[top]ICEによるデバッグ手順ブレークポイント設定ソースエディタのブレークポイントを設定する行の左側の灰色のバー上でクリックする。赤色の●が表示され、ブレークポイントが設定される。デバッグ方法ブレークポイントを設定したら、プログラムを実行する。次に実行さえっるコマンドに、→が表示される。ブレークポイントで止まったら、1行づつ実行して動作を確認。変数の値が想定通りであることをチェックする。最初から実行する場合は、Debug→Resetする。デバッグで、良く使うショートカットF4→プログラム実行F5→プログラム実行(継続実行?)F6→プログラム停止F10→1行だけ実行(関数内には入らない)F11→関数に入って1行だけ実行ここら辺は、MicrosoftのVisualStudioなんかと操作を似せているようだ。Desiner5でICEを使うDesigner5で、デバッガを使ってみたら、いろいろ違っていて最初全く使えなかった。Variablesウィンドウを出しても、変数が全く表示されない。watchを選んで、変数名を入れてもアドレスが設定されない。それにショートカットF10で1行実効が出来ない何といっても、Designer5は遅すぎて、何するにも待たされる。変数が全く表示されないので、どうしようもなくて、かなり悩んだ1行実行のショートカットは、何故かF10→F8に変更されていた。Programさせた状態じゃないとうまく設定出来ないようだ。Watchを選ぶという感じ。Designer4.xの時は、その時点で設定された変数が、自動的にWindowに表示されるので、何もせずにとりあえず変数の値が見えたし、使い方が分からないということはなかった。1つ1つ変数を追加するのは、けっこう面倒だ。→Designer4.xと比べると、あんまり使いやすくない。context"と表示されて、灰色のDisable状態になるんだから、Execute前でも設定出来ても良いような気がする。遅いのはどうしようもないが、遅いPCでDesigner4.xより、速いPCのDesigner5の方が、かなり遅く感じる。遅いのに設定が面倒なので、かなりイライラするなぁ。Local変数とGlobal変数の区別もないみたいだし、なんか違和感があるなぁ。SLEEP時に割り込みしても、Designer4.xのようにエラーになったりしないようだ。Registerで、ウィンドウが出るので、RAM,Bank0,Bank1,Flash,Configのタブを切替えて表示させることが出来る。これはちょっと使い辛い。I/Oを設定するPRT0DMxなどは、Bank0,Bank1に分散しているので確認が面倒だ。これは、必要なレジスタだけ表示できるようにしておいて欲しかったなぁ。Variableで表示される。Bank0、或いはを選ぶ。8しかし、C言語を使ってる時は使用しない。マシン語のデバッグはあまりしないし。[top]起動時の問題ConnectできないDebugメニューからConnectを選ぶと、以下のDialogが表示される。connectedと表示されている。USBが選択されていることを確認して、改めてConnecしてみる。connectedと表示されている。ICEの電源、或はUSBケーブルを一度抜いて挿しなおしてから、再度Connectしてみる。Designerを再起動するしかないようだ。MiniProgを同時に使っている場合は、とりあえずMiniProgは外してみる。Programmerは終了する。同様に、LPT1〜3しか選択できない。念のため、USBケーブル、USBハブの電源、ICE-CUBEの接続、ICEキューブの電源等、USB関連の配線を再チェックしてみる。hexファイルが開けないConnectは出来るが、以下のDialogが出て、ファームをダウンロード出来ない。filehexファイルが開けないので、コンパイル時にエラーが出ていないかどうか、再確認する。Reference以下のエラーで、Halt状態になってしまう。Goで再開しても、すぐに同じエラーで止まる。CoreResetしてからGoすると実行出来るので、何らかの暴走状態にあるのかもしれない。デバッガを外して実行すると問題ないのでデバッガと何らかの関連があるかも。Referenceになってしまい、デバッグ出来なかった9。AN2021によると、理由はいろいろ考えられるが、Sleepを使っているとマズイらしい。デバッグ時はSleepしないようにしてデバッグしたが、いろいろ制限があって10使い難いな〜。Disconnectedで停止してしまう。自分の場合は、上記と同じようにSleepを使っていたからだった。デバッグ時は、Sleepしないようにしたら、このDialogは出なくなった。9具体的にはスリープ状態で割込みを掛けたりすると、デバッガを抜けてしまう。10自分のプログラムの、スリープ状態でキー入力を待つという仕様がマズイのかもしれないが。[top]ICEとはICEの仕組みは?PSoCのICEの仕組みを想像してみる。間違ってるかもしれないけど。ICEって実際のところ何をやっているんだろう。AN2323によると、HCLK,CCLK,OCDO,OCDEという特殊なピンを持つPSoCのみがICEに直接対応しているらしい。それ以外のPSoCについては、対応したPSoCでエミュレート11しているようだ。デバッガのケーブルの先に付いているPODのChipが、対応PSoCなんだろうと思う。デバッグ用のコードをメモリ上に書き込んでも構わないので、どんなPSoCでもI2CとかJTAGとかでデバッグ出来るような仕組みにして欲しかったな〜。単なるエミュレートじゃなくて、デバッグ用のPSoCに丸ごと置き換えちゃう方法なので、デバッグ上の制限はほとんど無い12のが良い所なのかなぁ。具体的にはCY3214-PSoCEvalUSBボードの回路図を見てみると、ICEのコネクタRJ45から、以下のように接続すれば良いらしい。VCCHCLK,CCLK,OCDO,OCDEは、それぞれ1kΩでプルダウンして、56Ωの抵抗を介してPSoCに接続する。XRESは、GNDとの間に100pFと1kΩを入れて、PSoCのXRESに接続する。ICE対応PSoCに、この8pinのRJ45のコネクタを付けておけば、簡単にデバッグ出来るらしい。Cableと呼んでいるので、多分Ethernet用のカテゴリ5Eケーブルも使えるんだと思う13。CAT5eケーブルによるデバッグしかしICEに直接対応しているPSoCの種類が少ないのが残念なところ。PS-USP01で使われている、CY8C24794も対応していない。ほとんどの場合は、ICEのケーブルに乗ってる対応デバイスでのエミュレートになってしまうようだ。これをFootを購入してデバッグというのは大変そうだ。CY3214-PSoCEvalUSBには、CY8C24794のICE対応版が載っているので、これでデバッグするのが良いと思う。doggieさんのページを参照のこと、と楽をさせて頂く14。CY3214に載っているのはCY8C24094という品番の奴だが、DigiKeyにも無いし、通常はあまり出回っていない石なんだろう。CAT5eケーブルで繋ぐだけで、書きこみとデバッグが出来る。PSoCのICEはこういう使い方が本来のものなんだろうなぁ。→これは接続簡単!CY8C24794の場合は、こういうボードでデバッグするのが現実的だと思う。その代わり、実際の回路もこれと同じようにしなきゃいけない制限も出てくるけど、この便利さには代えられないなぁ。まとめというか感想ということで、ICEの使い方としては、CY8C29466については、DIPパッケージの場合はソケットにしておいて、CY8C29xxxエミュレーション用のPODのFOOTに差し替えてデバッグ。表面実装パッケージは、そのままではデバッグ出来ないので、DIPのソケットを何とか取り付けるか、POD(じゃなくFOOT)を直接半田付けする。従って、この場合はデバッグ用の基板が1枚余計に必要になる。CY8C27466については、CY8C27xxx用のPODもあるけど、基本的にCY8C29xxxと同様の構成なので、CY8C27xxxで使用可能なモジュールだけ使用するようにして、CY8C29xxxのPODでデバッグする。それ以外のPSoCについても、CY8C29xxxと同様だが、対応するエミュレーション用のPODが必要になる。それに、FOOT-PODの取付け部は結構ガサバルので、すんなりPODを取り付けられない場合もあるかもしれない。いずれにせよ、ピン数が多い表面実装品は、デバッガを使えるようにするのは、結構面倒だ。対応PSoCについては、HCLK,CCLK,OCDO,OCDE,XRES端子に抵抗を通してRJ45レセプタクルを付けておけば、簡単にデバッグ可能。全部のPSoCがこうだと良いんだけど。実際問題として、対応PSoCはほとんど出回っていないので入手が困難。結局はCypressの評価ボードで、自分の使いたい品番に近いものでICE対応のものを探すしかないのかもしれない。いうように、いろいろ問題はあるけれど、一度デバッグ出来るようになれば、非常に便利であるのは間違いない。デバッグし易い構成を自分で決めて、いつも出来るだけそれに近い構成で、回路を作るようにするのが良さそう。デバッガなしでも、UARTやLCD等を付けてあれば、何とかデバッグ出来るんだけど、デバッガがあれば、効率は全然違う。複雑なプログラムを組むんであれば、やっぱりあった方が良いと思う。使えるような構成にするまでが、結構大変だなぁ。あっ、あとSleep動作時等は要注意ってところか。AN2021を参照でも、Designer5では、Sleepでも特に問題なかった。Designer4.xだけの問題なのかな?11というよりは、ICE対応の上位互換PSoCに置き換えてデバッグするようだ。12スリープとかはちょっと注意だけど。13ケーブルが流用できるってだけで、Ethernetでデバッグ出来るわけじゃないです、いちおう念のため。14付属のExampleの内容も詳しく説明されています。