DAPLink ブートローダのアップデート

これは、Mbed Advent Calendar 2017の9日目の記事です。Blogに投稿された「DAPLink bootloader update」の内容が役に立つと思われるので、日本語に翻訳してみました。


Arm Mbed DAPLinkは、Arm Cortex CPU上で動作するアプリケーションソフトウェアのプログラミングとデバッグを可能にするオープンソースのソフトウェアプロジェクトです。一般的にインターフェイスファームウェアと呼ばれるDAPLinkは、アプリケーションMCUのSWDまたはJTAGポートに接続されたセカンダリMCUで動作します。この構成は、ほぼすべての開発ボードはこの構成になっています。開発用ターゲットMCUとCPUデバッグアクセスポートの間にブリッジを作成します。 DAPLinkを使用すると、ドラッグアンドドロッププログラミング、シリアルポート、CMSIS-DAPベースのデバッグが可能になります。

長期にわたり、DAPLinkは広く採用され、マイクロコントローラ開発ボードに組み込まれています。私たちは、DAPLinkをカーネルからUSBスタックや仮想ファイルシステムの実装に多く改良しました。これには、マスストレージクラスのデータ転送で予期しないSCSIコマンドシーケンスによってMCUが壊れるのを防ぐために、ブートローダーの強力な保護が含まれます。これによって、DAPLinkインタフェースファームウェアが動作する開発ボードや、DAPLink対応MCU回路を持つすべての開発ボードでこれらがアップデートできるようになりました。

DAPLink アップデートと Windows

DAPLinkチームは、インターフェイスファームウェアを更新する際に、Windows 10上でMbed Enabledボードの不具合発生に関するフォーラムで報告された問題を調査していましたが、古いブートローダバージョン(DAPLinkプロジェクトよりも古いバージョン)のボードに破損の脆弱性があることを発見しました。この現象は、USBを介してコンピュータに接続されている場合、大容量記憶ドライブとしてマウントされていない、または「brickingー文鎮化」とレポートされていました。この問題は、2つの異なる方法で現れます(どちらのケースにおいても、ボードは応答しないように見えます)。

  1. あるケースでは、古いブートローダが間違ったデータをROMのインタフェースアプリケーション領域にプログラムして、それを破壊します。これにより、起動時にデバッグインタフェースアプリケーションがクラッシュする。 これが文鎮化した状態です。デバッグインタフェースのファームウェアを再度更新することでボードを回復できます。
  2. 2番目のケースでは、古いブートローダがアプリケーション領域ではなくROMのブートローダ領域にデータをプログラムします。これによりブート時にブートローダがクラッシュします。 これが文鎮化した状態です。外部デバッグプローブを使って新しいブートローダをフラッシュすることによってのみボードを回復できます。

これはどのオペレーティングシステムでも発生する可能性がありますが、ストレージサービスが実行されている場合にのみWindows 8とWindows 10で発生することが確認されています。デバイスが破損状態または文鎮化した状態の場合、このガイドは安全にボードを更新するのに役立ちます。 DAPLinkブートローダの改善と修正を利用するために、すべての開発ボードを更新することをお勧めします。

つまり、壊れた状態や文鎮化した状態の影響を受けやすい特定のバージョンを絞り込んでいます。具体的には、DAPLinkブートローダのバージョン1000です。

ボードをアップデートする方法

このフローチャートを使用すると、ボードが破損しているかどうかを判断できます。壊れた状態のボードや最新版のDAPLinkブートローダで更新したいボードの場合、ファイルと手順はこのブログで提供されています。あなたのボードが文鎮化の状態にあると判断した場合は、ブートローダーを回復する方法についての説明がある2番目のブログを公開しました。更新手順と対応するファイルを使用し、それらを混在させないでください。

Flowchart used to determine necessary update steps.

DAPLink ブートローダのアップデート

