マルツTOP > APPLICATION LAB TOPページ おすすめ技術記事アーカイブス > ファームウェアの実行と更新を同時に行う方法

ファームウェアの実行と更新を同時に行う方法

著者 Bill Giovino 氏
Digi-Keyの北米担当編集者 提供
2020-04-16
マルツ掲載日:2020-07-27


 IoTセンサベースのアプリケーションが急成長する中で、IoTエンドポイントでのマイクロコントローラファームウェアのサイズと複雑さも増大しています。高速で実行するにはこのファームウェアの効率をさらに高める必要があります。これは現場でのフラッシュファームウェア更新が必要になる理由の1つです。

 ただし、現場でファームウェアを確実に更新するには、多くの場合、更新中にファームウェアの実行を停止する必要があります。これには、アーキテクチャ、更新のサイズ、ネットワーク速度に応じて、最短で1分、最長で1時間程度かかることもあります。重要なアプリケーションでは、このような遅延は許容できません。

 この記事では、現場での割り込み駆動型ファームウェアの更新に関する考慮事項と更新中にアプリケーションファームウェアを実行する必要性について説明します。次に、Microchip TechnologyのPIC32MZ2048EFH144T-I/PHマイクロコントローラを紹介します。また、このコントローラを使って、ファームウェアを実行しているときにネットワークを介して更新されたファームウェアを同時に受信する方法を説明します。

ファームウェア更新の重要性

 ファームウェアを更新する4つの主な理由は、コード内のバグの修正、機能の追加と向上、システムセキュリティの調整、ファームウェアのさらなる効率化です。コードの効率性は、特定のタスクやスレッドを実行するのに必要なクロックサイクルの数によって測定されます。タスクを実行するためのクロックサイクルが少なければ少ないほど、コードの効率性はより高くなるため、実行速度が向上し、通常(常にではない)はコードサイズも縮小されます。

 これは、IoTセンサベースのエンドポイントに特に当てはまります。これらのアプリケーションは割り込み駆動型であるため、センサや周辺機器が割り込みを生成する場合は必ず迅速にコンテキストを切り替える必要があります。

 割り込み駆動型IoTアプリケーションの効率性に影響を与える2つの要素は、アーキテクチャの効率性とコードの効率性です。マイクロコントローラのアーキテクチャを現場で変更するのは非現実的ですが、マイクロコントローラのファームウェアを更新して効率性を向上させることは現実的かつ健全な方法です。

 ほとんどの場合、センサベースのファームウェアは割り込み駆動型です。マイクロコントローラのシリアルポートに接続されたインテリジェントセンサは、マイクロコントローラへの割り込みを生成して、通常の実行を停止させることができます。これにより、ファームウェアはその特定センサの割り込みサービスルーチンへ進むことができます。

 これは、送信すべき新しいデータがセンサの読み取りに含まれているかどうかを判断するために定期的にポーリングする必要があるセンサよりも効率的です。割り込み駆動型センサ戦略の利点は、受信すべき有用なデータがある場合にのみ、マイクロコントローラでセンサの読み取りにクロックサイクルが費やされることです。

 ポーリングでは、センサ読み取りが更新されていないがため、ファームウェアからセンサにアクセスして破棄されるデータを読み取る必要があるときにクロックサイクルが浪費されます。

 複数のセンサやタスクがあると、それらを管理するための複数のサブルーチンと割り込みルーチンが必要になるため、コードサイズが大きくなります。複雑なコードは、これらすべての個別タスクを管理するために、何らかの形態のリアルタイムオペレーティングシステム(RTOS)を必要とします。

 RTOSには、ソフトウェアエンジニアが書いたシンプルなファームウェアアプリケーションや既成製品があります。RTOSは、異なるそれぞれのファームウェアタスクを管理して、アプリケーションが適切に動作するために、必要な時間内で個々のタスクが開始し、終了するようにします。

 多くのタスクをRTOSで管理する必要がある場合は、タスクができるだけ少ないクロックサイクル数で終了すると、アプリケーションにとって良い効果が得られます。これにより、異なるタスクが相互に遅延することがなくなります。

 割り込みを受信した場合、割り込みサービスルーチンを完了するのに必要な時間は、主に次の3つの要素の組み合わせです。

(1)割り込みを認識し、割り込みサービスルーチンを開始するために必要なクロックサイクル。そのタスクの優先度が実行中のタスクより低い場合、これは現在のタスクが完成するまで遅延されます。これはアプリケーションに依存します。

(2)現在のCPU状態のコンテキストを保存して、割り込みサービスルーチンに進むために必要なクロックサイクル。これは、アーキテクチャに依存しており、ソフトウェアエンジニアによる管理の範囲外です。

(3)割り込みサービスルーチンを実行するために必要なクロックサイクル。これは、ソフトウェアエンジニアが書いたコードの複雑さと効率性の両方に依存します。

 ファームウェアが効率的であればあるほど、特定期間内に終了する必要のあるタスク間で競合が発生する可能性も低くなります。

