単純な答えは「はい」です。高い信頼性が必要な場合は、ブートローダーとA / Bコードイメージをサポートするのに十分なフラッシュブロックが必要です。新しいイメージをアクティブ化する前に、すべてを書き込んで確認し、場合によっては再試行できます。
ただし、これは高価で信頼性の高い戦略であり、オーバーヘッドを削減するためにできることがいくつかあります。OTA更新の低レベルのサポートは、デバイスのファームウェアまたはOSの一部としても提供される可能性があるため、学習したくない場合は、独自のローリングを回避できます。この機能はと記述される場合がありFOTA
ます。
コードベースを分割すると、増分更新が可能になります。ブートローダーがフォールバックユーザーコードを必要とせずにネットワーク接続を起動し、コードをダウンロードして検証できるのが最良の場合です。ローカルゲートウェイを使用すると、このタスクの管理を低コストのエンドポイントから委任できます。
多くのデバイスには少量のワード消去フラッシュがあり、これが失敗しても、通常はブロック全体を消去する必要なくビットを設定できます。これらの機能を使用して、ジャンプテーブルを操作し、ブロックサイズのチャンクで更新されるコードをつなぎ合わせることができます。最初に完全なA / Bコードスペースを計画した場合でも、コードベースが大きくなりすぎると、より複雑なスキームにフォールバックする必要がある場合があります。
洗練されたファームウェアオーバーザエアソリューションで実現できる機能を明確にするために、残りのユーザーアプリケーションスペース全体が再フラッシュされる間、ブートローダーと潜在的にプライマリ通信スタックを常駐させることができます。これはオーバーヘッドを必要としません(特にブロック分割がソフトの場合)。通信スタックをアップグレードする必要があるシナリオでは、アプリケーションコードに一般的に使用される領域を、ダウンロードおよび検証中に一時的に使用できます。これを実現するにはSoCでのサポートが必要ですが、これを念頭に置いて設計された第2および第3世代のデバイスはすでに存在しています。