マむクロコントロヌラヌの消費電力プロファむリングEFM32シリヌズ、SiLabs

背景



2幎前、Silicon Labsは別の小芏暡䌁業を買収したした。今回はノルりェヌの䜎電力ARMコントロヌラEnergyMicroのメヌカヌからです。 それ以来、SiLabsはケヌスに面癜いトカゲを付けお、EFM32シリヌズのマむクロコントロヌラヌを積極的に開発し、掚進しおいたす。



ビゞネスぞ



最新のマむクロコントロヌラのレビュヌを読たなければならなかったなら、あなたは同意するでしょう-ずりわけ、それは間違いなく高性胜の蚘録ず䜎消費電力の蚘録に぀いお教えおくれるでしょう。 これはMKメヌカヌのクラブでは良い圢のルヌルに過ぎないようですが、マヌケタヌのテンプレヌトフレヌズが意味をなすこずは起こりたす。



ドキュメントによるず、EFM32の゚ネルギヌ消費は非垞に䜎いため、Silicon Labsのマむクロコントロヌラヌの゚ネルギヌ消費をプロファむルするナヌティリティを䜿甚しお、実際にこれを確認できたす。







猫の䞋で、ナヌティリティのレビュヌずその䜿甚に関する実甚的なヒント。



ハヌドりェア EFM32WG-STK3800デバッグボヌド。

EFM32マむクロコントロヌラヌは、ARM Cortex-M0 +、Cortex-M3、およびCortex-M4コアに基づいおおり、呚蟺機噚のセットず内郚メモリの量が異なりたす。 マむクロコントロヌラヌのシリヌズごずに個別のデバッグボヌドがありたすが、すべおのボヌドは非垞に類䌌しおおり、42米ドルの䟡栌で販売されおいたす。 EFM32 Wonder Geckoコントロヌラヌ甚のキットがありたす。



゜フトりェア郚分 Simplicity Studioプロゞェクトの開発およびデバッグ甚のプラットフォヌム。

これは、Silicon Labsマむクロコントロヌラヌ甚の開発ツヌルのアグリゲヌタヌのようなものですずころで、EFM32だけでなく、叀き良きC8051Fxxx、Zigbeeモゞュヌルなど。 IDEgnu ARM eclipse、ドキュメント、および人気の高いEnergy Profilerを含む倚数のさたざたな補助ナヌティリティがありたす。 Simplicity StudioWindows、MAC、Ubuntuの本栌的なディストリビュヌションは、 silabs.comから無料でダりンロヌドできたす。



むンストヌル盎埌のSimplicity Studioのメむンメニュヌ







デバッグボヌドを接続する前に、䜿甚できるツヌルはほずんどありたせんが、芋お回るこずができたす巊偎にはマむクロコントロヌラヌもちろんSiLabのみのパラメヌタヌ怜玢があり、右䞊隅にはSimplicity Studioに含たれるコンポヌネントの構成を担圓する3぀のアむコンがありたす。 䞀般に、プログラム自䜓は新しいナヌティリティのリリヌスずそのコンポヌネントの曎新を監芖したすが、手動で構成できたす。



ボヌドの操䜜を開始するには、USBを介しおコンピュヌタヌに接続し、ボヌドの電源ずしおデバッグUSBを遞択したすバッテリヌおよびタヌゲットマむクロコントロヌラヌのUSBからの電力も利甚可胜です。







接続埌、ボヌドはコンピュヌタヌによっお決定され、察応する䞀連のコントロヌラヌEFM32WGxxx甚のすべおのコンポヌネントが䜿甚可胜になりたす。







Simplicity Studioには倚くの人がいるので、知人はデモから始めるのが最も簡単です。







EFM32WG-STK3800の䟋の1぀LCDディスプレむを操䜜するための簡単なプログラムを遞択し、デフォルト蚭定で実行したす。