フラッシュファームウェア更新のメモリ要件

 現場での確実な更新を必要とするシステムは、アプリケーションに必要と推定されるフラッシュプログラムメモリの2倍のサイズを必要とします。これは、フラッシュメモリに、既存のフラッシュファームウェアと更新済みファームウェアの両方を保存するための十分な容量が必要だからです。

 しかし、内部フラッシュプログラムメモリからのみ実行する小型システムでは、ファームウェア更新がネットワークを介して受信される間、コード実行を停止するのが一般的です。これは、ミッションクリティカルなアプリケーションでは許容できない場合があり、効率的なファームウェアという目標にも反します(つまり、停止されたコードが0%の効率で実行されていることになります)。

フラッシュの更新中にファームウェアを実行する

 オンチップフラッシュメモリの更新中にファームウェアを実行できる高性能マイクロコントローラとは、Microchip TechnologyのPIC32MZ2048EFH144T-I/PHマイクロコントローラのことです(図1)。

 PIC32MZ2048EFH144T-I/PHは、複雑な割り込み駆動型IoTエンドポイントを対象とした浮動小数点ユニット(FPU)付きのMIPS32 M-Classコアアーキテクチャを基にしています。このマイクロコントローラには、2 Mバイトのプログラムメモリフラッシュと512 KバイトのSRAMが内蔵されています。

 また、160Kバイトのブートフラッシュも備えています。PIC32MZ2048EFH144T-I/PHコアは、-40℃~+85℃の温度範囲では252MHzの速さ、-40℃~+125℃の温度範囲では180MHzの速さで実行できます。動作電圧は、低電圧の2.1V~3.6Vです。

 このマイクロコントローラには、複雑なファームウェアとともに外部信号測定をサポートする9つの32ビットキャプチャ/コンペアタイマがあります。


図1:252 MHz Microchip Technology PIC32MZ2048EFH144T-I/PHは、MIPS32 M-Classアーキテクチャに基づいており、外部センサとやり取りするための広範なシリアルポートを備えています。(画像提供:Microchip Technology)

 外部シリアルポートには、9つのUARTと5つのI2Cポートが含まれます。オーディオI2Sインターフェースもサポートする6つのSPIポートがあります。48個の入力を備えた12ビットA/Dコンバータ(ADC)は、高精度アナログセンサからの電圧を測定できます。

 PIC32MZ2048EFH144T-I/PHは、これらの多様なシリアルポートとADC入力を使用して多くの外部センサとやり取りできるため、複雑なセンサベースのIoTエンドポイントに適しています。2つのCAN 2.0bポートにより、このマイクロコントローラは一般的なCANプロトコルを使用する産業用や車載用ネットワークと接続できます。

 Ethernetポートは、10/100Base-Tネットワーキングをサポートします。USB 2.0 Hi-Speedコントローラは、追加の周辺機器またはデバッギング用の外部インターフェースをサポートし、USB On-The-Go(OTG)もサポートします。

 これらの各周辺機器は、1つ以上の割り込みを生成できます。センサや割り込みソースの数が非常に多い場合は、コードの効率性を維持することが必須になります。

 効率性を向上させるため、MIPS32 M-Class CPUコアは32個の32ビット汎用レジスタ(GPR)を備えています。これにより、外部メモリへのアクセスが削減され効率性が向上します。

 通常のビットセットとclear命令に加えて、M-Classはシングルサイクルビットのinvert命令もサポートします。これは、セマフォ処理の効率性を高めることにより、RTOSの効率性を向上させます。このコアには、メモリアクセスの競合を最小化することにより効率性を向上させる5段階の命令パイプラインがあるため、シングルサイクル命令が増加します。

 MIPS32 M-Classには、7つのGPRシャドウレジスタセットもあります。これは、スタック上のGPRを保存するのに必要な多くのクロックサイクルを解消することにより、割り込み性能とコンテキストスイッチを大幅に向上させます。

 クロックサイクルを費やしてスタック上でGPRを保存する必要が生じる前に、コアは7つのシャドウレジスタセットを使用して、割り込みおよびコンテキストスイッチを7重ネストできます。

 PIC32MZ2048EFH144T-I/PHには、それぞれにPFM Bank 1とPFM Bank 2という名前が付いている1Mバイトのプログラムフラッシュメモリ(PFM)バンクが2個あります。各PFMには、BFM Bank 1とBFM Bank 2という名前の独自の専用ブートフラッシュメモリ(BFM)があります。PFM更新時にBFMを更新する必要はありません。

 これらの2つの異なるメモリバンクがあると、複数の利点が得られます。たとえば、このマイクロコントローラはデュアルブートをサポートしているため、起動時にどちらのフラッシュメモリバンクからでもブートするように構成できます。これにより、マイクロコントローラは2つの異なるデバイス構成をサポートできます。

 2つのフラッシュバンクは、一方のフラッシュバンクからファームウェアを実行すると同時に他方のフラッシュバンクでファームウェアを更新できるというさらなる利点ももたらします。Microchipは、これをLive-Updateまたはランタイムセルフプログラミング(RTSP)と呼んでいます。

 PFM Bank 1からファームウェアを実行するアクティブなIoTエンドポイントでRTSPが開始されると、ファームウェアはネットワークを介してブロック単位で受信されます。ネットワークを介してファームウェア更新を管理する方法として推奨されるのは、新しいファームウェアのブロックをSRAMに保存することです。

 完全なブロックの受信後に、PFM Bank 1から実行するファームウェアは、PFM Bank 2に対してSRAMデータのプログラミングシーケンスを開始できます。このファームウェアのプログラミング中は、PFM Bank 1からのファームウェア実行を継続できます。

 ブロックプログラミングが完了すると、ファームウェアはネットワークを介してコードの次のブロックを要求でき、同じシーケンスが繰り返されます。これは、PFM Bank 2のコードのブロックが完了するまで続行されます。

 プログラミングが完了すると、ファームウェアはBFM Bank 2からブートするための次のリセットでPIC32MZ2048EFH144T-I/PHを構成し、NVMCON構成レジスタのSWAPビットをクリアすることにより、PFM Bank 2で新しいファームウェアを実行できます(図2)。

 SWAP=0でPIC32MZ2048EFH144T-I/PHファームウェアを再度更新する必要がある場合、ファームウェアはPFM Bank 2から実行しつつ、同時にPFM Bank 1を更新できます。


