目的
AE-TYBLE16こと太陽誘電製EYSGJNAWY-WX(SoCはNordic Semiconductor製nRF51822)をSTM32 Nucleo付属デバッガーST-Link/V2-1を用いてArduinoで開発する環境の下準備(SoftDevice書込み)まで実施したので,それをまとめておく.
- 事前にSoftDevice書込み等,Arduino IDEで作成したArduinoスケッチが書込みできる環境の整備(本記事)
- GPIOやADC,シリアルインターフェースの機能確認:
☞Arduino環境でAE-TYBLE16のピンファンクションを確かめる - BLEの接続/非接続の確認:
☞Arduino環境でAE-TYBLE16のBLEを始める(その1:接続/非接続) - BLE経由のLチカ確認:
☞Arduino環境でAE-TYBLE16のBLEを始める(その2:BLE経由のLチカ) - 照度センサー明暗判定原理試作:
☞Arduino環境でAE-TYBLE16のBLEペリフェラルデバイス~明暗判定編~ - リードスイッチドア開閉判定原理試作:
☞Arduino環境でAE-TYBLE16のBLEペリフェラルデバイスを作る~ドア開閉判定編~
結論
まず,NUCLEOボードのST-Link部分は切り離す必要が全くないことに注意したい.もちろんジャマな場合は切り離してもよい.
NUCLEOボードのST-Link部分,正確にはST-Link/V2-1を用いてJ-Link化せずにArduino IDE 1.8.19上でSandeep Mistry氏のnRF5 Boardsパッケージ0.7.0のnRF5 Flash SoftDeviceでS130を書き込むことができた.
結線写真 | 結線レイアウト図 |
---|---|
本記事で紹介するおもな環境は下表のとおり:
名称 | 規格 | 製造会社 | 備考 |
---|---|---|---|
BLEモジュール | AE-TYBLE16 | 秋月電子通商 | 購入時1,280JPY 太陽誘電製EYSGJNAWY-WX(SoCはNordic Semiconductor製nRF51822) |
デバッガー | NUCLEO-L053R8(STSW-LINK009 2.0.2) | STMicroelectronics | タダ 201X年にSTの営業が会社に来たときのもの,ST-Link/V2-1として使用する |
BLEモジュール用ソケット | 2227P-16G-03 | 寬德 | 購入時100JPY ハンダ不要でブレッドボード挿入に使える |
ブレッドボード | BB-801 | 万捷电子 | ブレッドボードなら何でもよい |
ジャンパーケーブル(オス・メス) | DG01032-0024-RD-015など | 協威亞洲 | 間違えないように色をわけたほうがよい ※C-17228のほうが安い |
USBケーブル(mini B) | LDUC1011-1.5m | EverU Electronics | 充電専用でなければ何でもよい |
黄緑色LED | OSNG5113A,2.0[V],20[mA] | OptoSupply | 購入時500JPY |
半固定ボリューム | 3362P-1-103LF,10[kΩ],0.5[W] | BOURNS | 購入時50JPY |
ホストPC | マザーボードB450 AORUS M,CPU:Ryzen 7 3700X,メモリー:32[GB] | - | B450チップセット環境の注意点あり(後述) |
IDE | Arduino IDE 1.8.19 | ARDUINO | |
nRF5ライブラリー | Nordic Semiconductor nRF5 Boardsパッケージ | Sandeep Mistry | |
Nordic SoftDevice | S130 2.0.1 | Nordic Semiconductor | BLEプロトコルスタック |
ホストPCのOS | Windows 10 Pro 64ビット版 | Microsoft | 英語版(インターナショナル) |
また,nRF5ライブラリーの設定は以下のとおり:
項目名 | 設定値 | 備考 |
---|---|---|
ボード | Generic nRF51 | |
Chip | 32kB RAM, 256kB flash (xxac) | データシートよりEYSGJNZWYは32kB |
SoftDevice | S130 | |
Low Frequency | RC Oscillator | データシートよりEYSGJNZWYは水晶振動子が未実装で内蔵RC発振回路で代替指示 |
ポート | COMn | 環境による |
Programmer | ST-Link V2-1 (ST-Link On-Board) | 新規に作成(後述) |
以下は,なくても要求を満たす:
名称 | 規格 | 製造会社 | 備考 |
---|---|---|---|
J-Link化ツール | ST-Link Reflash Utility | SEGGER | ST-LinkをJ-Link化する |
ドライバー差替ツール | Zadig 2.7 | Pete Batard | jlink→WinUSBにする |
nRF CUIツール | nRF Command Line Tools 10.18.1 | Nordic Semiconductor |
※結論に到達するまでの一連の流れは,以下の楽しいツイートたち参照.
この手のヤツって,とにかく最初は従えばいいだけのはずなんだけど,今回全くできないねえ
— AKETO, Tomu (@so2akt) 2022年12月18日
EYSGCNZWY(nRF51822)をArduinoIDE+Nucleoで開発する ~Serial通信をBluetoothで無線化~ https://t.co/B5GVDGpsMx #Qiita
詳細
ハードウェア
デバッガーにはST-Link/V2-1(STMicroelectronicsのNucleoボードのST-Link/V2)を使用する.SWD(Single Wire Debug)で接続するため,電源ラインを除いてクロックSWCLKとデバッグ信号SWDIOの2本の接続でよい!
一方,AE-TYBLE16は,SoCはNordic SemiconductorのnRF51822で,モジュールとしては太陽誘電のEYSGJNAWY-WXである.このモジュールは類似の品番が多く詳細は不明なところが多い.詳細は購入時添付のProduct Passcodeを使用して,太陽誘電からアクセスできるが,第三者への情報提供、開示、配布、共有、公開はしないで下さい。(原文ママ)
と注意書きがあるため,ブログ記事にできないので使用しない.
ST-Link/V2-1とAE-TYBLE16の結線
Nucleoボードのユーザーマニュアルおよび回路図,AE-TYBLE16の回路図から,以下の5本を結線した*1.また,NucleoボードをST-Linkとして使用するため,CN2の2つのジャンパーは取り外す.
Nucleoボード | AE-TYBLE16 | 信号機能 | 備考 |
---|---|---|---|
JP1の左側(+3V3_ST_LINK) | DIP14(VCC_NRF/AVDD) | 3.3[V]電源電圧 | 赤色 |
CN4の1(VDD_TARGET) | ↑ | ST-Link/V2-1への電源参照電圧 | 赤色 |
CN4の2(SWCLK) | DIP3(SWDCLK) | SWDクロック | 黄色 |
CN4の3(GND) | DIP13(GND) | GND | 黒色 |
CN4の4(SWDIO) | DIP16(SWDIO) | SWDデータI/O | 青色 |
CN4の5(NRST) | - | リセット | 未結線 |
CN4の6(SWO) | - | 予約 | 未結線 |
ST-Link/V2-1
単品販売しているST-Link/V2と同等(?)と思われるが,USBのPIDが異なるので,書込み操作時に注意する必要がある(後述).
EYSGJNAWY-WX
DigiKeyやMouserなどの海外サイトと,加賀電子FEIのサイトで,このモジュールに関連する情報が得られる.
確証はないが,太陽誘電のアプリケーションソフトウェアが組み込まれたもの(UARTで通信できるもの)の場合,モジュール名にAが付与されると思われる.EYSGJNシリーズ,としてラインナップしているのは間違いないが.それが正しいとすると,このEYSGJNAWY-WXに対応する汎用品は,EYSGJNZWYと考えられる(下表参照).なお,同一の資料から,EYSGJNAWY-WXとEYSGJNZWYの特徴・ブロック図は以下のとおりである.
EYSGJNAWY-WX概要 | EYSGJNAWY-WXブロック図 |
---|---|
EYSGJNZWY概要 | EYSGJNZWYブロック図 |
---|---|
ソフトウェア
Arduino環境セットアップ(ProgrammerとSoftDeviceを除く)
Sandeep Mistry氏のライブラリーを使用する.追加方法は,ほかのライブラリー追加方法と同じ.
- ファイルメニューから環境設定を選択する
- 環境設定の追加ボードマネージャのURL:に
https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
を追加する - ボードマネージャメニューを開く
nordic
で検索してインストールをクリック
ボード特有の設定項目は,以下のとおり.
項目名 | 今回の設定値 | 初期設定値 | 備考 |
---|---|---|---|
ボード | Generic nRF51 | - | |
Chip | 32kB RAM, 256kB flash (xxac) | 16kB RAM, 256kB flash (xxaa) | データシートよりEYSGJNZWYは32kB |
SoftDevice | S130 | None | 上記モジュール概要表よりEYSGJNZWYはS130対応できる*2 |
Low Frequency | RC Oscillator | Crystal Oscillator | データシートよりEYSGJNZWYは水晶振動子が未実装で内蔵RC発振回路で代替指示 |
ポート | COMn | - | 環境による |
Programmer | ST-Link V2-1 (ST-Link On-Board) | - | 新規に作成 |
上記,Low Frequencyを含め,データシートTY-BLE EYSGJNZ DataReportから,2点,クロック周波数の設定を変更しなければならない項目がある(詳細はデータシート参照).
クロック周波数について
Nordic Semiconductorの評価ボード(Development Kit,DK)には16MHzの水晶振動子が使われているために,提供されるサンプルコードは16MHzのクロックを使用するように設定されている.これに対して,太陽誘電のモジュールでは32MHzの水晶振動子が搭載されているので,そのままサンプルコードを動作させることができないとのこと.
具体的にはサンプルコードのHFCLKのXTALFREQレジスターが32MHz用の設定になっているので,UICR(User Information Configuration Register)というレジスターがある0x1001008に0xFFFFFF00を書き込む必要があるらしい.また,このUICRはSoftDevice書き込むと消去される(当たり前かもしれないけれど)とのこと.回避策は2つ記載されているが,以下のソースコードを変更する方法を使う.
ソースコードの必要な箇所を修正する.以下のコードをTASK_HFCLKSTART
タスクの前である,system_nRF51.c
のSystemInit
関数に追加することで対応できるとのことである.
if (*(uint32_t *)0x10001008 == 0xFFFFFFFF) { NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos; while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} *(uint32_t *)0x10001008 = 0xFFFFFF00; NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos; while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} NVIC_SystemReset(); while (true){} }
Arduino環境の場合,Ver.0.7.0では以下のファイル
%USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\cores\nRF5\SDK\components\toolchain\system_nrf51.c
が該当し,ファイル内で定義されている__SYSTEM_CLOCK
(これが16MHz)の適用がSystemInit
関数の最後で行われているため,SystemInit
関数の末尾に上記を追加する.一部記載を省略するが,system_nrf51.c
は以下となる*3.
<<<略>>> #define __SYSTEM_CLOCK (16000000UL) /*!< nRF51 devices use a fixed System Clock Frequency of 16MHz */ #if defined ( __CC_ARM ) uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK; #elif defined ( __ICCARM__ ) __root uint32_t SystemCoreClock = __SYSTEM_CLOCK; #elif defined ( __GNUC__ ) uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK; #endif void SystemCoreClockUpdate(void) { SystemCoreClock = __SYSTEM_CLOCK; } void SystemInit(void) { <<<略>>> SystemCoreClockUpdate(); if (*(uint32_t *)0x10001008 == 0xFFFFFFFF){ NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos; while (NRF_NVMC->READY == NVMC_READY_READY_Busy){ } *(uint32_t *)0x10001008 = 0xFFFFFF00; NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos; while (NRF_NVMC->READY == NVMC_READY_READY_Busy){ } NVIC_SystemReset(); while (true){ } } }
ソースコードから推測すると,__SYSTEM_CLOCK
を(16000000UL)
から(32000000UL)
に変更すればよいとも思われるが未確認.
32kHzクロックについて
Arduino環境の設定上,Low Frequencyの項目がこれに該当する.32.768kHzの水晶振動子は未搭載のため,外付けで用意しない場合は内蔵の32.768kHzのRC発振回路(32k RCOSC)を有効にする必要があるとのこと.SDKによって変更箇所が異なる可能性ありという記載もあるが,幸いArduino環境ではメニュー項目にそれがあるため特に考慮不要と判断した.
具体的には以下の設定とのことで,また,RC発振回路動作の場合,水晶振動子使用時と比較しておよそ10[uA]平均電流が増大するとのことだが,AE-TYBLE16としては対応のしようがない.
SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_TEMP_1000MS_CALIBRATION, false);
Arduino環境セットアップ(Programmer)
Programmersのメニューには,J-Link,ST-Link V2,CMSIS DAP,Black Magic Probe (GDB)の4つがある.
しかしながら,NucleoボードのST-Link/V2-1を使用する場合,初期状態ではいずれも使用できない.既存のST-Link V2が使用できない理由は,以下のPIDの違いである.
デバッガー | VID | PID | 備考 |
---|---|---|---|
ST-Link/V2 | 0x0483 | 0x3748 | デバッガーとして販売しているST-Link/V2の場合 |
ST-Link/V2-1 | 0x0483 | 0x374B | NucleoボードのST-Link/V2-1の場合 |
ここでは,ProgrammerメニューにST-Link V2-1 (ST-Link On-Board)
としてST-Link/V2-1を追加するため,以下stlinkob
の6行を%USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\programmers.txt
に追記する.stlinkob
の部分は,同ファイル内の名称と重複しなければ何でもよい.
stlinkob.name=ST-Link V2-1 (ST-Link On-Board) stlinkob.communication=USB stlinkob.protocol=stlink-v2-1 stlinkob.program.protocol=stlink-v2-1 stlinkob.program.tool=openocd stlinkob.program.setup_command=transport select hla_swd; set WORKAREASIZE 0x4000;
基本的には元々記載されていたST-Link V2(stlink
として定義あり)をコピーし,stlinkob.protocol
とstlinkob.program.protocol
をstlink-v2-1
に変更しただけである.この変更を行うことで,%USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5\scripts\interface\stlink-v2-1.cfg
が参照されるようになる.
Arduino環境セットアップ(SoftDevice)
SoftDeviceは,Nordic Semiconductorが提供するnRF5シリーズ向けBluetooth無線プロトコルスタックの名称で,コンパイル済のバイナリーで提供されるものを指す.ユーザーはApplicationの階層のソフトウェアを作成すればよい.
AE-TYBLE16には,初期状態では太陽誘電のアプリケーションソフトウェアが書き込まれているため,下表のSoftDeviceからいずれかを選び,初回だけ書き込む必要がある.使えるSoftDeviceは,SoCがnRF51822なので,下表のとおりS110,S120,S130である.ただし,今回のArduinoライブラリーではメニューにS110とS130の2つしかないため,いずれかとなる.
なお,2023/01/01時点でのダウンロードできる3つのSoftDeviceのバージョンと,ROM/RAM使用量は以下のとおり(リリースノート参照).
SoftDevice名 | ROM 使用量 |
RAM 使用量 |
備考 |
---|---|---|---|
S110(8.0.0) | 96kB | 8kB | |
S120(2.1.0) | 116kB | 10kB | |
S130(2.0.1) | 108kB | 4.95kB |
今回はS130を選ぶこととし,コンパイル済のバイナリーを該当のディレクトリーに配置する.以下,S130の場合だが,S110の場合も以下の手順は同等である.
- S130のSoftDeviceをNordic Semiconductorのサイトからダウンロードする(2023/01/01時点では
s130nrf51201.zip
)
https://www.nordicsemi.com/Products/Development-software/S130/Download#infotabs - ダウンロードしたzipファイルからhexファイルを探す(
s130nrf51201.zip
の場合はs130_nrf51_2.0.1_softdevice.hex
) - hexファイルをArduinoが参照するディレクトリー以下に配置する
%USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\cores\nRF5\SDK\components\softdevice\s130\hex
- nRF Flash SoftDeviceを押下して,SoftDevice書込みを実施する
C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2-1.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf51.cfg -c init; halt; nrf51 mass_erase; program {{C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0/cores/nRF5/SDK/components/softdevice/s130/hex/s130_nrf51_2.0.1_softdevice.hex}} verify reset; shutdown; Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 2 0x4000 Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD adapter speed: 1000 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED Info : STLINK v2 JTAG v37 API v2 SWIM v26 VID 0x0483 PID 0x374B Info : using stlink api v2 Info : Target voltage: 3.268829 Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints nrf51.cpu: target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x61000000 pc: 0x0001a92e msp: 0x20001178 Info : nRF51822-CFAC(build code: A0) 256kB Flash nrf51.cpu: target state: halted target halted due to debug-request, current mode: Thread xPSR: 0xc1000000 pc: 0xfffffffe msp: 0xfffffffc ** Programming Started ** auto erase enabled Info : Padding image section 0 with 2112 bytes Warn : using fast async flash loader. This is currently supported Warn : only with ST-Link and CMSIS-DAP. If you have issues, add Warn : "set WORKAREASIZE 0" before sourcing nrf51.cfg to disable it nrf51.cpu: target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000001e msp: 0xfffffffc wrote 110592 bytes from file C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0/cores/nRF5/SDK/components/softdevice/s130/hex/s130_nrf51_2.0.1_softdevice.hex in 5.414282s (19.947 KiB/s) ** Programming Finished ** ** Verify Started ** nrf51.cpu: target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0xfffffffc nrf51.cpu: target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0xfffffffc verified 108448 bytes in 0.698503s (151.619 KiB/s) ** Verified OK ** ** Resetting Target ** shutdown command invoked
その他
J-Link化した場合の使い方
J-Link化したST-Link/V2-1でもSoftDeviceの書込みはできる.
J-Link化の実行
- ST-Link/V2-1ドライバーのインストール
- J-Link software packageのインストール
- ST-Link Reflash Utilityのインストール
インストールしたST-Link Reflash Utilityを使用して,以下の手順を実施するとJ-Link化したST-Linkとなる(a
→a
→2
→0
の順でキーボード入力する).なお,ST-Link/V2-1に戻す場合は再度ST-Link Reflash Utilityを使用して,a
→a
→3
→0
とキーボード入力する.
(c) 2016 SEGGER Microcontroller GmbH & Co. KG www.segger.com STLinkReflash compiled Aug 12 2019 10:30:05 The following terms come from SEGGER Microcontroller GmbH & Co. KG ("SEGGER") You must agree to them in order to proceed. ============================================================================= * IMPORTANT * This utility enables You to replace the firmware of an existing ST-LINK on-board with firmware from SEGGER that makes the ST-LINK on-board behave J-Link compatible. You do this replacement at Your own risk. Though extremely unlikely, You are aware that the replacement process may result in an unusable ST-LINK on-board. The utility and firmware from SEGGER are provided on an as-is basis and come without any warranty and without support. You further agree to only use the firmware provided by SEGGER via this utility, within the bounds of the license stated on the download page: https://www.segger.com/jlink-st-link.html Except as expressly set forth in this agreement, the Agreement remains unchanged and continues in full force and effect. ============================================================================= I hereby accept the terms provided by SEGGER. (A)ccept / (D)ecline Selection>a
At the request of STMICROELECTRONICS ("ST"), the below "Amendment to Evaluation Board License Agreement" has been added to this utility. You must agree to this amendment in order to proceed. ============================================================================= * IMPORTANT * When You purchased Your STMICROELECTRONICS ("ST") Evaluation Board, You entered into an Evaluation Board License Agreement ("Agreement") with ST. You may install the SEGGER J-Link software ("J-Link") onto Your ST Evaluation Board only if You agree to this amendment ("Amendment") of the Agreement. STMICROELECTRONICS ("ST") hereby authorizes You to install SEGGER J-Link software ("J-Link") onto Your ST Evaluation Board, as an exception to the terms and conditions of the Agreement. You acknowledge and agree that J-Link is provided solely by SEGGER, and not by ST. You acknowledge and agree that ST does not endorse, recommend, nor provide any assurance or warranty, whether express or implied, in relation to J-Link or its use with Your ST Evaluation Board. You acknowledge and agree that ST shall not be liable for any direct, indirect, special, incidental or consequential damages resulting from Your use of J-Link, even if advised of the possibility thereof. This Amendment shall be governed, construed and enforced in accordance with the laws of Switzerland. Except as expressly set forth in this Amendment, the Agreement remains unchanged and continues in full force and effect. ============================================================================= I hereby accept the amendment to the Evaluation Board License Agreement provided by STMICROELECTRONICS ("ST")(A)ccept / (D)ecline Selection>a
[0] Quit [1] Upgrade to J-Link [2] Update J-Link firmware [3] Restore ST-Link Selection>1 Preparing for FW update (can take up to 10 seconds)...O.K. Identifying ST-LINK variant...O.K.: ST-LINK/V2-1 Performing firmware update...O.K. [0] Quit [1] Upgrade to J-Link [2] Update J-Link firmware [3] Restore ST-Link Selection>0
USBドライバー差替
Zadigというツールを使用して,J-Link化したST-Link/V2-1のドライバーをjlinkからWinUSBに差し替える.
- Zadigを起動して,List All Devicesをクリックしてチェックを入れる
- リストから
jlink
で表示されるものを選択して,Replace Driverを実施する(私の環境ではBULK interface (Interface 2)
がDriverjlink (v2.70.8.0)
と表示された)
ドライバーのインストールが終了すると,デバイスマネージャーでの見え方が以下のように変化する.
なお,もとのJ-Linkドライバーに戻すには,BULK interfaceのドライバーを削除するだけでよい.この操作は,ST-Link/V2-1に戻すときに必要となることに注意.
Arduino IDEからのSoftDevice書込み
大まかにはST-Link/V2-1での書込み時と同一で以下の設定とし,SoftDeviceを書き込む.体感で,ST-Link/V2-1のときよりも1.5倍程度時間がかかる.
項目名 | 今回の設定値 | 初期設定値 | 備考 |
---|---|---|---|
ボード | Generic nRF51 | - | |
Chip | 32kB RAM, 256kB flash (xxac) | 16kB RAM, 256kB flash (xxaa) | データシートよりEYSGJNZWYは32kB |
SoftDevice | S130 | None | 上記モジュール概要表よりEYSGJNZWYはS130対応できる*4 |
Low Frequency | RC Oscillator | Crystal Oscillator | データシートよりEYSGJNZWYは水晶振動子が未実装で内蔵RC発振回路で代替指示 |
ポート | COMm | - | ST-Link/V2-1のときとCOMポート番号が異なる |
Programmer | J-Link | - |
C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/jlink.cfg -c transport select swd; set WORKAREASIZE 0; -f target/nrf51.cfg -c init; halt; nrf51 mass_erase; program {{C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0/cores/nRF5/SDK/components/softdevice/s130/hex/s130_nrf51_2.0.1_softdevice.hex}} verify reset; shutdown; Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 2 0 cortex_m reset_config sysresetreq adapter speed: 1000 kHz Info : No device selected, using first device. Info : J-Link STLink V21 compiled Aug 12 2019 10:29:20 Info : Hardware version: 1.00 Info : VTarget = 3.300 V Info : clock speed 1000 kHz Info : SWD IDCODE 0x0bb11477 Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints nrf51.cpu: target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x61000000 pc: 0x0001a92e msp: 0x20001178 Info : nRF51822-CFAC(build code: A0) 256kB Flash nrf51.cpu: target state: halted target halted due to debug-request, current mode: Thread xPSR: 0xc1000000 pc: 0xfffffffe msp: 0xfffffffc ** Programming Started ** auto erase enabled Info : Padding image section 0 with 2112 bytes Warn : not enough working area available(requested 32) Warn : no working area available, falling back to slow memory writes wrote 110592 bytes from file C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0/cores/nRF5/SDK/components/softdevice/s130/hex/s130_nrf51_2.0.1_softdevice.hex in 26.675529s (4.049 KiB/s) ** Programming Finished ** ** Verify Started ** Warn : not enough working area available(requested 52) Warn : not enough working area available(requested 52) verified 108448 bytes in 2.154908s (49.147 KiB/s) ** Verified OK ** ** Resetting Target ** shutdown command invoked
なお,Zadigでドライバーを差し替えていない場合は,以下のようなメッセージが出て必ず書込みができない.
C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/jlink.cfg -c transport select swd; set WORKAREASIZE 0; -f target/nrf51.cfg -c init; halt; nrf51 mass_erase; program {{C:\Users\so2akt\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0/cores/nRF5/SDK/components/softdevice/s130/hex/s130_nrf51_2.0.1_softdevice.hex}} verify reset; shutdown; Error while flashing SoftDevice. Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 2 0 cortex_m reset_config sysresetreq adapter speed: 1000 kHz jaylink: Failed to open device: LIBUSB_ERROR_NOT_FOUND. Info : No device selected, using first device. Error: No J-Link device found.
UICRレジスターへの書き込み動作
32MHzの水晶振動子を使用する指示は,nRF CUIツールことnRF Command Line Tools 10.18.1を使って,以下のコマンドライン
nrfjprog --snr <your_jlink_debugger_serial_number> --memwr 0x10001008 --val 0xFFFFFF00
を実行することで,直接SoCのアドレスを指定して値を書き込むことができるという方法もデータシートに記載されている.しかしながら,こちらは正規のJ-Linkが必要で,J-Link化したST-Link/V2-1(ST-Link/V2は未確認)ではシリアル番号(上記<your_jlink_debugger_serial_number>
の部分)は確認できるが,以下のエラーメッセージが出て書き込みすることができない.
C:\Users\so2akt>nrfjprog -i 779715930 C:\Users\so2akt>nrfjprog --snr 779715930 --memwr 0x10001008 --val 0xFFFFFF00 [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". Failed to read device memories. [error] [SeggerBackend] - JLinkARM.dll reported "-1", "An unknown error.". [error] [ nRF51] - Failed when checking readback protect status. ERROR: Cannot connect to any nRF device. Please make sure a device is ERROR: connected to the debugger and supplied. NOTE: For additional output, try running again with logging enabled (--log). NOTE: Any generated log error messages will be displayed.
Programmerメニュー追加ではなくST-Link V2の設定を編集して使う
上記の使用手順では,ProgrammerのメニューにST-Link V2-1 (ST-Link On-Board)
としてST-Link/V2-1を追加したが,既存のメニューST-Link V2
でST-Link/V2-1を使うようにすることもできる.ただし,この変更を行うと,このNordic Semiconductor nRF5 Boardsパッケージ内でST-Link/V2は使えなくなることに注意.
$USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5\scripts\interface\stlink-v2.cfg
の8行目を
hla_vid_pid 0x0483 0x3748
から
hla_vid_pid 0x0483 0x374b
に変更する.
Arduino IDE 2.xではSoftDevice書込みができない
2023/01/02現在では,Arduino 1.8.xはLegacy IDEとされている.しかしながら,Arduino IDE 2.xでは,SoftDeviceを書き込むためのメニューnRF Flash SoftDeviceが表示されないため,SoftDevice書込みにはArduino 1.8.xを使用する必要がある.SoftDeviceの書込みができないだけであるため,Arduinoスケッチ作成以降のアプリケーションソフトウェアの作成は,Arduino 2.xでもできる.
連結ソケットとブレッドボード
AE-TYBLE16には,付属の商品添付カードによると,型番2227P-16G-03の連結ソケットではなく,表面実装用の2227MC-16-03-150-F6が推奨されている.しかしながら,前者の2227P-16G-03であれば,前述の結論に掲載した写真のとおり,AE-TYBLE16をハンダ付けせずに使用可能である.
この場合,ひとつ注意点として,先に連結ソケットをブレッドボードに挿してからAE-TYBLE16を連結ソケットに配置することである.順番を逆にすると,連結ソケットの足が開いてしまい,ブレッドーボードに挿さらない.
有効なUSBポート
"AMDチップセット環境であることがのちに効いてくる"としていた内容がこちら.これで累計3時間程度をムダにした.(おそらくB450チップセットの)AMDユーザーは注意が必要.
B450チップセットにおいてUSBホストコントローラーインターフェースには以下の2つがあり,AMD USB3.1 eXtensible Host ControllerのほうにST-Link/V2-1またはJ-Link化したものを接続すると必ず書込みに失敗する.
OK/NG | USBホストコントローラーインターフェース | 備考 |
---|---|---|
OK | USB xHCI Compliant Host Controller | マザーボード上に4ポートしか存在しない |
NG | AMD USB3.1 eXtensible Host Controller | マザーボード上に10ポート存在するが今回の用途では全く使えず,迷惑 |
なお,接続したUSB機器がどのUSBホストコントローラーインターフェースの配下にいるか判断するには,USBView(2022/12/19現在)を使用するとよい(USBView の入手先
の手順に従ってインストールできる).
※自分自身,以前もハマっている……
☞OrionSoft PS1 Memory Card ManagerでPS1メモリーカードを正常に読み書きする - so2akt’s technical diary
改訂履歴
# | 日付 | 内容 |
---|---|---|
1 | 2022/12/29 | ハードウェア(ST-Link/V2-1とAE-TYBLE16の結線)を記載 |
↑ | ↑ | 章 データシート等を作成し,参照したデータシートを掲載 |
↑ | ↑ | 章 連結ソケットとブレッドボードを作成し,ブレッドボードでの開発について記載 |
2 | 2023/01/01 | 章 ハードウェア,ソフトウェアを記載 |
↑ | ↑ | 章 データシート等に,太陽誘電およびNordic Semiconductorのデータシートを追記 |
↑ | ↑ | 章 J-Link化した場合の使い方を記載 |
3 | 2023/01/02 | 章 Programmerメニュー追加ではなくST-Link V2の設定を編集して使うを追記 |
↑ | ↑ | 章 Arduino IDE 2.xではSoftDevice書込みができないを追記 |
4 | 2023/01/03 | 章 結論の使用機材について一部修正 |
↑ | ↑ | 章 目的に関連記事を追記 |
5 | 2023/03/21 | 誤記修正:$USERPROFILE% →%USERPROFILE% |
データシート等
- STMicroelectronics:UM1724 STM32 Nucleo-64 boards (MB1136),第14版,2020/08/20発行)
- STMicroelectronics:MB1136-DEFAULT-C03 Board schematic,第C-03版,2018/11/05発行)
- 秋月電子通商:AE-TYBLE16商品添付カード,2017/10/23発行
- 太陽誘電:TY-BLE EYSGJNAWY-WX BriefDataReport,第1.2版,2017/06/30発行
- 太陽誘電:Wireless Module Bluetooth low energy Module Overview,第1.8版,2018/05/30発行
- 太陽誘電:TY-BLE EYSGJNZ DataReport,第2.0版,2019/02/27発行
- Nordic Semiconductor:nRF51822 Product Specification,第3.4版,2021/04/02発行
- Nordic Semiconductor:Getting started with nRF5 SDK and SES (nRF51 & nRF52 Series),第1.5版,2022/10/26発行
- Nordic Semiconductor:S130 - nordicsemi.com
- Nordic Semiconductor:S110 - nordicsemi.com
- Nordic Semiconductor:S120 - nordicsemi.com
参考サイト
- EYSGCNZWY(nRF51822)をArduinoIDE+Nucleoで開発する ~Serial通信をBluetoothで無線化~ - Qiita
- stm32 - STM32F0, ST-link v2, OpenOCD 0.9.0: open failed - Stack Overflow
- AE-TYBLE16をArduinoとしてBLE通信 - Qiita
- AE-TYBLE16をArduinoとしてLチカ - Qiita
- 秋月電子の BLE モジュール AE-TYBLE16 を Hack - Qiita
- Programming Bluetooth LE with nRF51822 (Arduino IDE + BLE400)
- Development RedBearLab BLE mini with Nucleo F401RE - Nordic Q&A - Nordic DevZone - Nordic DevZone
- Debugging the STM32 Blue Pill board with Visual Studio – VisualGDB Tutorials
- ST LinkV2(互換品)を使ってOpenOCDと評価ボード(STM32F103C8T6)を接続してみる - chakokuのブログ(rev4)
- NucleoのST-LinkをJ-Link化してみる - マイコン工作実験日記
- ST-LINK On-Board
- [ARDUINO]自分のISPを作ろう。 - Qiita
- 加賀FEI:無線モジュールBluetooth EYSGJNZWY
リンク先はすべて2023/01/03現在のもの