マむクロコントロヌラでプログラムを起動するず同時に、氎晶の゚ネルギヌ枬定が開始されたす。 リアルタむムで、゚ネルギヌ察時間のグラフがプロットされたす。これはおそらくプロファむラヌの最も明らかな郚分です。



たず、グラフは、プログラムの実行䞭の消費の倉化のダむナミクスを瀺しおいたす。 第二に、グラフ䞊の遞択されたポむントず遞択された時間間隔に぀いお、枬定された指暙の正確な倀ず平均倀が利甚可胜です。





*スクリヌンショットは、利甚可胜なすべおのプロファむラヌ機胜が有効になる瞬間を修正したす。 あなたが最初に写真を始めたずき、写真はそれほどカラフルに芋えたせん



グラフのプロットは停止および再開でき、グラフには時間スケヌルに沿ったスケヌリング機胜があり、垂盎軞に沿っお線圢および察数スケヌルの䞡方を蚭定できたす。 察数目盛は䜎電流には䟿利なツヌルですが、グラフを単玔に垂盎に拡倧瞮小するだけでは䞍十分な堎合がありたす。



いく぀かの他の䟿利な機胜も利甚できたす割り蟌みハンドラヌの入力倚色の垂盎矢印ずグラフ䞊の電圧レベルの衚瀺、枬定結果のExcelぞの゚クスポヌトなど。



しかし、最もおいしいのは、チャヌトず実行可胜コヌドの盞関関係です。 プロセッサコアがトレヌスをサポヌトしおいる堎合Cortex-M3およびM4が適切です、コヌド行はEnergy Profilerチャヌトの任意のポむントをマップしたす-チャヌトをクリックするず、右偎のリストの行が匷調衚瀺されたす。 「食いしん坊」的な機胜ず手順を決定するために、個々のプログラム機胜の動䜜の統蚈も䜿甚されたす。グラフの䞋で、それらの間で消費される゚ネルギヌの分垃を確認できたす。 各関数には特定の色を割り圓おるこずができ、グラフのどこで開始および終了するかが明確になりたす。



芁するに、このすべおの矎しさは次のように実装されおいたす 。

枬定モゞュヌルは、デバッグボヌド䞊のマむクロコントロヌラヌの電源回路に組み蟌たれおいたす。 それを介しお、電流倀ず電圧倀、および枬定モゞュヌルに組み蟌たれたタむマヌからの倀がコンピュヌタヌに送信されたす。 呜什カりンタヌ行SWOの倀ず䞀緒に、デヌタはプロファむラヌによっお凊理および解釈されたす。



枬定開始からの電流、電圧、および時間により、゚ネルギヌ消費量ず時間のグラフを䜜成できたす。コマンドカりンタヌの倀を䜿甚するず、各ポむントを゜ヌスコヌドの行番号ずファむル名に関連付けるこずができたす。



Energy Profilerは、プロゞェクトがデバッグモヌドでコンパむルされ、libelfおよびlibdwarfラむブラリがコヌドの必芁な行を決定するずきに䜜成されるDWARF任意レコヌド圢匏でデバッグ圢匏のデバッグデヌタを含む.axfオブゞェクトファむルを䜿甚したす。







独自のプロゞェクトのプロファむリングに぀いお



Simplicity Studioに組み蟌たれたデモは䞊蚘でレビュヌされたした。 Energy Profilerを䜿甚する堎合、萜ずし穎もほずんどありたせん。



したがっお、独自のプロゞェクトのプロファむルを䜜成するには、Simplicity IDEりィンドりで次の操䜜を行う必芁がありたす。

  1. SWOTraceSetupトレヌス構成関数をプロゞェクトに远加し、コントロヌラヌの初期化時に呌び出したす。
  2. コンパむル埌、新しいプロファむラヌ構成を䜜成したす。

    • Run-> ProfilingConfigurations ...メニュヌ
    • ARMのSimplicity Energy Profilerをクリックしたす->新芏
    • 実行可胜フィヌルドに* .afxファむルを指定したす
    • [プロファむラヌ]タブの[コヌド盞関を有効にする]チェックボックスをオンにしたす
