ModusToolboxでPSoC 6のLチカ


これは、PSoC Advent Calendar 2018の3日目に突っ込まれた記事です。

ModusToolbox登場

PSoC 6 MCUの開発環境として、新しくModusToolboxという統合開発環境(IDE)が発表されました。といっても、この記事を書いている2018年12月3日時点では、一般公開されたわけではありません。現在はEarly Adapter Program (EAP)参加者だけにベータ版が公開されている段階です。この記事では、EAP番のModusToolboxを使って使い勝手を紹介します。

やりたいこと

まず、何をするかといえば、やっぱりLチカでしょう。ここでは、PSoCの流儀に従って、ソフトウェアには極力仕事をさせない方法でLチカを実現します。回路図で描くとこんな感じでしょうか。

クロックをPWMで分周して、LEDを2Hzで点滅させます。

使用するハードウェアはCY8CPROTO-063-BLE

本記事で使用する機材は、PSoC 6 BLE Prototyping Kitです。

この評価ボードでは、CYBLE-416045-02 EZ-BLE™ CREATOR MODULEモジュールが使用されているため、同モジュールを使ったアプリケーションのプロトタイプを作成するのに適しています。基板上に赤と緑の二つのLEDが搭載されているので、Lチカには十分です。

他の評価ボードと同様にプログラマとしてPSoC 5LPが搭載されています。この評価ボードの場合、デフォルトのファームウェアとしてKitProg2が書き込まれています。

ModusToolboxを開く

それでは、ModusToolboxを開いてみましょう。その前にインストールをしなくてはなりませんが、インストール方法については、どなたかが書いてくれるでしょう。

ModusToolboxは、eclipseをベースとしたIDEです。そのため、作業場所としてWorkspaceを指定しなくてはなりません。ModusToolboxを開いたときに最初にあらわれるのが、Workspaceを指定するダイアログです。

ModusToolboxでは、複数のプロジェクトを作成してひとつのアプリケーションにまとめ上げるという方法でバイナリを作成します。そのため、アプリケーションごとにWorkspaceを作成した方が使いやすいようです。この記事でも、Lチカアプリケーションのために"C:\MTW\LChika"というWorkspaceを作成します。

LaunchをクリックするとIDE画面が開きます。

最初は、"Welcome"というタブが全面をおおっていますが、必要ないので閉じてしまいましょう。これで作業画面が出てきます。

ターゲットとベースアプリケーションを指定する

次にアプリケーションを作成します。画面左下にある"Quick Panel"タブにある"New Application"をクリックします。

すると、"ModusToolbox IDE Application"というダイアログが開きます。

このダイアログでは最初にターゲットとなるハードウェアを指定します。本来であれば、上にある"Dev/Eval Kit"をクリックして評価ボードを選ぶべきなのですが、今回使用するCY8CPROTO-063-BLEは、ModusToolboxに登録されていません。そのため、下の"Custom Hardware"をクリックしモジュールを探すという手順になります。なんで、差別されるんかな。

リストからモジュールCYBLE-416045-02を選んだら、"Next"ボタンをクリックします。
次は、ベースになるアプリケーションを選択します。ModusToolboxでは、ベースになるアプリケーションから目的のアプリケーションに仕上げていくという手法を考えています。そのため、このステップで目的に一番近いアプリケーションを探します。

とは言っても、この記事では使い勝手を確認するのが目的ですから、何もしないアプリケーションである"EmptyPSoC6App"を選択します。また、"Name:"フィールドにはこれから作成するアプリケーションの名前を入れます。ここでは、"LChika"という名前にしました。

"Next"をクリックすると最終確認ダイアログに変化します。ここで、"Finish"をクリックしてしばらくすると、アプリケーションが作成されます。

左上の"Project Explorer"タブを見ると、作成されたアプリケーションには、5個のプロジェクトが存在するのがわかります。

出力端子を設定する

PSoCでプロジェクト作成直後にやるのは、ハードウェアの設定です。
作成されたプロジェクトのうち、"LChika_config"には、"design.modus"という名前のファイルが有ります。

このファイルをクリックすると、ハードウェアを設定するための外部プログラムである"Device Configurator"が開きます。

設定を行うためのタブがいくつかあります。しばらくModusToolboxを使ってみた所、最初は"Pins"タブを開いて端子の設定をするのがよさそうです。

このアプリケーションでは、評価ボードの赤色LEDを点滅させるためにP6[3]を使用します。まず、P6[3]の隣にあるチェックボックスにチェックをいれて、端子の名前を記述します。ここでは、"Pin_LEDR"という名前をつけました。

次に画面右側の"Parameters"タブの設定を行います。

  1. "General: Drive Mode"を"Strong Drive, Input buffer off"に設定して、LEDを駆動できるようにします。
  2. "Terminals: Digital Output"を"TCPWM[0] 32-bit Counter 1 pwm_n"に設定して、PWM出力をこの端子から出力できるようにします。

PSoC 6 MCUでは、端子に割り当てられる機能がかなり制限されています。そのため、LEDが接続された端子に対して割り当て可能なPWM出力を選択するという順序で行った方が便利です。

PWMを設定する

次は、PWMの設定です。さきほど"TCPWM[0] Counter 1"を設定した"Digital Output"の欄に鎖のアイコンが出てきました。

このアイコンをクリックすると、直接PWMの設定画面に飛ぶことができます。

端子の設定と同様にチェックボックスにチェックを入れて、名前を付けます。ここでは、"PWM_2Hz"としました。