DAPLinkブートローダのアップデートイメージは、以下の表からダウンロードできます。これらはボードが元々同梱されていたアプリケーションオフセットアドレス(20kまたは32k)と同じであるため、既存のDAPLinkインターフェイスファームウェアまたはサードパーティ製インターフェイスファームウェアと互換性があります。現在リストされているものよりも多くの互換性のあるボードがあります。ブートローダを更新したいボードの情報がここにない場合は、このブログ記事の最後の部分に質問をしたり、ディスカッションを開始してください。

Step 1. アップデートされた DAPLink ブートローダイメージのダウンロード

特定のボードのブートローダーイメージをダウンロードするには、下の表の対応するリンクをクリックします。

BoardDAPLink bootloader image
FRDM-K64F
FRDM-KL82Z
RedBearLab-nRF51822 v1.0
RedBearLab-BLE-Nano v1.0
0244_k20dx_bootloader_update_0x5000.bin
FRDM-K22F
FRDM-K28F
FRDM-K82F
FRDM-KW24D
FRDM-KL28Z
TWR-KL28Z
FRDM-KE15Z
TWR-KE18F
HVP-KE18F
MTS-xDot-L151CC
0244_k20dx_bootloader_update_0x8000.bin
Nordic-nRF51-DK
Nordic-nRF52-DK
Nordic-nRF51-Dongle
Nordic-nRF51822
0244_sam3u2c_bootloader_update_0x5000.bin
Step 2. ストレージサービスの無効化

Windows 8およびWindows 10のコンピュータでのみ、データ転送の順序が入れ替わる可能性のある状態を防ぐために、ストレージサービスを無効にする必要があります。 Windowsロゴキーを押したままにして、Rキーを押します。これにより、Windowsの Run プロンプトが開きます。Run プロンプトが表示されたら、services.mscと入力して OK ボタンをクリックします。

Open up the services application.

サービスアプリケーションが開いたら、リストから Storage Service という項目をダブルクリックします。

Look for the setting named Storage Service.

ストレージサービスのプロパティが開きました。 Stop をクリックします。

Storage Service settings with the Stop button highlighted.

Step 3: ブートローダーの更新

ボードのリセットボタンを押しながら、デバッグUSBポートを使用してコンピュータに接続します。デバイスは、ブートローダモードでマウントされます。ドライブ名またはマウントポイントは異なる場合がありますので、必要に応じてBOOTLOADERの部分を読み替えてください。

  • Windows - このデバイスのルートディレクトリを開き、Step 1でダウンロードしたブートローダイメージをこのディレクトリにドラッグアンドドロップします。
  • Mac OSX - sudo mount -u -w -o sync /Volumes/BOOTLOADER ; cp -X <path to interface firmware file> /Volumes/BOOTLOADER/
  • Linux - cp <path to interface firmware file> <BOOTLOADER> && sync

ファイルのコピー操作が完了したら、(リセットボタンを押さずに)ボードをコンピュータに通常どおりに接続し直します。デバイスには更新されたブートローダがインストールされ、MAINTENANCEという名前のドライブがマウントされます。

Step 4: ストレージサービスの有効化

Windows 8またはWindows 10のコンピュータでアップデートを実行した場合は、Step 2に記載されている手順と同じ手順でストレージサービスを再度オンにしますが、今回は Stop の代わりに Start ボタンをクリックします。

Step 5: インタフェースファームウェアのインストール

これで、インターフェイスファームウェアのバージョンをインストールできるようになりましたが、最新のDAPLinkインターフェイスファームウェアを入手することをお勧めします。インタフェースファームウェアのアップデートセクションにボード名を入力すると最新のファームウェアを入手できます 。次に、MAINTENANCEとしてマウントされたデバイスのルートディレクトリを開き、ファームウェアをこのディレクトリにドラッグアンドドロップします。ファイルのコピー操作が完了すると、ボードはアンマウントされ、DAPLINKまたはボードの名前として再マウントされ、更新が完了します。


最後に

これでボードが更新され、正常に動作しているはずです。デバイスがMAINTENANCEまたはDAPLINKとしてマウントされている場合は、DETAILS.TXTを参照してDAPLinkブートローダまたはインタフェースファームウェアのバージョンを確認することが出来ます。


Please log in to post comments.