PSoC6 BLE Prototyping KitをPSoC CreatorでLチカ


PSoC6のメモ
PSoC6には、いままで(PSoC3/4/5LP)用の開発環境PSoC Creatorとは別にModusToolboxというeclipseベースの開発環境が用意されている。
が、今までのPSoCユーザーにとってはPSoC Cratorのほうがとっつきやすいので、PSoC CreatorでLチカするまでをまとめる。

開発ボード

CY8CPROTO-063-BLE PSoC6 BLE Prototyping Kit
KitProg2が載っているのでライターを別途用意する必要はない。

備考:CY8CPROTO-062-4343W PSoC 6 Wi-Fi BT Prototyping Kitは現状PSoC Creatorに対応しておらず、ModusToolboxのみでの開発になるので注意。

環境構築

  1. PSoC Creator 4.2
  2. PSoC PDL 3.1.0
  3. PSoC Programmer 3.28.3

PSoC Creatorを導入する

PSoC Creator
ダウンロードにはCypressのアカウント取得/ログインが必要。
2019/6/8時点では4.2が最新。

PSoC PDLを導入する

Peripheral Driver Library
コンポーネント類や各種ミドルウェアが含まれる。
PSoC Creatorと同様にダウンロードにはログインが必要。
2019/6/8時点では3.1.0が最新

追記

PSoC Creatorを開き、Tools->Find new devicesを選んでやると、PSoC6のBLE対応IC群がPSoC Creatorで選べるようになる。
この手順を踏まないとデバイス一覧にCYBLE_416045-02が出てこないので注意。
追記ここまで

PDLをインストールしたらPSoC Creatorを開き、Tools->Option->Project ManegementタブのPDL v3(PSoC 6 devices) locationにインストールしたPDLのディレクトリを入れてやる。

参考:PSOC CREATOR ADDS SUPPORT FOR PSOC 63-BASED EZ-BLE™ BLUETOOTH MODULE

PSoC Programmerを導入する

PSoC Programmer
このページより、PSoC Programmerを落とす。
Cypress ProgrammerはModusToolbox用の書き込みアプリケーションらしい。
2019/6/8時点では3.28.3が最新。

注意

PSoC既存ユーザーの場合、上記3点セットがすでに導入されている場合がある。
その場合、PSoC Creatorは4.2、PSoC PDLは3.0以上、PSoC Programmerは3.27.3以上でないと何かしらでエラーを吐く。
筆者はPSoC Programmerのアップデートを忘れて1時間溶かした。

Lチカ

PSoC6 BLE Prototyping Kitには赤と緑2つのユーザーLEDが実装されている。
今回はM0+で緑のLEDを、M4で赤のLEDをチカチカさせる。

TopDesign

TopDesignは以下のようにする。
Digital Outputを2つ並べ、LED_1/2とラベルを付ける。

データシートを見ればわかるが、この開発ボードのLEDの実装は上の図のようにsinkになっている。実際のOutputとLEDの点灯が反転するので注意。

Pinアサイン

Pin設定は以下のようにする。
緑のLEDが7.1、赤のLEDが6.3ピンなのでそのように割り当てる。
実際のボードにもピン番号がシルクで振ってあってわかりやすい。

M0+のコード

main_cm0p.c
#include "project.h"

int main(void)
{
    __enable_irq(); /* Enable global interrupts. */
    /* Enable CM4.  CY_CORTEX_M4_APPL_ADDR must be updated if CM4 memory layout is changed. */
    Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR); 

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        Cy_GPIO_Inv(LED_1_0_PORT,LED_1_0_NUM);
        Cy_SysLib_Delay(1000);
    }
}

for文無限ループ外のコードは自動生成されたものそのままでOK。
Cy_GPIO_Inv(LED_1_0_PORT,LED_1_0_NUM);はLED_1ピンの出力を反転させる。
Cy_GPIO_Write(LED_1_0_PORT,LED_1_0_NUM,1);などで制御してもよい。
Cy_SysLib_Delay():の引数はms。

M4のコード

main_cm4.c
#include "project.h"

int main(void)
{
    __enable_irq(); /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        Cy_GPIO_Inv(LED_2_PORT,LED_2_NUM);
        Cy_SysLib_Delay(500);
    }
}

M4側はCy_SysLib_Delay(500);でM0+側の倍の速さでチカチカさせることにする。

コンパイル/プログラミング

Build->Build [Design名]よりプログラムをコンパイルする。

無事コンパイルが通ったら、PCと開発ボードを接続し、Debug->Programで書き込みを行う。

上のような画面が出るので、どちらかのコアを選択しOK/Connectで書き込みが行われる。
今回は選ぶのはどちらでもOK。デバッガを走らせる場合はどちらのコアを監視するかで選択が必要らしい?

書き込みが成功すれば、緑と赤のLEDがチカチカし始めたはず。