BL652(SDK)

  BL652ブレークアウトボード(秋月電子通商)とパーソナル・コンピュータPC(OS:Windows10)を、Nordic Semiconductory社のSDKを用いてHOGP(Bluetooth Low Energy)で接続します(LEマウスとLEキーボードはXperia Ace II [OS: Android12]とも接続可能)。SDKのオンライン・マニュアルはInfocenterにあります。一方、オフライン・マニュアルはnRF5 SDK v17.1.0にあります。

なお、ファームウェアのデバックには、SWDデバッガーとしてLaird Technologies社の開発キット(DVK-BL652-SA)を、また統合開発IDE環境としてSegger社のEmbedded Studioを使います。

SDKを用いてBL652にファームウェアを書くと、smartBASIC用のLicense codeが消えるので注意してください。Laird社によると、SDKを用いてファームウェアを書く前に、UwTerminalX上で ati 49406 命令を実行してLicense codeを表示させ、それを控えておくと良いでしょうとのことです。

License codeを控えずに消した場合、at i 14 命令でBluetoothアドレスを得て、このアドレスに対するLicense codeをLaird社に問い合わせると丁寧に教えてくれます。Q and Aを参照ください。英語でのやり取りになります。なお、at+lic "License code(16進数)" 命令で、License codeを書き込むことができます。

注意:at命令は、UARTインターフェースを用いるsmartBASICの世界での命令であって、SWDインターフェースを用いるSDKの世界の命令ではありません。したがって、もし、at命令を実行するための回路環境を作っていなければ、BL652(smartBASIC)の章の最初からサンプルコードの実行の節までの説明にしたがって、UARTインターフェースを含む回路をきちんと作成し、サンプルコードを実行し、さらにLicense codeを表示させ、それを控えておきましょう。

目次


準備

1.SWDデバッガー

  SDKを用いたファームウェアの書き込みとデバッグには、SWDデバッガーが必要になります。J-Link EDUが有名ですが、ここでは、Laird Technologies社の開発キット(DVK-BL652-SA)を使います。

SWD接続: BL652ブレークアウトボードと開発キット(DVK-BL652-SA)とのSWD接続は以下の写真のようにします。具体的は、BL652ブレークアウトボードのSWDIO、SWDCLK、GNDを、開発キット上のJP1ピンヘッダーの2番ピン、4番ピン、9番ピンにピンソケット1.27mm 2×5(10P)(秋月電子通商 C-13806)を介して、それぞれ結線します。JP1の1番ピン(写真のPIN#1)には●印があるので間違えないように。

ジャンパー設定: 開発キット(DVK-BL652-SA)上のJ3J4とを共に2-3間をショートさせまず(ジャンパー設定)。以下の写真を参照ください。なお、SWD接続とジャンパー設定に関しては、開発キット・ユーザーガイドの15ぺージに書かれています。ユーザーガイドの写真と以下の写真は上下逆です。ジャンパー設定を間違えると、開発キット上のBL652にファームウェアを書き込むことになり、結果として開発キット上のBL652のLicense codeを消してしまいます

 

smartBASICに戻ることが決してないならば、BL652ブレークアウトボードに外づけしてある「5ピンのピンヘッダー」と「タクトスイッチ」は不要です。

2.SDKのダウンロードとフォルダー配置

  nrf5_sdk_17.1.0_ddde560.zipをダウンロードします(Webページの下の方にあり)。

これを解凍して出てくるnrf5_sdk_17.1.0_ddde560フォルダーの中身を、適当なフォルダー(ここでは、C:\Nordic¥SDKフォルダーとします)を新たにつくり、その中にすべて移動します。

作業フォルダーをC:\Nordic¥SDKフォルダーの中に作成します。フォルダー名は適当でよいのですが、ここではmyprojectsとしました。

3.SDKにおける内部クロック設定

  BL652ブレークアウトボードのBL652-SA-01は、内部クロックで働かせるので、C:\Nordic\SDK\components\softdevice\common\nrf_sdh.cを以下のように編集します(青字のところを追加)。なお、コメント文にした箇所は水晶発振子を用いる場合の設定用です。

------------------------------
// Notify observers about starting SoftDevice enable process.
sdh_state_observer_notify(NRF_SDH_EVT_STATE_ENABLE_PREPARE);

nrf_clock_lf_cfg_t const clock_lf_cfg =
{
  //.source = NRF_SDH_CLOCK_LF_SRC,
  //.rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV,
  //.rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV,
  //.accuracy = NRF_SDH_CLOCK_LF_ACCURACY
  .source = NRF_CLOCK_LF_SRC_RC,
  .rc_ctiv = 16,
  .rc_temp_ctiv = 2,
  .accuracy = NRF_CLOCK_LF_ACCURACY_500_PPM
};
------------------------------

編集が終わったファイルはnrf_sdh.cです。

4.Embedded Studioのインストール

  統合開発IDE環境として、Segger社のEmbedded Studioを用いますので、Setup_EmbeddedStudio_ARM_v634a_win_x64.exe)をダウンロードしてPCにインストールします。

