Skip to content

UARTを介したリモート外部フラッシュメモリのサポート

wolfBootはUART通信を使用して隣接システムとの外部パーティションをエミュレートできます。 この機能は、更新を外部処理ユニットの支援によって保存できる、非同期マルチプロセスアーキテクチャにおいて特に有用です。

ブートローダーのセットアップ

この機能を有効にするオプションはUART_FLASH=1です。 この構成オプションは外部フラッシュAPIに依存しており、ブートローダーをコンパイルするにはEXT_FLASH=1オプションも必須です。

ターゲットシステムのHALは、シンプルなUARTドライバーを含むように拡張する必要があります。 これはブートローダーがボード上のUARTコントローラの1つを使用してリモートフラッシュの内容にアクセスするために使用されます。

サポートされているいくつかのプラットフォーム用のUARTドライバーの例は、hal/uartディレクトリにあります。

サポートされているターゲット向けのUART HAL拡張機能によって公開されるAPIは、以下の関数で構成しています。

int uart_init(uint32_t bitrate, uint8_t data, char parity, uint8_t stop);
int uart_tx(const uint8_t c);
int uart_rx(uint8_t *c);

あなたのプラットフォームで外部フラッシュメモリサポートを使用したい場合で、まだ公式にサポートされていない場合は、提供された例に基づいてこれら3つの関数を実装することを検討してください。

ホスト側:UARTフラッシュサーバー

ターゲット用の外部パーティションイメージをホストするリモートシステム上では、UARTメッセージの上に簡単なプロトコルを実装して、フラッシュアクセス固有の呼び出しに対応できます。

GNU/Linuxホスト上で実行し、ファイルシステム上のローカルファイルで外部パーティションをエミュレートするように設計された例のuart-flash-serverデーモンは、tools/uart-flash-serverで利用可能です。

外部フラッシュ更新メカニズム

wolfBootは、外部のUPDATEおよびSWAPパーティションを、ローカルSPIフラッシュ上にマッピングされている場合と同じように扱います。 読み取りと書き込み操作は、リモートアプリケーションによって解釈され、ホストのみがアクセス可能な実際のストレージ要素への読み取りと書き込みアクセスを提供できるUART経由のリモートプロシージャコールに単純に変換されます。

これは、更新が成功した後、以前のファームウェアのコピーがリモートパーティションに保存され、他のすべてのユースケースで利用可能なものと全く同じ更新メカニズムを提供することを意味します。 唯一の違いは物理的なストレージ領域へのアクセス方法ですが、より高いレベルでのすべてのメカニズムは同じままです。