nRF Connect for VSCodeのインストール
SDKのインストール
プロジェクトの雛形を作成
Lチカの準備:プログラム作成
デバイスツリーの追記
/ {aliases {// プログラムからled0という名前で呼び出せるようにする。led0 = &my_led;};leds {compatible = "gpio-leds";my_led: led_0 {// HY0020でLEDを接続するピン番号を指定gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;label = "User LED";};};};
Kconfig(pro.conf)の記載
Zephyrは必要な機能だけを有効化してメモリを節約するOSです。GPIO(ピンの入出力)機能を使うためのスイッチをオンにします。
プロジェクト直下にあるprj.confを開きます。
以下の1行を追記して保存します。
CONFIG_GPIO=y
main.cの記載
いよいよC言語でプログラムを書きます。Zephyrの最新の書き方(Devicetreeと連携した安全なGPIO操作)で実装します。
src/main.cを開き、中身をすべて以下のコードに書き換えます。
#include <zephyr/kernel.h>#include <zephyr/drivers/gpio.h>/* DTS aliases で定義した led0 を取得*/#define LED0_NODE DT_ALIAS(led0)/* ピンの情報を構造体として取得(ビルド時に紐づけられる)*/static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);int main(void){/* 1. デバイス(GPIOコントローラ)の準備ができているか確認 */if (!gpio_is_ready_dt(&led)) {return 0;}/* 2. ピンを出力モードに設定 */if(gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE) < 0) {return 0;}/* 3. 無限ループで点滅(Lチカ) */while(1){gpio_pin_toggle_dt(&led); /* ピンの状態を反転 */k_msleep(1000); /* 1000ms待機 */}return 0;}プロジェクトのビルド
nRF Connectの「APPLICATIONS」パネルから Add Build Configuration をクリックします
Board の選択欄で、作成したhy0020(Custom boardsカテゴリ)を選択します
Build Configuration ボタンを押してビルドを実行します
ターミナルにエラーが出ず、[100%] Built target zephyr_final などと表示されれば成功です。
書き込みとデバッグ
VSCodeのCortex-DebugというExtensionを使って書き込み・デバッグをしてみます。上記でビルドしたアプリケーションを開いておきます。Cortex-Debugのインストール
Cortex-Debugがインストールされていなければインストールしましょう。VSCodeのExtensionから、Cortex-Debugをインストールします。launch.jsonの作成
プロジェクトにデバッグ設定ファイルを作成します。VS Codeの左側のアクティビティバーから 「実行とデバッグ(Run and Debug / 再生マークと虫のアイコン)」 を開きます
「launch.json ファイルを作成します」というリンクをクリックし、環境としてCortex Debug を選択します
生成された .vscode/launch.json の中身を、以下の内容にすべて書き換えて保存します
実行ファイルのパスは適宜指定してください。
{"version": "0.2.0","configurations": [{"name": "Debug nRF52 (Pico Probe)","type": "cortex-debug","request": "launch",/* VS CodeにOpenOCDの起動と管理を任せる */"servertype": "openocd","cwd": "${workspaceFolder}","executable": "${workspaceFolder}/build/${workspaceFolderBasename}/zephyr/zephyr.elf",/* Homebrew版のOpenOCDと、Nordic版のGDBを組み合わせる */"serverpath": "/opt/homebrew/bin/openocd","gdbPath": "/opt/nordic/ncs/toolchains/185bb0e3b6/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb","searchDir": ["/opt/homebrew/share/openocd/scripts"],"configFiles": ["${workspaceFolder}/openocd.cfg"],"runToEntryPoint": "main","showDevDebugOutput": "none"}]}openocdの設定
プロジェクトのルートディレクトリ(Zephyr_blinky)フォルダの直下、CMakeLists.txt などと同じ場所)に、新しくopenocd.cfgという名前のファイルを作成し、以下の内容を入力して保存します。
# 1. デバッガのインターフェースを指定 (Pico Probe)source [find interface/cmsis-dap.cfg]# 2. 通信方式をSWDに指定transport select swd# 3. 通信速度を指定adapter speed 4000# 4. ターゲットチップを指定 (nRF52)source [find target/nrf52.cfg]書き込み・デバッグ
VS Code左側の「実行とデバッグ」タブを開きます。
画面左上のドロップダウンに Debug nRF52 (Pico Probe) が選択されていることを確認します
その横の 緑色の再生ボタン(Start Debugging) をクリックするか、キーボードのF5キーを押します
これだけで、以下の処理が自動で行われます
Cortex-DebugがOpenOCDを起動し、Pico Probeに接続
Zephyr.elf をHY0020のFlashメモリに自動書き込み(Flash)
プログラムをリセットして実行を開始
C言語の main() 関数の最初の行で自動的に一時停止(ブレーク)
あとはVS Code上部のデバッグツールバーを使って、ステップ実行(F10/F11)や変数の確認など、モダンなC言語デバッグがフル機能で利用できます。
Tips
デバッグを開始した時、ブレークポイントを設定したにも関わらず止まってくれないことがあります。そんな時はprj.confに以下を追記します。CONFIG_DEBUG_OPTIMIZATIONS=yこれで実際のコードの場所で止まってくれます。

