5.Command-Line-Toolsのインストール

  BL652-SA-01のメモリを消去するための道具(Embedded Studioに組み込まれる)として、nrf-command-line-tools-10.18.1-x64.exeをダウンロードしてPCにインストールします。


LEマウス

1.ble_app_hids_mouseのコピーと整理

  作業フォルダーであるC:\Nordic\SDK\myprojectsフォルダーに、ble_peripheralという名前の新しいフォルダーを作ります。

マウスを実現するファームウェアは、C:\Nordic\SDK\examples\ble_peripheralフォルダーの中にあるble_app_hids_mouseフォルダーに格納されています。このble_app_hids_mouseフォルダーを、ble_peripheralフォルダーの中にコピーします。コピーしたble_app_hids_mouseフォルダーの中身は次のようになっています。

ここで、pca10040フォルダーとmain.cファイルだけを残して後はすべて削除します。PCA10040というのは、Nordic Semiconductory社のnRF52832チップ開発キットnRF52 DKに含まれる基板の名前です。BL652にはnRF52832チップが使用されているのでpca10040フォルダーを使います。

pca10040フォルダーを開くとs132フォルダーが現れます。s132とは、SoftDevice(BLEプロトコルスタック)の名前で、nRF52832チップをBLEで使う時には必ずこのs132フォルダーを使用します。

s132フォルダーを開くと、次のようになります。

統合開発IDE環境としてSegger社のEmbedded Studioを用いますので、configフォルダーとsesフォルダーだけを残して後はすべて消去します。

sesフォルダーを開くと、ble_app_hids_mouse_pca10040_s132.emProjectなるファイルがありますので、これをダブルクリックすると、Embedded Studioが立ち上がり、マウスを実現するファームウェアを編集できるようになりますが、その前にBSPを編集しておきます。

2.BSPの編集

  BL652ブレークアウトボード用にboard support package (BSP)を編集する必要があります()。具体的には、C:\Nordic\SDK\components\boards\pca10040.hを編集します。

まず、LEDの論理を負倫理から正論理に変えます。すなわち
#define LEDS_ACTIVE_STATE 0

#define LEDS_ACTIVE_STATE 1
に変えます。

次に抽象化したボタン名が意味するSIOのピン番号を
#define BUTTON_START 13
#define BUTTON_1 13
#define BUTTON_2 14
#define BUTTON_3 15
から
#define BUTTON_START 11
#define BUTTON_1 11
#define BUTTON_2 15
#define BUTTON_3 14
に変えます。

編集が終わったファイルはmouse.zipの中にあります。

:LEDやBUTTONがBL652のどのピンに接続されているかは、それぞれの開発ボードで異なる可能性があります。例えばBLE接続が完了したときに光るLED1を考えます。ある開発ボードAでは、そのLED1がSIO_11に繋がっているけれども、他の開発ボードBでは、SIO_12に繋がっているとしましょう。これでは扱いにくいので、BSPで開発ボードAに対しLED1はSIO_11に繋がっていると記述し、開発ボードBに対しLED1はSIO_11に繋がっていると記述しておけば、BSP以外のファームウェア部分はLED1を点灯させるとすれば済むわけです。つまり、BSP以外のファームウェア部分では、SIO_11とかSIO_12とか気にせずに済ませることができるようになり、LED1という抽象化した名前だけを使えば良いことになります。