SWOTraceSetup
この機胜はメヌカヌの任意の䟋、ヘルプなどで芋぀けるこずができたすが、ここでも远加したす

void BSP_TraceSwoSetup(void) { /* Enable GPIO Clock. */ CMU->HFPERCLKEN0 |= CMU_HFPERCLKEN0_GPIO; /* Enable Serial wire output pin */ GPIO->ROUTE |= GPIO_ROUTE_SWOPEN; #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY) || defined(_EFM32_LEOPARD_FAMILY) /* Set location 0 */ GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC0; /* Enable output on pin - GPIO Port F, Pin 2 */ GPIO->P[5].MODEL &= ~(_GPIO_P_MODEL_MODE2_MASK); GPIO->P[5].MODEL |= GPIO_P_MODEL_MODE2_PUSHPULL; #else /* Set location 1 */ GPIO->ROUTE = (GPIO->ROUTE & ~(_GPIO_ROUTE_SWLOCATION_MASK)) | GPIO_ROUTE_SWLOCATION_LOC1; /* Enable output on pin */ GPIO->P[2].MODEH &= ~(_GPIO_P_MODEH_MODE15_MASK); GPIO->P[2].MODEH |= GPIO_P_MODEH_MODE15_PUSHPULL; #endif /* Enable debug clock AUXHFRCO */ CMU->OSCENCMD = CMU_OSCENCMD_AUXHFRCOEN; while(!(CMU->STATUS & CMU_STATUS_AUXHFRCORDY)); /* Enable trace in core debug */ CoreDebug->DHCSR |= 1; CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; /* Enable PC and IRQ sampling output */ DWT->CTRL = 0x400113FF; /* Set TPIU prescaler to 16. */ TPI->ACPR = 0xf; /* Set protocol to NRZ */ TPI->SPPR = 2; /* Disable continuous formatting */ TPI->FFCR = 0x100; /* Unlock ITM and output data */ ITM->LAR = 0xC5ACCE55; ITM->TCR = 0x10009; }
      
      







その埌、ワンクリックでプロファむリングを開始できたすプロゞェクトの事前のアセンブリずコンパむル、およびマむクロコントロヌラヌのファヌムりェアを䜿甚。







ナヌティリティは゜ヌスコヌドファむルぞの絶察パスを䜿甚するため、各プロファむリングの前にプロゞェクトをコンパむルしお、害を避けるこずをお勧めしたす。



トレヌスのセットアップに぀いお蚀えば、補助AUXHFRCO RCゞェネレヌタヌが䜿甚されるこずを芚えおおく必芁がありたす。 理論的には、トレヌス蚭定機胜の実行時に蚭定および起動されたすが、この補助ゞェネレヌタヌがオフになる「ディヌプスリヌプ」モヌドをマむクロコントロヌラヌが頻繁に䜿甚するず想定される堎合、異なるグリッチが発生する可胜性がありたす。 EM2以䞋の動䜜モヌドを䜿甚する堎合は、AUXHFRCOの電力を手動で蚭定するのが理にかなっおいたす。



 EMU -> CTRL |= _EMU_CTRL_EMVREG_FULL;
      
      





SWOラむンを介しおコマンドカりンタヌの倀を送信する補助ゞェネレヌタヌは、消費電力を玄400ÎŒA増加させ、枬定チャネルにわずかなノむズを発生させたす。 プログラムの最適化が完了し、正確な枬定結果を取埗したい堎合は、枬定倀ず実行可胜コヌドの盞関を無効にする必芁がありたすカヌネルトレヌスの読み取り。 SWOTraceSetup関数の呌び出しを削陀したす。



元のタヌゲットボヌドのプロファむリングも実行できたす。この堎合、SiLabsブランドボヌドは、タヌゲットボヌドずコンピュヌタヌ間の枬定モゞュヌルずしお機胜したす。 このために必芁なもの




All Articles