PSoCでICEを使ってみる
by K.I
日付 2008/09〜
Index
- PSoCを使ったボードのデバッグが必要になったので、Cypressのサイトから、PSoCのICE-Cube(CY3215-DK)というものを買ってみた。
→実際はACアダプタも付いていたけど
- ケーブルの先に変なコネクタが付いていて、あとDIPパッケージのようなものに細いピンが立っているが。。
- これを接続するための部品が無い。何か間違って買っちゃったんだろうか?
→これじゃどうしようもないよね
- 肝心の部品が不足している気がする。それで英文でメール出してみたんだけど1音沙汰なし。。。
- どうしようもないので、CY3250 Flex PODを追加で購入→29xxx用のPODとDIP用FOOTのセット
→CY3215-DKとは、ケーブルとFOOTが重複している
- この先に接続するデバイスの代わりになる部品をFeet(Foot)というらしい。
- これはデバイスのパッケージごとに違う。これは28PINのDIP用ということになる。
- 28PINのDIPパッケージ用だが、デバッグしたいボードは28PINのSOICだったので、
- 結局、基板上からフラットケーブルで、28PINのDIPに接続するアダプター2を作成した。
- これは多分、28PINのSOIC用FOOTを購入して、基板に半田付けするっていうのが正式なやり方なんだろうけど、さらにSOICのFOOTを購入する気にはならなかったので。。
→フラットケーブルは基板上のSOICの端子に半田付け
- はっきり言ってこのPODとFOOTの組合せは使い辛い3。輪ゴムで止めないと取れちゃうし。。
- 実際のところ、今回はほとんど動いた後に使った4ので、書き込み器みたいな使い方だった。
- あまりデバッガのありがたみを感じられなかったけど、初めからやれば違っただろうな〜。
- ICE-Cubeは、初めに名前ありきで、デザインされているみたいだ。
- 日本のメーカーなら、絶対こんなデザインにはしないだろうな〜。
→デバッグしてるところ。やっぱり遊んでるように見える?
- 青色LEDも、ムダに光ってるし。。でも、こういうところが好きだけど。。。
- 最初は、ICEの接続に手間取ったので役に立たなかったが、別の用途用に全面的に書き直すことになって、使ったらやっぱり便利5だった。(090414追記)
- でも、あらためて調べてみると、やっぱりCY3215-DKにはPODは含まれているのが本当だったんじゃないかなと思う。。あぁ〜なんか損した気がする。。。
- あと、この文書の内容は、ほとんどPSoC Designer 4.xで確認したもの。ごく一部のみ、Designer 5で再確認している。
1英語で意味が通じなかったのかもしれないけど。
2というか基板に直付けしただけだけど。
3これ考えたの誰なんだ。まったくもう。。
4使えるようにするまでに時間が掛かり過ぎた。。
5最初はデバッガなしで、よくやったもんだなぁ。。
[top]
- あらかじめ、PSoC Designerをインストールしておく。
- PSoC Designerを起動後、ICECUBEに12VのACアダプタを接続、PCとUSBケーブルで接続する。
- PSoC Designer 4.xでやる場合は、
- プロジェクトメニュー→Settings...→Debbugerタブで、
- ICE connected to: でUSBを選択
- 或は、Toolsメニュー→Options...→Debuggerタブを開いて、
- ICE connected to: でUSBを選択。
- あと、Use default ICE connection for all projectsにチェックを付けておく。
- これは、両方とも同じUSB設定にする必要6があるようだ。
- で、これについては、PSoC Designer 5で、再度やってみると、
- プロジェクトメニュー→Settings...→Debbugerの、Select ICE Deviceで、ICEを選択していることを確認するだけでした。
- デバッグするボードの消費電力が少ない場合は、Ice-Cubeから電源供給することも出来る(PSoC Designer 4.xの場合)
- OK for ICE to power pod →ICEからPowerPod経由で、デバイスに電源を供給
- Pod uses external power only →デバイスには外部から電源を供給する
- PSoC Designer 5の場合は、
- プロジェクトメニュー→Settings...→Debbugerの、Select ICE Deviceで、ICE may power podを選択、電圧を選択。
- PSoC Designerのステータスバー上に、Halted、 Connectedと表示される。
- CPUレジスタの値やフラグの状態は、ステータスバーに常時表示される。
- Debugメニュー→Download to Emulatorを選ぶと、エミュレータ(プログラム本体も含む)がICEにDownloadされ、Verifyされる。
- DownloadとVerifyには数十秒の時間が掛かる。
- Debug→Execute Programでプログラムが実行される。Debug→Goも同じ7
- Executeボタンを押しても同じ。Connectしてなければ、自動的にConnect,Loarding後に実行される。
- 起動するとステータスバー上に、Running、 Connectedと表示される。
- 一度、ICEに書込んでしまえば、デバッガを外しても動作する。
- Debugメニュー→Halted
- 現時点の状態で停止、次に実行されるコマンドに→が表示される。
- Debugメニュー→Reset
- リセット状態で停止、つまり0番地の実行コマンドに→が表示される。
6別々に指定する意味があるとは思えないけど。。何故同じ設定が2箇所にあるんだろう。。。
7というか使い分けが分からない。。でも、最初はExecuteじゃないと実行出来ないので、Goは継続実行か?
[top]
- ソースエディタのブレークポイントを設定する行の左側の灰色のバー上でクリックする。
- 赤色の●が表示され、ブレークポイントが設定される。
- ブレークポイントを設定したら、プログラムを実行する。
- 次に実行さえっるコマンドに、→が表示される。
- ブレークポイントで止まったら、1行づつ実行して動作を確認。
- または変数の値が想定通りであることをチェックする。
- 或は、Debug→Haltで停止、
- 最初から実行する場合は、Debug→Resetする。
- デバッグで、良く使うショートカット
- F4→プログラム実行
- F5→プログラム実行(継続実行?)
- F6→プログラム停止
- F10→1行だけ実行(関数内には入らない)
- F11→関数に入って1行だけ実行
- ここら辺は、MicrosoftのVisualStudioなんかと操作を似せているようだ。
- Designer5で、デバッガを使ってみたら、いろいろ違っていて最初全く使えなかった。
- まず、Watch Variablesウィンドウを出しても、変数が全く表示されない。
- Variableウィンドウ上で右クリックして、define arbitrary watchを選んで、変数名を入れてもアドレスが設定されない。
- それにショートカットF10で1行実効が出来ない
- 何といっても、Designer5は遅すぎて、何するにも待たされる。
- 変数が全く表示されないので、どうしようもなくて、かなり悩んだ
- 1行実行のショートカットは、何故かF10→F8に変更されていた。→これはすぐわかったが、
- Variablesウィンドウの方は、Execute Programさせた状態じゃないとうまく設定出来ないようだ。
- まずブレークポイントで停止させてから、見たい変数を右クリックして、Add Watchを選ぶという感じ。
- Designer4.xの時は、その時点で設定された変数が、自動的にWindowに表示されるので、何もせずにとりあえず変数の値が見えたし、使い方が分からないということはなかった。
- 1つ1つ変数を追加するのは、けっこう面倒だ。→Designer4.xと比べると、あんまり使いやすくない。。
- どうせ、その時点で見えない変数は "The name 'xxx' does not exist in the current context"と表示されて、灰色のDisable状態になるんだから、Execute前でも設定出来ても良いような気がする。
- 遅いのはどうしようもないが、遅いPCでDesigner4.xより、速いPCのDesigner5の方が、かなり遅く感じる。
- 遅いのに設定が面倒なので、かなりイライラするなぁ。。
- Local変数とGlobal変数の区別もないみたいだし、なんか違和感があるなぁ。
- 但し、SLEEP時に割り込みしても、Designer4.xのようにエラーになったりしないようだ。→これは改良されたのかな?
- MPU上のレジスタ参照は、View→Debug Windows→CPU Registerで、ウィンドウが出るので、
- RAM,Bank0,Bank1,Flash,Configのタブを切替えて表示させることが出来る。
- でも、これはちょっと使い辛い。
- A,X,SP,PCとかFは、ステータスバー上にあるから良い8として、
- 例えば、I/Oを設定するPRT0DMxなどは、Bank0,Bank1に分散しているので確認が面倒だ。
- これは、必要なレジスタだけ表示できるようにしておいて欲しかったなぁ。
- 変数参照については、View→Debug Windows→Watch Variable、Local Watch Variableで表示される。
- ちなみにDesigner5の時は、Debug→Windows→Memoryで、IO Registor Bank0、或いはを選ぶ。
8しかし、C言語を使ってる時は使用しない。マシン語のデバッグはあまりしないし。。
[top]
- DebugメニューからConnectを選ぶと、以下のDialogが表示される。
Could not connect to ICE.
- PSoC Designerのステータスバー上に、LPTx Not connectedと表示されている。
- プロジェクトメニュー→Settings...→Debbugerタブ、
- Toolsメニュー→Options...→Debuggerタブを、
- 両方とも、ICE connected to: でUSBが選択されていることを確認して、改めてConnecしてみる。
- ステータスバー上に、USB/xxxxx Not connectedと表示されている。
- ICEの電源、或はUSBケーブルを一度抜いて挿しなおしてから、再度Connectしてみる。
- それでもダメな場合は、PSoC Designerを再起動するしかないようだ。
- もし、PSoC MiniProgを同時に使っている場合は、とりあえずMiniProgは外してみる。
- あとPSoC Programmerが起動しているとダメな場合があるので、PSoC Programmerは終了する。
- プロジェクトメニュー→Settings...→Debbugerタブで、
- ICE connected to: でLPT1〜3しか選択できない
- またToolsメニュー→Options...→Debuggerタブを開いても、
- ICE connected to: でも同様に、LPT1〜3しか選択できない。
- 念のため、USBケーブル、USBハブの電源、ICE-CUBEの接続、ICEキューブの電源等、USB関連の配線を再チェックしてみる。
- Connectは出来るが、以下のDialogが出て、ファームをダウンロード出来ない。
Error: could not open hex file
hexファイルが開けないので、コンパイル時にエラーが出ていないかどうか、再確認する。
[top]
- ResetしてからGoすると実行出来るので、何らかの暴走状態にあるのかもしれない。
- だが、デバッガを外して実行すると問題ないのでデバッガと何らかの関連があるかも。
- 自分の場合、実行するとすぐにInvalid Memory Referenceになってしまい、デバッグ出来なかった9。
- AN2021によると、理由はいろいろ考えられるが、Sleepを使っているとマズイらしい。
- とりあえず、デバッグ時はSleepしないようにしてデバッグしたが、
- Halt、Resetすると、Ice Disconnectedで停止してしまう。
- 自分の場合は、上記と同じようにSleepを使っていたからだった。
- デバッグ時は、Sleepしないようにしたら、このDialogは出なくなった。
9具体的にはスリープ状態で割込みを掛けたりすると、デバッガを抜けてしまう。
10自分のプログラムの、スリープ状態でキー入力を待つという仕様がマズイのかもしれないが。。
[top]
- PSoCのICEの仕組みを想像してみる。間違ってるかもしれないけど。
- ICEって実際のところ何をやっているんだろう。
- AN2323によると、
- HCLK,CCLK,OCDO,OCDEという特殊なピンを持つPSoCのみがICEに直接対応しているらしい。
- それ以外のPSoCについては、対応したPSoCでエミュレート11しているようだ。
- たぶんデバッガのケーブルの先に付いているPODのChipが、対応PSoCなんだろうと思う。
- どうせなら、少しぐらいデバッグ用のコードをメモリ上に書き込んでも構わないので、どんなPSoCでもI2CとかJTAGとかでデバッグ出来るような仕組みにして欲しかったな〜。
- でも、単なるエミュレートじゃなくて、デバッグ用のPSoCに丸ごと置き換えちゃう方法なので、デバッグ上の制限はほとんど無い12のが良い所なのかなぁ。
RJ45 | PSoC | CY8C24094 |
1 | HCLK | 60 |
2 | GND | |
3 | XRES | 62 |
4 | GND | |
5 | CCLK | 61 |
6 | OCDO | 13 |
7 | OCDE | 12 |
8 | VCC | |
- HCLK,CCLK,OCDO,OCDEは、それぞれ1kΩでプルダウンして、56Ωの抵抗を介してPSoCに接続する。
- XRESは、GNDとの間に100pFと1kΩを入れて、PSoCのXRESに接続する。
- つまりICE対応PSoCに、この8pinのRJ45のコネクタを付けておけば、簡単にデバッグ出来るらしい。
- ケーブルを、CAT5e Cableと呼んでいるので、多分Ethernet用のカテゴリ5Eケーブルも使えるんだと思う13。
- しかしICEに直接対応しているPSoCの種類が少ないのが残念なところ。
- ほとんどの場合は、ICEのケーブルに乗ってる対応デバイスでのエミュレートになってしまうようだ。
- でも、これをFootを購入してデバッグというのは大変そうだ。
- CY3214-PSoCEvalUSBには、CY8C24794のICE対応版が載っているので、これでデバッグするのが良いと思う。
- CY3214の詳細については、 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の内容も詳しく説明されています。
[top]
[電子工作関連に戻る]