高性能のIoTエンドポイントでルックアップテーブルを使用する場合の外部フラッシュメモリの利点について

著者 Bill Giovino

Digi-Keyの北米担当編集者 の提供

モノのインターネット(IoT)のネットワークが複雑化するにつれて、IoTエンドポイントがエッジで実行する処理も、より複雑になりつつあります。そのため、場合によっては、既存のエンドポイントを、クロック速度がさらに速く、より多くのメモリや、より強力なプロセッサコアが搭載されているマイクロコントローラを使用したシステムで置き換えなければなりません。

また、高い精度を備えたセンサやA/Dコンバータ(ADC)が必要になる場合もあります。このようなセンサやADCでは、定期的な較正が必要になる場合があります。線形誤差は、公式によって簡単に補償することができます。しかし、非線形誤差は、センサ読み取りからの偏差が一定のパターンに従っていないため、数学的に簡単に補償することができません。ファームウェアにおける非線形誤差を補償する最も単純な方法としてよく利用されるのは、データルックアップテーブルを使用して、必要な補正データをメモリに格納することです。

この記事では、センサおよびADCの誤差について簡単に説明し、このような誤差を補正するのにルックアップテーブルを使用する利点について取り上げます。また、STMicroelectronicsSTM32L496VGマイクロコントローラをベースとしたシステムに、外部のON SemiconductorLE25S161PCTXGシリアルペリフェラルインターフェース(SPI)フラッシュメモリチップを使用して実用的かつコスト効率の良いデータフラッシュルックアップテーブルを実装する方法についても説明します。

センサ誤差

温度、圧力、電圧などのアナログな状態を検出するセンサでは、非線形誤差が発生する可能性があります。プロジェクトの開発段階では、正確な基準に対してセンサをテストし、その基準値とセンサのデジタル出力を比較することが重要です。これにより、開発者は早い段階で、センサが持つ基準値との偏差の傾向と、アプリケーションにおける要件を考慮すると、その偏差が許容できるかどうかを判断できます。偏差が存在する場合、開発者は補償が必要かどうか、必要な場合は偏差の補償をハードウェアとファームウェアのどちらで行うべきかを判断することができます。

センサ誤差は、予測可能な線形誤差の場合もあります。このような誤差の補償は単純で、センサの出力に対して一定の値の加減算を行うだけです。これらの誤差は、センサの計測範囲の部分によって変わる場合があります。たとえば、0からフルスケールの1/3の範囲では、ある一定の値を加算する必要があり、フルスケールの1/3から1/2の範囲では異なる値を加算しなければならないことがあります。

こうした誤差は予測可能であり、補正も見るからに簡単です。しかし、正確な読み取り値からの偏差は、経時的に変化する場合があります。さらに、極端な温度や、周囲の高い湿度、センサの経時変化などによって、それまでになかったセンサ誤差が後から発生することがあります。このような誤差の補正が必要かどうかは、アプリケーション次第です。センサの動作を確認するには、システムを極端な温度、圧力、湿度の中でテストする必要があります。このような環境テストが必要なのは、自動車、軍事、そして一部の産業用システムなどです。ただし、多くのIoTエンドポイントが、今までセンサが使われていなかった環境で利用されるようになっていることから、センサのテストには新たな要件になるかもしれません。

ADCなど、マイクロコントローラの一般的なアナログ周辺モジュールも、他のアナログセンサと同様にシステム内での定期的な較正が必要な場合があります。ADCの誤差は常に予測可能とは限らず、内部的な誤差がアルゴリズムによって補正できたとしても、その誤差が経時的に変化し、アルゴリズムで簡単に補正できなくなることがあります。そのような場合はシステムが必要な精度で機能しなくなり、交換のコストが非常に高額になります。

アナログセンサの誤差の補正にデータルックアップテーブルを使用することの利点