3.ファームウェアのバグを修正

3-1.C:\Nordic\SDK\external\segger_rtt\SEGGER_RTT_Syscalls_SES.cを編集します。コンパイル・エラー__vfprintf.h: No such file or directoryを避けるためです。

#include "SEGGER_RTT.h"
の下に
#include "SEGGER_RTT.h"
#if !defined(__SEGGER_RTL_VERSION)
のように#if文を追加する。

さらに、一番最後の方に
#endif
#endif
なる箇所がありますが、#endif文(上で追加した#ifの終わりを示す)をそのすぐ下に追加して、
#endif
#endif
#endif
とする。

編集が終わったファイルはmouse.zipの中にあります。

3-2.C:\Nordic\SDK\myprojects\ble_peripheral\ble_app_hids_mouse\pca10040\s132\ses\flash_placement.xmlを編集します。コンパイル・エラー.text is larger than specified size
.rodata is larger than specified sizeを避けるためです。

<ProgramSection alignment="4" load="Yes" name=".text" size="0x4" />

<ProgramSection alignment="4" load="Yes" name=".text" />
とします。

さらに、
<ProgramSection alignment="4" load="Yes" name=".rodata" size="0x4" />

<ProgramSection alignment="4" load="Yes" name=".rodata" />
とします。両者ともsize="0x4"を削除するということです。

編集が終わったファイルはmouse.zipの中にあります。

4.ファームウェアの実行

  sesフォルダーを開くと、ble_app_hids_mouse_pca10040_s132.emProjectなるファイルがありますので、これをダブルクリックして、Embedded Studioを立ち上げます。

BL652ブレークアウトボードのnRF52832チップのメモリをクリアします。以前のBLE接続情報が残っていると、正常に動作しないので、このクリアが必須です。Embedded StudioのTargetメニューを開くと次のようにサブメニューが現れるので、一番上のConnect J-Linkを選択します。もう一度、Targetメニューを開いてサブメニューを表示させ、その中のErase Allを選択します。これで、メモリーのクリアが完了します。

もう一度、Targetメニューを開いてサブメニューを表示させ、その中のDownload ...を選択すると、ファームウェアがコンパイルされ、その後ファームウェアが起動します。ブレークアウトボード上のLED1が点滅します。

5.パーソナル・コンピュータとの接続

  BL652ブレークアウトボードのBTN2が接続ボタンになります。BTN2を押しながらパーソナル・コンピュータPC(OS:Windows10)と接続します()。接続方法は接続方法に書いてあります。 接続が終わると、

のようになります。しばらく見ていると、バッテリーの残量が変わって行くのが分かると思います。また、LED1が点滅状態から点灯状態に移行します。

:ファームウェアを書き込んだ直後だけは、BTN2を押さなくてもかまいません。

ところで、接続ボタンをBTN2と決めているのは、C:\Nordic\SDK\components\libraries\bsp\bsp_btn_ble.cの中の

#define BTN_ID_WAKEUP_BOND_DELETE 1 /**< ID of button used to wake up the application and delete all bonding information. */
#define BTN_ID_WHITELIST_OFF 1 /**< ID of button used to turn off usage of the whitelist. */

なる箇所です。

一方、BTN1の動作の記述の中に

#define BTN_ID_DISCONNECT 0 /**< ID of button used to gracefully terminate a connection on long press. */

なる1文があります。したがって、BTN1の長押は推奨されません。

6.マウスボタン操作

  BL652ブレークアウトボード上のBTN1(SIO_11)とBTN2(SIO_15)を押すと、それぞれPC上のマウスカーソルが左方向と上方向へわずかに移動します。また、ボタンは実装されていないのですがSIO_14とSIO_16をGNDに落とすと、マウスカーソルがそれぞれ右方向と下方向へわずかに移動します。

マウス関連のオンライン・マニュアルはHID Mouse Applicationにあります。

