2026年9月14日月曜日

feather-nrf52832のブートローダーをstlink2とopenocdで書き込む


背景

feather-nrf52832とはadafruitが作った開発ボードです。
技適マークが付いたMTBT42が載っており、それにはBLE通信可能なnrf52832が内蔵されています。

featherはadafruitが開発したブートローダーを搭載しているためUSB経由でプログラムをアップロード可能になっていますが、n-ableなど他の仕組みを使いたい場合はjtagなどを通してブートローダーの更新が必要です。
調べたところstm32用のプログラム書き込み装置であるstlink2がnrf52系のプログラム書き込みにも使えると分かったので、それでの書き込み方法を把握しました。
備忘録として実施内容を記事に残します。

使ったもの

  • feather-nrf52832
    今回プログラムを書き込む対象です。
    スイッチサイエンスで購入しました。
    Adafruit Feather nRF52 Bluefruit LE
  • ブレッドボード
    信号線を仲介させます。
  • 耐熱電線
    パッドの信号線を引き出します。
  • はんだごて
    基板のパッドに電線をはんだ付けします。
  • stlink2
    stlink3系はstm32以外のマイコン非対応になったらしいので、stlink2が要るようです。
    自分はaliexpressで購入したコピー品を利用しました。
    amazonで売られているコピー品でも動くと思います。
    stlink2 - amazon
  • ジャンパワイヤ
    stlinkとブレッドボードを繋ぎます。
  • PC
    stlink2を繋いでプログラムの書き込みを行います。
    ubuntu24.04が載ったPCを利用しました。

ブートローダー書き込み用の線を引き出してstlink2に接続

feather-nrf52832のブートローダー書き込みピンはピンヘッダには引き出されておらず、基板の裏か表のパッドから引き出す必要があります。

feather-nrf52系の資料ページ回路図で表面のパットの各ピンの役割を把握しました。


SWDIOとSWCLKに電線をはんだ付けして引き出しました。
図の赤線がSWDIO、白線がSWCLKです。


SWDIO、SWCLK、GND、3.3Vをstlink2に繋ぎました。
featherにUSB給電する場合は3.3V接続は無くても良いです。


stlinkを利用した書き込みの配線は準備完了です。

openocdをインストール

jtagを利用するためのオープンソースのプログラムopenocdをインストールします。

ubuntu OSの場合はaptコマンドでインストールできます。
sudo apt install openocd

ブートローダーをダウンロード

featherのブートローダーはgithubで公開されており、ntf52832向けは下記の場所にあります。
https://github.com/adafruit/Adafruit_nRF52_Arduino/tree/master/bootloader/feather_nrf52832

記事を書いている時点で最新のhexファイルfeather_nrf52832_bootloader-0.9.1_s132_6.1.1.hexをダウンロードしました。

openocdで書き込み

stlinkをPCに接続し、インストールしたopenocdでダウンロードしたファームウェアを下記のコマンドで書き込めます。
openocd \
-f interface/stlink.cfg \
-f target/nrf52.cfg \
-c init \
-c "reset init" \
-c halt -c \
"nrf5 mass_erase" \
-c "program feather_nrf52832_bootloader-0.9.1_s132_6.1.1.hex verify" \
-c "reset run" \
-c exit

コマンド実行画面でprograming fnishedと表示され、featherの赤いLEDが初期プログラムのぼんやり赤いLEDが光る動作になっていれば書き込み成功です。



参考: OpenOCD flashing nrf52840 (supermini) via st-link v2 issue

余談: adafruit公式の書き込み手順はnrfjprog推奨

adafruit公式のブートローダー書き込み手順ではntfjprogを利用するコマンドが紹介されています。
しかしながら、自分のubuntuでは「JLinkARM.dll reported error」が解消できなかったのでopenocdを使いました。
x86用をインストールしたのにARM関係のファイルを呼ぼうとしているのが解せません。

おわり

stlinkとopenocdを利用してnrf52832にプログラム featherのブートローダーを書き込めました。
これによりfetherを利用して他のプラットフォーム n-ableなどのプログラムを試したり、fetherの元の仕様に戻したりが可能になりました。

参考

feather-nrf52832
OpenOCD flashing nrf52840 (supermini) via st-link v2 issue

0 件のコメント :