データルックアップテーブルは、三角関数のように複雑な計算、あるいはバイトのビット反転やバイトのグレーコードへの変換のような単純な計算など、よく使用される計算を素早く実行するための、実用的かつ効率的な手法です。バイトのビット反転に256バイトのルックアップテーブルを使用すると、ファームウェアでビット反転を実行した場合より、処理が大幅に高速化します。ルックアップテーブルはプログラムまたはデータフラッシュメモリに格納するのが安全です。なぜなら、このテーブルはほとんどスペースを使用しない上に、変更の必要がないからです。

データルックアップテーブルは、センサ較正データを格納するための極めて実用的な手段でもあります。マイクロコントローラの内蔵ADCのようなアナログ周辺モジュールでは、アナログセンサとまったく同じ手法を利用した定期的な較正が必要な場合があります。大半のマイクロコントローラで使用されているADCの精度は最下位ビット(LSB)±2または±3にすることができます。ほとんどのアプリケーションではこの精度で十分ですが、高い精度が必要なシステムでは、ADCを定期的に較正する意義があります。

表1は、24ビットのデータを補正するための較正用ルックアップテーブル(一部)の例です。

センサ読み取り値   センサ補正値
:   :
01 AB 24h   00 01 AB 21h
01 AB 25h   00 01 AB 22h
01 AB 26h   00 01 AB 24h
:   :

表1: 24ビットの較正データのデータルックアップテーブルの例(一部)。生の入力値は、誤差補正が必要なソースの読み取り値です。この生の値は、24ビットのアドレスとして使用され、対応する32ビットの補正された値を検索するために使用されます。この値の最上位バイトは常に00hです。(テーブルデータ提供: Digi-Key Electronics)

この例では、生の入力値は、誤差に対する補正が必要なソースの読み取り値です。この生の値は、24ビットのアドレスとして使用され、対応する32ビットの補正された値を検索するために使用されます。この値の最上位バイトは常に00hです。ルックアップテーブルがアドレスゼロからでない場合は、生の入力値にオフセットを追加します。

ルックアップテーブルの格納場所を決定する場合、ルックアップテーブルをどの程度の大きさにする必要があるのか、再書き込みが必要かどうかを判断しておくことが重要です。どちらの要素も重要です。再書き込みが必要ない場合は、マイクロコントローラの利用可能なオンチッププラッシュにルックアップテーブルを格納するのが妥当です。しかし、センサが定期的な再較正を必要とする場合は内部フラッシュへの再書き込みが行われることになるため、テーブルがあるフラッシュセクタ全体を消去し、再書き込みする必要があります。

フラッシュセクタがプログラムメモリとスペースを共有している場合は、コードの再コンパイルが必要になることがあります。ルックアップテーブルが専用のセクタ内にある場合でも、メモリの要件が変更されたり、後から拡張する必要が生じたりして、追加コードのために、ルックアップテーブルのセクタスペースを一部の転用することが必要になる場合があります。そのため、現場でセクタの較正が複雑になり、再コンパイルされたコードをネットワーク経由でダウンロードしなければならないことから、IoTエンドポイントの自己較正ができなくなる可能性があります。複数のセンサを使用している場合、問題はさらに複雑になります。

24ビットのデジタルデータの較正のための16,777,216のエントリがある大きなルックアップテーブルは、非実用的であることに加えて、オンチップフラッシュプログラムメモリでは使用できません。エントリは1つおきに格納するだけにして、欠落したエントリは既存のテーブルデータから補間するのであれば、ルックアップテーブルのサイズを半分にすることができます。その結果、パフォーマンスヒットが小さくなり、起こりうる精度の喪失分は±1 LSBになります。ただし、それでもルックアップテーブルのエントリは8,388,608件であり、内部フラッシュへの格納は非実現的です。

マイクロコントローラベースのシステムにおける大きなデータルックアップテーブルに対する最適なソリューションは、外部フラッシュメモリです。外部フラッシュメモリを利用すれば、数メガバイトのルックアップテーブルを追加でき、内部フラッシュプログラムメモリを利用せずにすみます。また、システムは、マイクロコントローラの内部フラッシュメモリに干渉することなく、ルックアップテーブルに簡単に再書き込みを行うことができます。