7.パーソナル・コンピュータとの再接続

  BL652ブレークアウトボードの電源を入れるだけです。LED1が点滅状態から点灯状態に移行したら、再接続完了です。

8.Android携帯との接続

  ファームウェアを変更することなく、Xperia Ace II(OS: Android12)とも接続できました。接続方法は、接続方法の2に書いてあります。


LEキーボード

上記で、マウスを実現したという前提で、説明を一部省いて行きます。

1.ble_app_hids_keyboardのコピーと整理

  キーボードを実現するファームウェアは、C:\Nordic\SDK\examples\ble_peripheral\ble_app_hids_keyboardフォルダーに格納されています。このフォルダーを、C:\Nordic\SDK\myprojects\ble_peripheralフォルダーの中にコピーします。そして、コピーしたble_app_hids_keyboardフォルダーの中身で必要の無いフォルダーやファイルはすべて削除します。

ble_app_hids_keyboardフォルダーとその中のpca10040フォルダー、またその中のs132フォルダーの中身を以下の図に示します。

2.ファームウェアのバグを修正

2-1.C:\Nordic\SDK\myprojects\ble_peripheral\ble_app_hids_keyboard\pca10040\s132\ses\flash_placement.xmlをマウスの節の3-2に準じて編集します。

修正後のファイルはkeyboard.zipの中にあります。

2-2.main.cの中にsend_key_scan_press_releaseという関数があります。この関数のなかに

if (bsp_button_is_pressed(SHIFT_BUTTON_ID))
{
        data[MODIFIER_KEY_POS] |= SHIFT_KEY_CODE;
}

という箇所がありますので、そのすぐ後に次の1行を付け加えます。

if(offset == data_len) data[MODIFIER_KEY_POS] = 0;

もし、この行がなければ、BTN1を押しながらBTN2を押すとPCはCaps Lock状態になります。この状態でPCを操作すると、PCの動作がおかしくなったと勘違いします。

修正後のファイルはkeyboard.zipの中にあります。

3.ファームウェアの実行とパーソナル・コンピュータとの接続

  sesフォルダーを開くと、ble_app_hids_keyboard_pca10040_s132.emProjectなるファイルがありますので、これをダブルクリックして、Embedded Studioを立ち上げます。BL652ブレークアウトボードのnRF52832チップのメモリをクリアした後、ファームウェアを書き込み実行します。そしてパーソナル・コンピュータと接続します。

4.キーボード操作

  パーソナル・コンピュータで秀丸などのテキスト・エディッタを起動します。BL652ブレークアウトボード上のBTN1(SIO_11)を押す度に、「hello」の文字が1文字づつテキスト・エディッタにタイプされます。また、BL652ブレークアウトボード上のBTN2(SIO_15)はシフトキーに相当しており、これを押しながらBTN1(SIO_11)を押す度に「HELLO」の文字が1文字づつタイプされて行きます。 パーソナル・コンピュータに繋がったキーボードでシフトキーを押しながらCaps LocKキーを押して、キャピタル・ロックすると、BL652ブレークアウトボード上のLED2が点灯するとともに、エディッタに"capson"とタイプされます。さらにシフトキーを押しながらCaps LocKキーを押して、キャピタル・ロックを解除すると、BL652ブレークアウトボード上のLED2が消灯するとともに、エディッタに"CAPSOF"とタイプされます。

キーボード関連のオンライン・マニュアルはHID Keyboard Applicationにあります。

5.Android携帯との接続

  ファームウェアを変更することなく、Xperia Ace II(OS: Android12)とも接続できました。ただし、キャピタル・ロック機能は働きません。接続方法は、接続方法の2に書いてあります。

注意:BTN1の長押は推奨されません。


LE一般的HID

マウスの節のBSPの編集が終わっていることが前提です。

