UF2メモ書きとAdafruit_nRF52_Bootloaderのビルド
はじめに
最近触ったUF2関係のメモ書きです。(けっこうてきとう)
UF2とは?
USB Flashing Format(UF2)とはMicrosoftが開発したマイコン書き込み用のファイルフォーマットです。Raspberry Pi Picoなどに採用されており、専用のブートローダーとセットで用いることでUSB経由で簡単にマイコンをフラッシュできます。
UF2書き込みのワークフロー
マイコンの物理ボタンなどでDFUモードに入る
-->USB経由でPCに接続
-->マイコンのフラッシュがドライブとして認識される
-->FWをドライブにコピー又はDnDして書き込み
UF2に対応している主要なマイコン
ハードウェアレベルでの対応
Rp2040
TinyUF2 Bootloaderで対応
ESP32 S2/S3,STM32F3,STM32F4
Adafruit nRF52 Bootloaderで対応
nRF52840,nRF52832(?)
UF2データの作成
UF2のデータフォーマットはUF2データブロック+データで構成されており、`.bin`のファイルに専用のヘッダーなどを追加することで作成することが可能です。
変換の方法はいくつかありますが、一番安心感のある方法は公式のuf2conv.pyを用いる事です。
基本の使用
python3 uf2conv.py filename.bin -c"
実際の使用(nRF52840の場合)
python3 uf2conv.py filename.bin -c -b 0x26000 -f 0xADA52840
`-c` フラッシュを行わないで変換(convert)のみ行います
`-f` familyIDを指定する必要がある場合は指定します
(例 nRF52840:`0xADA52840` nRF52832:`0x621E937A`)
`-b` データのオフセットです。nRF52シリーズのSoftDeviceの様に別途プロトコルスタックがある場合は必要になります
(例 S140 v6:`0x26000` S140 v7:`0x27000`)
※hexからuf2に変換することもできますが、binからhexに変換するときにオフセットした場合は不要です
詳しくは↓
uf2conv -- Packing and unpacking UF2 files
Adafruit_nRF52_Bootloaderのビルド
Adafruit_nRF52_BootloaderはnRF52用に作られたUF2対応ブートローダーで、UF2だけでなくOTAやシリアル経由の書き込みなど、さまざま機能がある汎用的なブートローダーです。
リセットボタンのピン番号やボード情報を変更する場合は再ビルドする必要があります。
せっかくなのでWSL環境でのビルド方法のメモ書きを残します。(てきとうです)
必要なもの
・IntelHexをインストールします。
pip install intelhex
ARM GCCをインストールします。
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt install gcc-arm-embedded
※arm-none-eabi-gcc (15:10.3-2021.07-4) 10.3.1 20210621 (release)で動作確認済み
nRF Command Line Toolをインストールします。(gdebiを使います)
nrf-command-line-tools_10.23.0_amd64.debを公式サイトからダウンロードします。
sudo apt install gdebi
sudo gdebi nrf-command-line-tools_10.23.0_amd64.deb
リポジトリをクローンします。(gitをインストールしていない場合はそれも)
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_nRF52_Bootloader
cd Adafruit_nRF52_Bootloader
git submodule update --init
ファイル構成
└── Adafruit_nRF52_Bootloader/
├── src/
│ └── boards/
│ └── boardname/
│ ├── board.h
│ ├── borad.mk
│ └── pinconfig.c
└── _builds/
└── build-boardname/
├── boardname~~~nosd.hex
├── boardname~~~s140~~~.hex
└── update-boardname~~~nosd.uf2
`board.h`を書き換えることでブートローダーの設定を変更します.
ビルド
make BOARD=boardname all
`_build`内にビルド結果が出力されます。出力された`.hex`ファイルをJlinkなどでICに書き込み、指定した方法でDFUモードに入ることでUF2を用いた書き込みが可能です。また、既にuf2のブートローダーが書き込まれている場合は`_build`内の`.uf2`ファイルを用いてブートローダーのアップデートをすることも可能です。
この記事が気に入ったらサポートをしてみませんか?