高性能のシステムに対して、プログラムおよびデータメモリの両方を拡張するために、外部パラレルフラッシュメモリを追加することは一般的な手法です。ただし、それには外部データバスを備えたマイクロコントローラが必要です。追加のアドレスバスおよびデータバス、必要な制御信号により、マイクロコントローラのピンを36本以上の使用する場合があります。この要件により、目的のアプリケーションに利用できるマイクロコントローラが限られてしまいます。これらの外部バスもプリント基板上で場所を取るため、システムの電磁妨害(EMI)が増大する可能性があります。

多くのシステムにとって、外部シリアルデータフラッシュメモリを使用するための最適なソリューションは、データ転送にSPI(シリアルペリフェラルインターフェース)を使用することです。これに必要なマイクロコントローラのピンはわずか4本ですみます。

このようなフラッシュメモリデバイスの良い例が、ON SemiconductorのLE25S161PCTXGです。これは16メガビット(Mbit)のシリアルフラッシュメモリデバイスで、70MHzのSPIクロックをサポートしています。ただし、このデバイスはデュアルSPIモードもサポートしており、データを最速140Mbit/秒で転送することができます。内部ステータスレジスタは、デバイスの読み取り、書き込み、低消費電力の各モードを設定するのに使用します。

LE25S161PCTXGでは、クロック、データ、およびチップセレクトに対して、通常のSPI信号が使用されます(図1)。また、このデバイスには追加のピンが2つあります。WP\はアクティブローの書き込み保護信号で、デバイスのステータスレジスタへの書き込みを防ぎます。この信号は、ファームウェアの優先度の低いタスクが、デバイスへの不正な書き込みを行わないようにします。HOLD\は、進行中のデータ転送を一時停止します。この信号は、マイクロコントローラがデータ転送中に割り込みを処理なければならない場合に便利です。データ転送を割り込みが処理されるまで停止して、その後に再開することができます。

ON SemiconductorのLE25S161PCTXGシリアルフラッシュメモリの図

図1: ON SemiconductorのLE25S161PCTXGシリアルフラッシュメモリは、8ピンのUDFNパッケージで提供されます。フットプリントは3mm x 4mmと超小型で、クロック、データ、チップセレクトには通常のSPI信号が使用されます。(画像提供:ON Semiconductor)

デバイス内に保管されているルックアップテーブルの2つの列を読み取る最も簡単な方法は、センサ読み取り値を取得し、メモリのオフセットを追加し、当該アドレス位置のメモリ内容を読み取ることです。そのアドレスのメモリ内容は、センサ読み取り値の補正値を表します。

高性能のIoTエンドポイントでは、高速クロック、高性能プロセッサ、柔軟なSPIが必要です。そのような用途に、STMicroelectronicsは高性能なSTM32L4マイクロコントローラ ファミリを用意しています。たとえば、STM32L496VGはSTM32L4製品ファミリのマイクロコントローラであり、80MHzで実行され、浮動小数点ユニットを備えたArm® Cortex®-M4コアを搭載しています。この製品のフラッシュは8Mbit、SRAMは320キロバイト(Kbyte)です。サポート動作電圧は1.71~3.6ボルトです。これはON Semiconductor LE25S161PCTXGの動作電圧である1.65~1.95ボルトと重なっています。

STM32L496VGには、カレンダーを備えたリアルタイムクロック(RTC)、3つの5メガサンプル/秒(MSPS)のADC、2チャンネルのD/Aコンバータ(DAC)、2つのコントローラエリアネットワーク(CAN)インターフェース、および4つのI2Cインターフェースなど、高性能IoTエンドポイント向けの多様な周辺モジュールを備えています(図2)。また、標準のSPIインターフェース3つと、クワッドSPIインターフェース1つも搭載しています。

80MHz Arm Cortex-M4をベースにしたSTMicroelectronicsのSTM32L496マイクロコントローラ(クリックして拡大)