ble_app_hids_keyboardにて、main.cを少し書き換えるだけです。書き換えたものは、hid.zipの中にあります。書き換え前後のmain.cを、例えばWinMergeなどで比較すると何処を変えたのかが分かります。

  なお、main.cを書き換えたら必ずリビルドしておきます(Buildメニューを開いて、Rebuild...を選択します)。

  パーソナル・コンピュータ用のアプリケーション・ソフトウェア(Visual Studio 2019でコンパイル)は、utilities2019.zipです。実行ファイルはutilities2019.zipを解凍して出てきたutilities2019の中のCS.exe(C#)かVC.exe(Visual C++)です。BL652ブレークアウトボードとPCを接続した後、これら実行ファイルのうちいずれか1つを実行すると、2つのエディット・ボックスと1個のOK(SEND)ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のエディット・ボックスに123と入れて、OK(SEND)ボタンをクリックすると、下のエディット・ボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が現れるはずです。なお、送受信でいる文字の数は19文字以内に制限しています。


パワーポイント

キーボードが実現できていることが前提です。

  キーボードの4つのボタンを、右矢印キー(0x4f)、左矢印キー(0x50)、ESPキー(0x29)、Shift+F5キー(0x3e)にそれぞれ対応させれば、Microsoft社のパワーポイントの無線操作が可能となります。キーコードについては、translate.pdfを参照ください。

ble_app_hids_keyboardにて、main.cを少し書き換えるだけです。書き換えたものは、power_point.zipの中にあります。書き換え前後のmain.cを、例えばWinMergeなどで比較すると何処を変えたのかが分かります。BTN1(SIO_11)は右矢印キー(スライドを進める)、BTN2(SIO_15)は左矢印キー(スライドを戻す)、SIO_14はESPキー(スライド終了)、SIO_16はShift+F5キー(スライド開始)に対応させました。

  なお、main.cを書き換えたら必ずリビルドしておきます(Buildメニューを開いて、Rebuild...を選択します)。

次の写真のようにBL652への配線はAWG32(KYOWA:耐熱電子ワイヤー)で行いました。なお。SWDIOとSWDCLKへの配線は、ファームウェアを書き込んだ後、取り外しています。

次の写真に完成したパワーポイント用リモコンの内部と外観を示します。なお、BL652は写真のように電波が出る面をスイッチのある面と反対向きにします。また、100μF程度の容量の電解コンデンサーを、電源スイッチが入ったときに電池と並列接続となるように配線します。

 


  蛇足ですが、キーボードの4つのボタンを、Ctrl+pキー(0x13)、Alt+Enterキー(0x28)、Ctrl+Shift+bキー(0x05)、Ctrl+Shift+bキー(0x09)にそれぞれ対応させれば、Microsoft社のWindows Media Playerの無線操作が可能となります。 ble_app_hids_keyboardにて、main.cを少し書き換えるだけです。書き換えたものは、media_player.zipの中にあります。書き換え前後のmain.cを、例えばWinMergeなどで比較すると何処を変えたのかが分かります。BTN1(SIO_11)は再生開始・停止キー、BTN2(SIO_15)は全画面表示開始・解除キー、SIO_14は順早送り・解除キー、SIO_16は逆早送り・解除キーに対応させました。

  ところで、Ctrlなどはmodifierkeyと呼ばれます。例えば、Ctrlキーは左(L CTRL)と右(R CTRL)にあり、それぞれ0x01と0x10なる数値で表現します。また、Ctrl+Shift(Ctrlキーを押しながらShiftキーを押す)は、右キーだけを使うとしたら、右Ctrlは0x10で右Shiftは0x20なので、これらの論理和(OR)をとって0x30なる数値で表現します。

0x01 ; L CTRL
0x02 ; L SHFT
0x04 ; L ALT
0x08 ; L GUI
0x10 ; R CTRL
0x20 ; R SHFT
0x40 ; R ALT
0x80 ; R GUI

詳しい説明は省きますが、modiferkeyとkeyは、1つのBluetoothACLパケットの最初から12バイト目と14バイト目に格納します。Ctrl+Shift+bキー(0x05)ならば、パケットの12バイト目に0x30を、そして14バイト目に0x05を入れてパーソナル・コンピューターに送ります。



CMSIS Configuration Wizard

1.CMSIS Configuration Wizardの組込

注意Java for Windowsがインストールされていることが前提です。

  プロジェクトの中に、以下の図のようにsdk_config.hというファイルがあります。このヘッダーファイルの名前の箇所をダブルクリックすると、ファイル内容が表示されます。#ifndef文、#define文、#endif文の連続で、これを編集するのは大変です。少しだけですが、編集の助けになるのがCMSIS Configuration Wizardです。ただ、新たな項目を追加したり削除したりはできないのが残念です。

Embedded StudioのFileメニューを開き、Open Studip Folderを選択します。現れるサブメニューで、一番下にあるExternal Tool Configurationを選択します。

すると、tools.xtmlの内容が表示されますので、</tools>タグの前に以下のテキストを追加します。


<item name="Tool.CMSIS_Config_Wizard" wait="no">
    <menu>&amp;CMSIS Configuration Wizard</menu>
    <text>CMSIS Configuration Wizard</text>
    <tip>Open a configuration file in CMSIS Configuration Wizard</tip>
    <key>Ctrl+Y</key>
    <match>*config*.h</match>
    <message>CMSIS Config</message>
    <commands>
      java -jar &quot;$(CMSIS_CONFIG_TOOL)&quot; &quot;$(InputPath)&quot;
    </commands>
</item>

2.CMSIS Configuration Wizardの起動方法

  sdk_config.hの箇所を右クリックすると、次のようなサブメニューが現れるので、CMSIS Configuration Wizardという項目を選択します。

これで、CMSIS Configuration Wizardが起動し、次のようなウィンドウが現れます。

CMSIS Configuration Wizard関連のオンライン・マニュアルはSDK configuration header fileにあります。


デバッグ・ターミナルへの出力

ファームウェアのソースコードを見ていると、所々に

NRF_LOG_ERROR("エラーメッセージ");
NRF_LOG_WARNING("警告メッセージ");
NRF_LOG_INFO("情報メッセージ");
NRF_LOG_DEBUG("デバッグメッセージ");

というステートメントがあります。これは、デバッグ時に、Embedded Studioのデバッグ・ターミナルに各種メッセージを表示させるためのものです。ただ、実際に表示させるためには、sdk_config.hを編集する必要があります。CMSIS Configuration Wizardを起動させて、以下のように展開させます。

NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLEDを選択してチェックをはずす
NRF_LOG_BACKEND_RTT_ENABLEDを選択してチェックする
NRF_LOG_BACKEND_UART_ENABLEDを選択してチェックをはずす
NRF_LOG_ENABLEDを選択してチェックする(すでにチェックされている?)

さらに、NRF_LOG_ENABLEDを以下のように展開し、NRF_LOG_DEFAULT_LEVELを選択します。そして、下方にあるコンボボックスからInfo(情報メッセージの表示:デフォルト)などを選択します。

なお、Infoを選択すると、"情報メッセージ"だけではなく、その上の"エラーメッセージ"と"警告メッセージ"も表示されるようになります。同じように、Debugを選択すると、"エラーメッセージ"をはじめ、すべてのメッセージが表示されるようになります。

以上の設定が終わったら、変更内容を保存するために、フロッピーディスクのアイコンをクリックします

次図は、Debugを選択した場合のEmbedded Studioのデバッグ・ターミナル表示例です。


最適化レベルの設定

  ファームウェアのデバッグ中に、ある変数の値を確かめたい(ウオッチ:watchしたい)と思っても、ウオッチできないことがあります。それは、ファームウェアを機械語に直すときに最適化されているからです。最適化レベルを変更するには、以下の様にプロジェクト名の個所をマウスで右クリックしてサブメニューを出して、Options...を選択します。

すると、以下の様なウィンドウが現れるので、Code Generation項目の下のOptimization Levelの値をNoneとします。これで最適化されなくなり、ウオッチできなかった変数の値をウオッチできるようになります。



ボタンの追加

1.BPSの編集

  例えばble_app_hids_mouseでは、マウスカーソルを上下左右に移動させるために、4つのボタンを使用しています。しかし、用途によっては、ボタンをさらに1個追加して、合計5つのボタンが必要になります。BSPを編集する必要があります。C:\Nordic\SDK\components\boardsフォルダーの中にあるpca10040.hを編集しても良いのですが、別途、同じフォルダー内でpca10040.hをコピーして、ファイル名を5buttons.hとします。ファイル名は任意です。

5buttons.hを編集します。例えば、以下の青字の行を変更します。

------------------------------
#define BUTTONS_NUMBER 5

#define BUTTON_START 11
#define BUTTON_1 11
#define BUTTON_2 12
#define BUTTON_3 14
#define BUTTON_4 16
#define BUTTON_5 15
#define BUTTON_STOP 16
#define BUTTON_PULL NRF_GPIO_PIN_PULLUP

#define BUTTONS_ACTIVE_STATE 0

#define BUTTONS_LIST { BUTTON_1, BUTTON_2, BUTTON_3, BUTTON_4, BUTTON_5 }

#define BSP_BUTTON_0 BUTTON_1
#define BSP_BUTTON_1 BUTTON_2
#define BSP_BUTTON_2 BUTTON_3
#define BSP_BUTTON_3 BUTTON_4
#define BSP_BUTTON_4 BUTTON_5
------------------------------

2.ボード名の変更とBSPとの関連づけ

  そもそも、pca10040.hは何処から参照されているのでしょうか。このファイルがあるフォルダーにboards.hというヘッダーファイルがあります。その中身を見ると、次のような箇所があります。

#elif defined(BOARD_PCA10040)
  #include "pca10040.h"

つまり、使用しているボードに名前がBOARD_PCA10040のとき、pca10040.hが参照されます。なお、boards.hは、以下に示すboards.cから参照されています。

  それでは、ボードの名前はどこで決めているのでしょうか。ble_app_hids_mouse_pca10040_s132.emProjectを秀丸などのエディッタで開くと、

c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BLE_STACK_SUPPORT_REQD;BOARD_PCA10040;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52;NRF52832_XXAA;NRF52_PAN_74;NRF_SD_BLE_API_VERSION=7;S132;SOFTDEVICE_PRESENT;"

という箇所があります。この中にBOARD_PCA10040という箇所があります。ここを、新しいボード名BOARD_5BUTTONSに書き換えて、上書き保存します。そして、boards.hに、

#elif defined(BOARD_5BUTTONS)
  #include "5buttons.h"

を追加します。これで、プロジェクトで使用するボードの名前がBOARD_5BUTTONSとなり、このボードのとき5buttons.hが参照されることになります。

3.イベント数の変更

  ここで、ble_app_hids_mouse_pca10040_s132.emProjectの箇所をダブルクリックしてEmbedded Studioを起動します。ファームウェアを実行してもエラーになります。これは、ボタンを押したときにはイベントが発生するのですが、イベントの数が4となっているためです。イベントの数を4から5に設定する必要があります。

イベント数を変更するには、CMSIS Configuration Wizardを使ってsdk_config.hを編集します。CMSIS Configuration Wizardを起動して、以下の図のように展開します。

ここで、GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTSを選択します。下の方にイベント数として4が設定されているので、これを5にします。そして、変更を保存するために、フロッピーディスクのアイコンをクリックします。



smartBASICへの復帰

  SWDデバッガーでファームウェアを書き込むと、smartBASIC関連のファームウェアは消えるのでsmartBASICが使用できなくなります。smartBASICを復帰させるための方法は、Upgrading BL652 Firmware via JTAG.pdfに書いてあります。具体的には、SWDインターフェースを使い以下の作業をします。

ITSE01052_11_BL652_Firmware_For_Upgrade_v28_11_8_0_r1(Webページの下の方にあるSoftwareなる項目の中にあります)をダウンロードします。メールアドレス、名前などを、架空のものでかまいませんので入力して、zipファイルをダウンロードします。これを解凍して出てくるフォルダーの中にあるFirmware\_DownloadFirmwareJlink.batを実行するだけです。実行時間が掛かりますのでしばらく待つ必要があります。

最後に、UARTインターフェースを使い、UwTerminalX上で at+lic "License code(16進数)" 命令で、控えておいたLicense codeを書き込みます。



戻る