次に画面右側の"Parameters"タブの設定を行います。

  1. "Period"の値を500000に設定します。まだ設定をしていませんが、このPWMには1MHzのクロックを使用する予定です。そのため、500,000分周して0.5sec周期のPWM出力を得ようとしています。
  2. "Compare"の値を250000に設定します。"Period"の半分の値に設定することによって、PWM出力のデューティー比は50%になります。
  3. "Clock Signal"を"8 bit Divider 0 clk"に設定します。上述のように1MHzのクロックを出力するためのクロック源を指定します。どのクロックも使用可能です。

また、"Clock Signal"の欄に鎖のアイコンが現れました。このアイコンをクリックして、今度はクロックの設定を行います。

クロックを設定する

クロック設定タブでは、すでにチェックボックスにチェックが入っています。

名前を付けたら、画面右側の"Parameters"タブの設定を行います。

  1. "Divider"に72を設定する。

72MHzの"CLK_PERI"から1MHzのクロックを作成するので、"Divider"に72を設定します。"CLK_PERI"を変えたら、忘れずに"Divider"を設定し直さなくてはなりません。なんて不便なんだ。

以上で三つのブロックの設定と相互接続ができました。"Device Configurator"のメニューから"File→Save"を選択して"design.modus"を保存します。保存ができたら"Device Configurator"を"File→Exit"で終了させます。

ソフトウェア

このアプリケーションでは、Cortex-M4側ですべての処理を行わせます。このため、"LChika_mainapp"プロジェクトの"main.c"ファイルにソフトウェアを書きます。

ソフトウェアと言っても、PWMを起動する処理だけです。以下のように3行書くだけでPWMが起動して分周を始めます。

LChika_mainapp/Source/main_cm4.c
int main(void)
{
    /* Set up the device based on configurator selections */
    init_cycfg_all();

    __enable_irq();

    Cy_TCPWM_PWM_Init(PWM_2Hz_HW, PWM_2Hz_NUM, &PWM_2Hz_config);
    Cy_TCPWM_PWM_Enable(PWM_2Hz_HW, PWM_2Hz_NUM);
    Cy_TCPWM_TriggerStart(PWM_2Hz_HW, PWM_2Hz_MASK);

    for(;;)
    {
    }
}

プログラムしようとしたのだけど

以上で、設定とプログラムはおしまいです。あとは、PSoC 6 MCUに書き込むだけです。

左下の"Quick Start"タブの一番下に"LChika Program (KitProg3)"という項目があります。評価ボードを接続し、ここをクリックすると、アプリケーションのビルドとターゲットデバイスへの書き込みまでをしてくれます。クロックすると、コンソールに何やら赤いエラーが現れました。

「CMSIS-DAPが見つからない」

この評価ボードの初期設定は、KitProgモードになっています。"CMSIS-DAP"を使用するには、SW3(MODE)を押して、モードを切り替えます。すると、LED2(STATUS)が点灯から消灯に切り替わります。これで、"CMSIS-DAP"が使えるようになります。もういちど、"LChika Program (KitProg3)"をクリックします。

「KitProgファームウェアが古いので、fw-loaderを使って最新版アップデートせよ」

このエラーは、PSoC 5LPにKitProg2が書かれているのが原因です。ModusToolboxで使用するためには、KitProg3が必要になってきます。書き換えるためには、fw-loaderというプログラムを使用する必要があります。

fw-loaderは、実行ファイルが"C:\Users<user id>\ModusToolbox_1.0\tools\fw-loader-1.0\bin"に有りますが、コンソールから開く必要があります。

  1. 実行ファイルのあるフォルダでコマンドラインを立ち上げます。
  2. SW3(MODE)を押して、KitProgモードに入れます。
  3. "fw-loader --device-list"を実行します。
C:\ .. \bin>fw-loader --device-list
Cypress Firmware Updater, Version: 1.0.0.505
(C) Copyright 2018 by Cypress Semiconductor
All Rights Reserved

Info: Start API initialization
Info: Connected - KitProg2-1B14156503068400
Info: Hardware initialization complete (713 ms)
Connected supported devices:
        1: KitProg2-1B14156503068400    FW Version 1.5.0

この出力結果の"KitProg2-1B14156503068400"の部分がCY8CPROTO-063-BLEに搭載されたKitProgのIDです。これを使って、ファームウェアをKitProg3にアップグレードします。

C:\ .. \bin>fw-loader --update-kp3 "KitProg2-1B14156503068400"
Cypress Firmware Updater, Version: 1.0.0.505
(C) Copyright 2018 by Cypress Semiconductor
All Rights Reserved

Info: Start API initialization
Info: Connected - KitProg2-1B14156503068400
Info: Hardware initialization complete (721 ms)
Device 'KitProg2-1B14156503068400' opened successfully
Info: Kit FW is 'KitProg2' ver. 1.05 b000. Upgrade file is 'KitProg3' ver. 1.01 b158
Info: Disconnected - KitProg2-1B14156503068400
Info: Connected - KitProg Bootloader-1B14156503068400
Info: Bootloader Version: Major 1, Minor 1, Build 40
Info: FW Upgrade to version: 1.01 b158
Info: Bootloading ...
Info: Verifying ...
Info: FW Upgrade completed
Info: Connected - KitProg3 CMSIS-DAP BULK-1B14156503068400
FW update completed successfully
Info: Disconnected - KitProg Bootloader-1B14156503068400

これで、KitProg3に書き換えられました。もう一度SW3(MODE)を押してCMSIS-DAPが使えるモードにします。

再び、プログラム

もういちど、"LChika Program (KitProg3)"をクリックすると、こんどは、うまく書き込めました。LEDも点滅しています。

ただのLチカなのに、18kBも必要なんですね。

関連サイト

PSoC 6 BLE Prototyping Kit
ModusToolbox™ Software Environment