図2: STM32L496マイクロコントローラはFPUを備えた80MHz Arm Cortex-M4をベースとし、40MHzクワッドSPIインターフェースなど、豊富な周辺モジュールを内蔵しています。(画像提供:STMicroelectronics)

STM32L496VGの開発は、STM32L496G-DISCOディスカバリボードによってサポートされています(図3)。これはIoTエンドポイントを対象としたフル機能の開発ボードであり、ステレオMEMS(マイクロエレクトロニカルシステム)マイクロフォン、8ビットのカメラコネクタ、8つのLED、4方向ジョイスティック、240 x 240ピクセルのカラーLCDが組み込まれています。コネクタピンでは、ADC入力、クワッドSPIピン、およびI/Oの大半を使用できます。

STMicroelectronicsのSTM32L496G-DISCOディスカバリボードの画像

図3: STM32L496G-DISCOディスカバリボードは、ST32L496VG用のハードウェアおよびファームウェア開発のための完全な評価環境です。(画像提供:STMicroelectronics)

STM32L496VGのクワッドSPIは最大40MHzのSPIクロックをサポートし、標準モードおよびメモリマップドSPIモードに対応しています。このクワッドSPIはデュアルSPIモードに対応しているおり、最大80Mbit/秒のデータ転送が可能です。

STMicroelectronicsのクワッドSPIは、シリアルデータフラッシュメモリデバイスに対する高速なインターフェースを実現しています。標準SPIモードでは、すべての動作がSPIレジスタを使用して実行されます。データはSPIデータレジスタに対する読み取りおよび書き込みによって転送されます。データを受信すると、割り込みを生成します。これは、STM32L496VGにおける3つの標準SPIと同じ動作モードです。標準SPIモードはシングル、デュアル、そしてクワッドのデータ転送に対応しています。ON SemiconductorのLE25S161はシングルおよびデュアルSPIモードに対応しており、デュアルSPIモードのSTM32L496VGと簡単に接続できます(図4)。

STMicroelectronicsのSTM32L496VGのクワッドSPIシリアルポートの図

図4: STMicroelectronicsのSTM32L496VGのクワッドSPIシリアルポートは、デュアルSPIモードでON SemiconductorのLE25S161と接続できるため、40MHzのSCLKを使用し、SIO0とSIO1を介して80Mbit/秒で双方向にデータ転送ができます。(画像提供:Digi-Key Electronics)

ON SemiconductorおよびSTMicroelectronicsの製品を選択することにより、この状況でのデータルックアップテーブルの実装がシンプルになり、簡単な実装が実現します。このクワッドSPIはバルクデータ転送に役立つFIFOを備えています。しかし、1回にアクセスする必要があるメモリの場所が1カ所のみのルックアップテーブルの場合は、FIFOを無効にすることをお勧めします。これは、FIFOが不要な上に、余分な遅延が発生する恐れもあるためです。

メモリマップドモードのクワッドSPI

このクワッドSPIは、メモリマップドモードもサポートしています。このモードでは、外部シリアルフラッシュがマイクロコントローラのプログラムメモリ空間またはデータメモリ空間のいずれかにマップされます。これにより、マイクロコントローラのファームウェアは外部SPIフラッシュに、このフラッシュがマイクロコントローラのメモリの一部であるかのようにアクセスできるようになります。そのため、クワッドSPIの動作がファームウェアに対して透過的になります。

ルックアップテーブルへのアクセスが頻繁に行われない場合、メモリマップドモードを使用したルックアップテーブルの実装は、標準のSPIモードと比べて、アプリケーションのファームウェアがシンプルになる以外には、特に大きな利点はないかもしれません。しかし、割り込みの頻度が高いアプリケーションの場合は、SPIの転送が割り込み処理のために頻繁に停止する可能性があります。1つのクワッドSPIのルックアップ動作が別のSPIのルックアップ動作の割り込みを受ける場合、状況はさらに複雑になります。

