LoginSignup
3

More than 3 years have passed since last update.

ST NucleoボードのST-LinkチップにDAPLinkファームウェアを書き込んでみた

Last updated at Posted at 2019-05-14

STマイクロ製のNucleoボードのST-LinkをDAPLinkファームウェアに書き換えることができたので、作業手順を記載します。

注意

一度ファームウェアをDAPLinkに書き換えてしまうと、以後はST-Linkに戻すことはできません(STマイクロ社から提供されている書き換えツールから認識されなくなるため)。書き換えは十分に注意して行ってください。

今回使用した機材

  • NUCLEO-L476RG
  • ULINK-ME(MDK-ARMが対応しているデバッグアダプタであれば他の物でも可)
  • Keil MDK v5.27.1(MDK-Essentialライセンス以上)

事前準備

NucleoボードのST-Linkデバッガのファームウェアを書き換えるために、STM32F103CB(ST-Linkのチップ)とデバッグアダプタを接続します。

  • ボード上にST-LINKと記載されたショートピン2本を外します。
  • ボード裏面のSB10, SB6のパッドに配線を接続します。
パッド 信号名
SB6 SWCLK
SB10 SWDIO

上記SWCLKとSWDIOをULINK-MEのJTAG-20ピンコネクタに接続します。また、ボード上のCN11またはCN12からGNDを引き出して接続します。

JTAG 20ピンコネクタの信号は以下のようになっていますので、参考にしてください。

これで、ハードウェアの事前準備は完了です。

DAPLinkファームウェアのビルドと書き込み

GitHubのDAPLinkリポジトリから最新のリリースをcloneします。

> git clone -b v0253 https://github.com/ARMmbed/DAPLink
> cd DAPLink
> pip install -r requirements.txt
> progen generate -t uvision

これで、uvision用のプロジェクトが DAPLink\projectfiles\uvision 配下に生成されます。

DAPLink bootloader のビルドと書き込み

以下のプロジェクトファイルをダブルクリックして開きます。

DAPLink\projectfiles\uvision\stm32f103xb_bl

開いたときにエラーが出るので、Migrate to Device Pack を選択します(必要に応じて、Device Packのインストールが始まります)。

プロジェクトが開いたら、Build ボタンを押してビルドを行います。エラーなどは特に出ないはずです。

Build started: Project: stm32f103xb_bl
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'stm32f103xb_bl'
Before Build - User command #1: ..\..\..\tools\pre_build_script.bat
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl>python ..\..\..\tools\pre_build_script.py
#> Pre-build script start
#> Getting git SHA
#> Checking for local changes
#> Keeping git version file since it didn't need to change
#> Pre-build script completed written ..\..\..\source\daplink\version_git.h
compiling stm32f103xb_bl.c...

(中略)

compiling settings.c...
linking...
Program Size: Code=30270 RO-data=3962 RW-data=516 ZI-data=10868  
After Build - User command #1: ..\..\..\tools\post_build_script.bat C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl C:\Keil_v5\ARM
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl>fromelf --bin C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl.axf -o C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl.bin
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl>fromelf --i32 C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl.axf -o C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl.hex
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl>python ..\..\..\tools\post_compute_crc.py C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl.hex C:\work\DAPLink\projectfiles\uvision\stm32f103xb_bl\build\stm32f103xb_bl_crc
Start 0x8000000, Length 0xbc00, CRC32 0x90af67aa
".\build\stm32f103xb_bl.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:19

ビルドが完了したので、STM32F103CBのフラッシュメモリに書き込みます。
メニューから [Project] - [Options for target 'stm32f103xb_bl'...] を選択します。

Debugタブから接続するデバッグアダプター(ULINK-ME)を指定します。Settingsボタンを押して、有効なデバイスが接続されているか確認します。

Flash Downloadタブを選択し、Addボタンを押します。STM32F10x Flash Options を追加し、OKボタンを押して設定ダイアログを閉じます。

メニュー [Flash] - [Erase] を押して、フラッシュメモリを全消去します。
そのあとに、メニュー [Flash] - [Download] を押して、ブートローダーを書き込みます。

DAPLink interfaceファームウェアのビルドと書き込み

ブートローダに続いて、DAPLink interfaceファームウェアを書き込みます。
以下のプロジェクトファイルをダブルクリックして開きます(今回は、Nucleo L476RGを使用しましたが、他にも対応しているターゲットがあります)。

DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if

開いたときにエラーが出るので、Migrate to Device Pack を選択します(必要に応じて、Device Packのインストールが始まります)。

プロジェクトが開いたら、Build ボタンを押してビルドを行います。エラーなどは特に出ないはずです。

Build started: Project: stm32f103xb_stm32l476rg_if
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'stm32f103xb_stm32l476rg_if'
Before Build - User command #1: ..\..\..\tools\pre_build_script.bat
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if>python ..\..\..\tools\pre_build_script.py
#> Pre-build script start
#> Getting git SHA
#> Checking for local changes
#> Keeping git version file since it didn't need to change
#> Pre-build script completed written ..\..\..\source\daplink\version_git.h
compiling stm32l476rg.c...

(中略)

compiling usbd_STM32F103.c...
linking...
Program Size: Code=45682 RO-data=5026 RW-data=748 ZI-data=11464  
After Build - User command #1: ..\..\..\tools\post_build_script.bat C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if C:\Keil_v5\ARM
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if>fromelf --bin C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if.axf -o C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if.bin
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if>fromelf --i32 C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if.axf -o C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if.hex
C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if>python ..\..\..\tools\post_compute_crc.py C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if.hex C:\work\DAPLink\projectfiles\uvision\stm32f103xb_stm32l476rg_if\build\stm32f103xb_stm32l476rg_if_crc
Start 0x800c000, Length 0x13c00, CRC32 0x4aa8eb79
".\build\stm32f103xb_stm32l476rg_if.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:25

ビルドが完了したので、STM32F103CBのフラッシュメモリに書き込みます。
メニューから [Project] - [Options for target 'stm32f103xb_stm32l476rg_if'...] を選択します。

Debugタブから接続するデバッグアダプター(ULINK-ME)を指定します。Settingsボタンを押して、有効なデバイスが接続されているか確認します。

メニュー [Flash] - [Download] を押して、インタフェースファームウェアを書き込みます(ここでは、Eraseは選択しないでください)。

書き込み後、ULINK-MEをNucleoボードから取り外し、ショートピン2本を元の位置に戻します。NucleoのUSBケーブルを一度ホストPCから取り外し、再度接続するとDAPLinkとして認識されます。

PS C:\work\daplink> mbed detect
[mbed] Auto-installing missing Python modules...

[mbed] Detected NUCLEO_L476RG, port COM17, mounted D:, interface version 0253:
[mbed] Supported toolchains for NUCLEO_L476RG
| Target        | mbed OS 2 | mbed OS 5 |    uARM   |    IAR    |    ARM    |  GCC_ARM  |
|---------------|-----------|-----------|-----------|-----------|-----------|-----------|
| NUCLEO_L476RG | Supported | Supported | Supported | Supported | Supported | Supported |
Supported targets: 1
Supported toolchains: 4
PS C:\work\daplink> mbedls
| platform_name | platform_name_unique | mount_point | serial_port | target_id                                        | daplink_version |
|---------------|----------------------|-------------|-------------|--------------------------------------------------|-----------------|
| NUCLEO_L476RG | NUCLEO_L476RG[0]     | D:          | COM17       | 07650000066fff545253675187134109a5a5a5a597969908 | 0253            |
PS C:\work\daplink>

以上です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3