2017/12/12

[PSoC Advent Calendar 2017 12日目] PSoC 5LPでSWVを使う

PSoC 3/5LPのデバッグ機能の中でSWV(Serial Wire Viewer)の機能は使ったことがなかったので試してみました。

開発しているIMU/GPSロガーHPA_NaviではUSB付きのPSoC 5LPを利用しているのでデバッグ情報をUSBUARTで流すこともできますが、
  • データとデバッグ情報を異なるチャンネルに流せる
ことがメリットとして挙げられます。
また、デバッグ情報送信用にUARTを使った場合と比べると、
  • (ソフトウエアUARTでない場合)UDBを消費しない
  • (10ピンコネクタを使っている場合は)遊んでいるSWV端子が使える
  • USBシリアルアダプタが不要
等のメリットがあります。
未検証ですがクロック設定によってはUARTよりも高速、かつソフトウエアUARTより低CPU負荷かもしれません。

テストは開発中のIMU/GPS基板を用いてGitHubにあるサンプルプロジェクトを動かすことで行いました。
やることは基板に合わせて細かな設定を変える程度ですが、2014/10/18から更新がないので、利用するためにはPSoC Creatorのアップデートに伴う手直しが必要です。
(今回はPSoC Creator 4.1を用いました。)


古いプロジェクトファイルを開いたときの常ですが、まずは各種モジュールのアップデートを行います。
これだけで問題なくプロジェクトの移行が行える場合も多いのですが、PSoC Creatorのprintfがnewlib-nanoを用いるようになったためか、それに伴う問題がいくつか発生しました。
王様の耳はロバの耳!PSoC3/4/5LPでprintfの出力先をUARTにしたいとき」に関連する情報がまとまっています)
ダウンロードしたデモプロジェクトの設定ではheapサイズが不足してうまくpritntf出力が行えないので、十分大きなサイズまでheapを増やします。
今回は2048byteまで増やしてうまくいきました。


また、浮動小数点まわりのライブラリはデフォルトではリンクされないので、利用する場合はビルドオプション"Use newlib-nano Float Formatting"の有効化が必要です。


データの受信は専用のプログラムで行います。
これもGitHubにソースがあり、インストーラ付きバイナリもあるのでどちらかを用います。
受信用のプログラムは設定項目も少なく、ほぼ迷いなく使えましたが、ボーレートの設定がひとつずれている(?)ようで、6,000,000bpsをPSoC 5LP側で設定した場合には5,333,333bpsに設定するとうまくデータが受信できました。


以上で、SWVを用いたprintfデバッグが可能になりました。
デバッガとの併用でファームウエア開発がより効率的に行えそうです。