ルックアップテーブルへの頻繁なアクセスと割り込みの多いアプリケーションの組み合わせでは、標準SPIと比べてすぐにメモリマップドモードの効率の方が高くなることがあります。メモリマップドモードによりファームウェアがシンプルになり、優先度が異なるクワッドSPIの同時アクセスが原因の問題が回避でき、割り込みの競合が低減します。

ただし、メモリマップド式ルックアップテーブルの実装にも欠点が1つあります。それは、データキャッシュに関する問題が発生する可能性があることです。STM32L496にはデータキャッシュがありませんが、高性能かつリアルタイムでの用途を目的としたマイクロコントローラの中にはデータキャッシュを備えているものがあります。ルックアップテーブルにアクセスすることにより、キャッシュミスが発生する可能性が高くなります。これは、ほとんどのアプリケーションでは、同じスレッドまたはサブルーチン内で、同じルックアップテーブルの場所に対して2回アクセスしなければならない可能性は非常に低いためです。そのため、データルックアップテーブルのデータは最初はキャッシュされず、そのデータをキャッシュすることで、重要なデータがキャッシュから削除されることになります。これは極めて高性能のアプリケーションに限定された問題ですが、そもそもデータキャッシュを必要とするのはこのような高性能なアプリケーションです。

ルックアップテーブルが原因の、データキャッシュにおける問題に対するソリューションは限定されています。ハードウェアで可能な場合は、ルックアップテーブルの領域は、キャッシュ不可としてマークすることができます。別のソリューションは、ルックアップテーブルへのアクセスの前後に、データキャッシュを無効にしてから再度有効にすることです。これが可能なのは、キャッシュのオンとオフとの切り替えのパフォーマンスヒットが許容できる場合です。データキャッシュの中にはアーキテクチャ固有のキャッシュ制御指示をサポートするものがあります。このようなキャッシュ制御指示により、キャッシュの問題を防ぐためのサポートが実現されます。データキャッシュを設定して、特定のアプリケーションに対する最適な方法を確認する場合は、システムの性能をベンチマークしておくことが重要です。

シリアルフラッシュは、プリント基板上に配置して、トレースが120mmを超えないようにします。干渉防止のため、SPIクロック信号パスは、他の信号からプリント基板トレース幅の少なくとも3倍は離す必要があります。スキュー防止のため、双方向データ信号はすべて相互間隔10mm以内にする必要があります。

まとめ

外部SPIフラッシュデバイスは、IoTエンドポイントに大きなデータルックアップテーブルを実装する場合に効果的なソリューションです。外部SPIフラッシュデバイスはインシステムでの再書き込みが簡単で、アップグレードもしやすく、使用するマイクロコントローラのリソースは最小限です。

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

著者について

Bill Giovino

Bill Giovino氏は、シラキュース大学のBSEEを持つエレクトロニクスエンジニアであり、設計エンジニアからフィールドアプリケーションエンジニア、そしてテクノロジマーケティングへの飛躍に成功した数少ない人の1人です。

Billは25年以上にわたり、STMicroelectronics、Intel、Maxim Integratedなどの多くの企業のために技術的および非技術的な聴衆の前で新技術の普及を楽しんできました。STMicroelectronicsでは、マイクロコントローラ業界での初期の成功を支えました。InfineonでBillは、同社初のマイクロコントローラ設計が米国の自動車業界で勝利するように周到に準備しました。Billは、CPU Technologiesのマーケティングコンサルタントとして、多くの企業が成果の低い製品を成功事例に変えるのを手助けしてきました。

Billは、最初のフルTCP/IPスタックをマイクロコントローラに搭載するなど、モノのインターネットの早期採用者でした。Billは「教育を通じての販売」というメッセージと、オンラインで製品を宣伝するための明確でよく書かれたコミュニケーションの重要性の高まりに専心しています。彼は人気のあるLinkedIn Semiconductorのセールスアンドマーケティンググループのモデレータであり、B2Eに対する知識が豊富です。

出版者について

Digi-Keyの北米担当編集者