産業機器のデータ保持とセキュリティ性を、いかに安価に実現するか。
FA機器は、ファイルシステムを必要とする機器が多く、工場内をはじめ設置環境が不安定な場所やノイズが多い環境にさらされているため、電源瞬断(瞬間的に落ちること)を想定して機器を設計しなければならない(下記のガイドラインを参照)。
これまでは、電源瞬断に対応するために予備のバッテリーを搭載し、瞬断発生時にLDO(Low Drop Out)割り込みで検出して、予備のバッテリーを生かしながらファイルシステムを安全に終了させる方法をソフトウェア的に実装する方法が編み出されてきた。もちろん、現時点でのシステム構成としては、問題はない。しかし、効果の割にソフトウェアやハードウェアのコストアップの影響が大きく、なかなか製品価格を下げられず、コスト競争にさらされることが見受けられたのではないだろうか。
そこで、FRAMをファイルシステムと併用することで、わずかなコストアップとちょっとしたソフトウェアの追加でこれまでの課題を解決する方法の一つとして提案できるのではないかと考えた。
安全基準のガイドライン
産業情報機器に関する安全基準のガイドラインJEITA IT-1004.pdfに電源の瞬時停電についてClass B/A/Sとして規定値が策定されており、200msを超える供給電源の停電期間の場合、別途電源設備を持たせなければいけない旨が記述されている。
FRAMとは?
FRAMは富士通セミコンダクター社(以下、FSL)が製造販売している不揮発性のメモリで、高速な読み書きと省電力が売りのデバイスだ。CPUとの接続も、I2C、SPI、QSPI、パラレルの4タイプが用意されている。容量は4Kbitから最大4Mbitまで幅広くラインアップされているので、EEPROMと比較されることが多い。108MHz(Quad SPI品)の読み書きスピードに対応した高速版など豊富な品種でアプリケーションに応じたFRAM製品を展開している。
優れた書き換え耐性
不揮発性のメモリは多くの種類があるが、パラレルI/F対応のFRAMはSRAMのように読み書きができる。I2CやSPI、Quad SPI品は、従来のEEPROMと同じアクセス方法を提供しているので、使い方を誤ることはないだろう。
最初の書き込み時はアドレスを指定する必要があるが、FRAMにアクセスし続けている限りは、アドレスがオートインクリメントされるので、連続したアクセスが可能だ。マイコン内部のSRAMの読み書きスピードにはかなわないかもしれないが、EEPROMの書き込み時間に比べると3000倍速い書き込みができる。
SPI I/F品を使用して、30MHzのスピードで書き込みを行なっても書き損じはなく、十分な書き込みの速さを維持できている。加えて、書換え耐性10兆回のFRAMは、EEPROMと比べ1000万倍の多さというから、長期間の運用も全く問題ない。
計算してみよう
- 1秒間に100回書き込みして、24時間365日連続30年間書き込みをした場合
100x60secx60minx24hourx365daysx30years = 9.5 ^10 (スペック内) - 1秒間に1万回書き込みして、24時間365日連続30年間書き込みをした場合
10000x60secx60minx24hourx365daysx30years = 9.5 ^12 (スペック内)
どちらも、スペック内だ。これだけの書換え耐性があれば、宇宙探査系の記録保持にも使用可能だ。このスペックは驚異的だ。
優れた省電力特性
FRAMの強みはもう一つある。それは低消費電力性能だ。特に書き込み時の電力性能は、圧倒的な差だ。メモリを保存するだけなら、他のメモリ媒体を採用しても機能的には変わらない。だが、FRAMの場合は、電荷によるデータ保持ではないため、常に給電されている必要はない。
書き込み時においては、データを電荷ではなく結晶内のイオンの移動によりデータが保持されるため、常に通電しておく必要がない。それゆえ、他のメモリ媒体に比べると圧倒的な低消費電力を実現できているのだ。EEPROMと比べても1/30の電力で書き込みができる。バッテリー駆動のアプリケーションには、必須要件なのではないだろうか?
バッテリーがなくてもデータが保持できるメリットは大きい。さらにもう1つメリットがある。FRAMは強誘電体結晶の分極によりデータを保持することから、EEPROMに比較して電子顕微鏡による解析も簡単なものではない。これもFRAMの特性のひとつだ。IoT時代のセキュリティというと少し大げさだが、わずか8ピンのメモリデバイスでデータをある程度担保できるのであれば、随分と安価なソリューションであると言えないだろうか。詳しく知りたい方は、下記のリンク先から調べてもらうといいと思う。
FRAMの主な使い方は、メモリが最も適した使い方なのだが、今回は「キャッシュ」または「バッファ」としてFRAMを活用してみようと思う。想定しているアプリケーションは、「電源瞬断対応のファイルシステム」を要するFA機器だ。
ファイルシステムとは?
ファイルシステムは、PCなどに採用されているDISKをベースとしたOSでサポートしているデータ保存方法である。ここでファイルシステムの歴史には触れないが、現在のPC環境では必須の機能になっている。
USBやSDメモリといった多くの外部記録メディアは、ファイルシステムを持っている。ファイルシステムは、様々なフォーマット形式があるが、組み込み機器では概ねFAT16/32形式をサポートしている。これは主に、PCとのデータ互換性を持たせるためであり、最近では長いファイル名が使用可能なLFN(ロングファイルネーム)のサポートや4GB以上のデータを扱えるexFATなども増えている。
ファイルシステムの場合、通常以下のような使い方だと思う。
FILE fd; fd=fopen(filename, mode); fseek(fd, 0, 0); fwrite(fd, data pointer, size, block); fread(fd, data pointer, size); fclose(fd);
ファイルシステムは、ファイル操作中に電源が落ちることは基本的に想定しておらず、物理的なメモリ空間を使用している。ファイルシステム自体のデータの構成は、ソフトウェアで構築されている。FAT(File Allocation Table)と呼ばれるデータ構造が物理メモリ上に構成され、ファイル本体そのもののデータが実際のメモリ上に書き込まれる。
FATはリンク構造とデータへのポインタを持ったかたまりのため、リンク構造が破損すると、ファイルアクセスが不可能になってしまう。これこそが、起きてはいけない問題であり、これを回避するために、電源断対応のファイルシステムが存在するのである。
電源断対応ファイルシステムは、「ジャーナリング」といって一時的にデータを保存し、sync()などのトランザクション同期処理によりファイルシステムとジャーナリングデータと同期させるための仕組みを提供している。ベンダーによっては、独自実装で実現しているものもある。
電源瞬断のタイミングとその対策とは?
システムの電源が落ちた場合は、どうなのだろうか?電源が低下した場合、通常は電源が低下したことを知らせる割り込みが発行される。もちろん、この機能を有効にしていないといけないが、デバイス内部で電源電圧を監視していることは一般的になってきた。
この割り込み要因は、LDO割り込みと呼ばれており、それぞれマイコンベンダーによって名称は異なるものの、機能は同じものが多い。そのLDO割り込みを使用して、現在のファイルシステムを安全に終了させるには、その処理時間分の電力が必要で、バッテリー搭載を余儀なくされる。
電源電圧低下は、マイコンの割り込みだけでなく、ハードウェア的にもその検出を行う必要があり、電源低下時はバッテリーからの給電に切り替える必要がある。それだけでも、その回路を設計しなければならず、ディスクリートで回路を構成したとしても、BOMコストに直接跳ね返ってくる。
このように、電源断対応は、システムの信頼性と品質を担保する上で欠かせない機能ではあるが、コストが高くなることが懸念材料になっている。
FRAMの出番
FRAMの特性を活かすようにAPI発行時近辺でのフラグ操作やデータ保持を行うことで、どのタイミングで電源断になったのか?どこまでのデータが保持されたか?がわかるようになるので、再度電源が供給されてからでも復帰処理がかなり簡略化できるのではないだろうか。
もちろん、100%を保証するシステムとはいかなくとも、データ損失は、かなり最小限に抑えられる。従来の方法と併用すれば、通常のファイルシステムでも十分な性能を発揮できることが期待できる。
フラグ処理で、電源断による中断箇所を特定
では実際どのような処理になるだろうか?FRAMはメモリであるから,通常のメモリ操作と変わらない。例えば、何らかの外部機器からの情報を取得し、そのデータをファイルに保存するアプリケーションの場合、各処理のポイント毎にステータス(状態)を記録する。そして、ファイルシステムにアクセスするタイミングで、ファイルシステムのAPIに応じたステータスを決めておき、FRAMのメモリ上に記録していく。
図2は、main処理内及び、データログ処理内におけるステータス値を表している。それぞれの処理が正常に終われば、電源正常(0xAA)や同期正常(0xCC)がFRAM上に記録される。何らかの原因で、電源が供給されなくなることを想定するので、処理開始時には、電源異常(0xBB)や同期異常(0xDD)として処理を進めることで、電源瞬断に備えておく。
実際のファイルシステムへのアクセスが発生する箇所においては、さらにファイルシステムのAPIのに応じたステータス値を保持することで、どのAPI実行時に電源瞬断が発生したかがわかる。アプリケーションとして必要なデータも事前にFRAMに一時保存しておくことで、データの安全性も担保できる。
今回紹介する方法をさらに発展させると、タイムスタンプの情報や記録しているファイル名、FRAMの容量が十分あれば保存すべきデータをそのまま保存することも可能であり、クラウド経由するためのバッファとしても申し分ない。FRAMにデータを保存後、ファイルシステムのAPIを発行することで、途中過程で電源が落ちたとしても、FRAM上にはそのままデータが保持されているから、再度電源を投入してからでも、データを安全にファイルシステムへ保存することができる。ファイルシステムのFATを壊さない方法というだけでも十分有効性があると考えられる。
このように、電源断になるまでのデータはFRAMが保持してくれているので、安全にファイル操作ができるようになる。これこそが、FRAMを使うメリットであり、製品価値向上につながるのではないだろうか。
FRAMにフラグ情報を書き込んだ様子を図3に示す。電源断が発生した時と発生せずに正常終了した時のフラグの状態が示されている。
赤字で示したデータがフラグの状態を示している。
Arm Mbedの環境で電源瞬断対応システムを構築
今回は、FRAMとファイルシステムを誰でも気軽に試してもらえるよう、Arm Mbedの環境を使って、これまで紹介したデモ環境を構築してみた。詳しくは、動画を見てもらいたい。Arm Mbedは、USBでターゲットとなるCPUボードとPCを接続し、オンライン上の開発環境でソフトウェアを開発することができる便利な環境だ。
このArm Mbedを利用して、より多くのエンジニアにFRAMとファイルシステムの組み合わせを体験してもらいたいと思っている。ボードは、STMicroelectronics社のNucleo-STM32F401REを選んだ。
デモ環境は、FRAMとSDカードをNucleo-STM32F401REボードに接続し、SPIを2ch使用している。SPIベースのSDカードと,SPI I/F仕様のFRAMを接続した。
SDカードはSPI1を使用し、FRAMはSPI3を使用する。SPI3の場合、Nucleoボードの拡張コネクタであるMorphoコネクタを使用する。通常のArduinoピンヘッダだけでは、引き出せる拡張機能が限定されてしまうが、Morphoコネクタを搭載することで、より多くの拡張機能を使えることができる。Morphoコネクタのピンを有効にするには、pinmap.h
を取り込むことを忘れないようにしよう。
デモ環境のソフトウェアは、図6のような階層構造を取っている。今回の場合、ファイルシステムのAPIとFRAMアクセス用のAPIは書き込み処理部のみまとめた。それ以外は、それぞれ独立した構成にしてある。
実際に、ソースコード見てもらえれば、それほど複雑な作りにはなっていない。ただ、書き出しデータをjson形式風にしようと考えたので、その記述部分のみ複雑に見えるかもしれないが、それは改変してもらって構わない。バッファは1面のみとした。
動画では、実際にファイルシステムとFRAMを併用する場合と、そうでない場合のファイル操作とデータの保護をご覧いただいた。電源瞬断を再現する時には、このループ処理中にボードに挿してあるUSBケーブルを抜くことで、全体の電源を落とす。PCでSDカードのファイルシステムを確認することで、実際に書き込まれたファイルと、書き込まれなかったファイルを確認した。また、FRAM Dump Utilityを使用して、FRAMのメモリ内容を確認することができる。電源瞬断の発生有無やファイルシステムの同期結果などがFRAM上に残されているので、それを解析することで、より詳しい状況を把握することができる。さらに、応用例として「いつ」、「どこで」、「何が起きたか?」をFRAM上に記録すれば、機器の信頼性向上に役立てられるのではないだろうか?
デモ環境
ハードウェア
その他部品:ブレッドボード、microSDスロットボード、microSDメモリ、配線等
ソフトウェア
FRAM SPI Library [Mbed]
FRAM Memory Dump Utility [Mbed]
APS FRAM SDFilesystem Logger Application [Mbed]
MB85RSxx_SPIは、SPI用FRAMのライブラリである。FRAM Memory Dump Utilityは、FRAMのメモリ内容を表示するアプリだ。本アプリは特定アドレスのみのメモリ表示をするので、自由に改変して構わない。SDFilesystem Loggerアプリケーションは、動画でも紹介しているアプリケーションコードなので、こちらも自由に参照して活用してもらいたい。
こちらも是非
“もっと見る” 実験室
組み込みアプリを止めるな!printfやブレークポイントも使わず内部状態をチェック!
産業機器、オーディオ製品、通信デバイスをはじめとする多くの組み込みアプリケーションは、わずかなタイミングの違いで動きが変化します。そのため、開発・検証のためにprintfなどを仕掛けることが難しく、開発効率が伸び悩むケースも増えています。そこで今回の実験室では、システムを止める事なく内部状態を取得できるデータ計測ツール「EVRICA」を紹介いたします。組み込みアプリケーションの開発や検証に欠かせない、新しい開発ツールです。
IoTエッジコンピューティングをSmartMeshで実践
今回の実験は、Moteに内蔵されている非力なマイコンを使って、振動計測ソリューションのFFTデータをSmartMeshで送信したIoTエッジコンピューティングを実践してみました。
非絶縁型中間バスコンバータ750Wで、48Vと12Vを自由自在
VicorのNBMシリーズの最新デバイスであるNBM2317シリーズは、23×17×7mmという超小型パッケージで最大750W出力、48V→12Vまたは、12V→48Vの双方向において98%のピーク効率を実現した非絶縁型中間バスコンバータ。今回の実験室は、実際に動かしつつ、その性能とメリットを解説している。その様子は、是非動画で見て欲しい。