図2:PIC32MZ2048EFH144T-I/PHマイクロコントローラには、PFMの2つの独立したバンクがあります。SWAP=1の場合、PFM Bank 2の更新中に、ファームウェアはPFM Bank 1から実行できます。SWAP=0をクリアすることにより、マイクロコントローラはPFM Bank 2からブートできます。(画像提供:Microchip Technology)

 SWAPビットのステータスは、ファームウェアのニーズに応じて、BFMまたはPFMのどちらからでも変更できます。

デュアルブートファームウェアの開発

 Microchip Technologyは、PIC32MZ2048EFH144T-I/PHマイクロコントローラを使用した開発用に、DM320007 PIC32MZスターターキットを提供しています(図3)。このボードは、専用コネクタとヘッダコネクタを使用する複数のシリアルポートをサポートします。USB Hostポートはデバッグ用に使用され、USB OTGポートはアプリケーション用に使用できます。

 USB-to-UART/I2CコネクタをPC USBポートに接続すると、接続されたホストPC上で仮想COMポートが作成されます。これにより、ホストPCはPIC32MZ上のI2Cポートと通信できるようになります。


図3:Microchip TechnologyのDM320007小型スターターキットは、PIC32MZ2048EFH144T-I/PHマイクロコントローラを使用するUSBとEthernetアプリケーションの開発とテストをサポートします。これには、USB OTG、USB Host、10/100 Ethernet、UART/I2C用のコネクタが含まれます。(画像提供:Microchip Technology)

 40ピンの拡張ヘッダコネクタにより、PIC32MZ EF上の汎用I/O(GPIO)ピンだけでなく、さらにI2C、SPI、UARTポートにアクセスできるようになります。また、ファームウェアによって構成できる3個の押ボタンと3個のLEDがあります。

まとめ

 重要なシステムのIoTセンサエンドポイントではコードがより複雑になるため、高度なメモリ要件が求められます。コードが複雑になればなるほど、ファームウェアでのコンテキストスイッチの応答時間を改善するために、ファームウェアの効率性を高めることがより必要になります。

 ファームウェアの取得と更新を同時に実行可能な割り込み駆動型のコードを効率的に実行できるマイクロコントローラを選択することにより、開発者は性能を損なわずに重要なIoTアプリケーションの信頼性を向上させることができます。



免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、Digi-Key Electronicsの意見、信念および視点またはDigi-Key Electronicsの公式な方針を必ずしも反映するものではありません。



 

このページのコンテンツはDigi-Key社より提供されています。
英文でのオリジナルのコンテンツはDigi-Keyサイトでご確認いただけます。
   


Digi-Key社の全製品は 1個からマルツオンラインで購入できます

※製品カテゴリー総一覧はこちら



ODM、OEM、EMSで定期購入や量産をご検討のお客様へ【価格交渉OK】

毎月一定額をご購入予定のお客様や量産部品としてご検討されているお客様には、マルツ特別価格にてDigi-Key社製品を供給いたします。
条件に応じて、マルツオンライン表示価格よりもお安い価格をご提示できる場合がございます。
是非一度、マルツエレックにお見積もりをご用命ください。


ページトップへ