HOME > ソフテックだより > 第91号(2009年6月3日発行) 技術レポート「マイコンによるNOR型フラッシュメモリ制御」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第91号(2009年6月3日発行)
技術レポート

「マイコンによるNOR型フラッシュメモリ制御」

1. はじめに

ソフテックだより第59号では、マイコンシステムの基礎知識として、マイコンによるSRAM(Static Random Access Memory)、SDRAM(Synchronous DynamicRandom Access Memory)制御について簡単に紹介しました。本号では、その続編として、マイコンによるフラッシュメモリ(Flash memory、フラッシュROMとも呼ばれる)の制御について、簡単に説明したいと思います。

2. NOR型フラッシュメモリとNAND型フラッシュメモリ

昨今、パソコンなどのデータストレージとしてSSD(Solid State DriveまたはSolid State Disk)が注目を集めています。これらは、大容量で安価なNAND型フラッシュメモリを使用しています。NAND型フラッシュメモリは、CLE(Command Latch Enable)信号やALE(Address Latch Enable)信号といった特別な信号線を使用したDRAM制御に類似のアクセス方式を採用しており、ブロック単位でしか読み出しができないなどの理由から、現在のところ一部のマイコンでしかコントローラを搭載していません。
一方のNOR型フラッシュメモリは、1バイト単位の読み出しが可能で、SRAMなどと同じアクセス方式に対応していることから、マイコンを用いたシステムでは広く普及しています。本号では、このNOR型フラッシュメモリに焦点を絞って、説明を行います。

3. NOR型フラッシュメモリ制御

3-1. 特徴

  • メモリからの読み出しはSRAMなどと同様に1バイト単位のアクセスが可能
  • メモリの消去(イレーズ)、書き込み(プログラム)は、基本的にコマンド入力によるブロック単位での操作が必要
  • イレーズ、プログラム等のコマンドにはメーカーにより、若干の違いがある
  • 書き込み動作が低速である(メーカーによっては独自の高速書き込み方式をサポートしている)

リードアクセスについては、SRAMインタフェースを搭載しているマイコンであれば、ソフト的には何も意識することなくアクセスが可能です。しかし、フラッシュへの書き込み(プログラム)に関しては、コマンド入力が必要となるため、ドライバソフトが必要となります。また、プログラム時には0→1のデータ書き込みを行うことができないため、必ず書き込み対象のセクタをイレーズ(対象領域のデータがすべて0xFFFFとなる)してからプログラムする必要があります。

3-2. 端子

16ビットバスのNOR型フラッシュメモリを例に、各端子(マイコンと接続する主要な端子のみ)の機能について下表に説明します。
端子名はメーカーにより多少の違いがあります。

端子 名称 入出力 機能
A0 〜 An Address 入力 アドレス入力。メモリサイズによりアドレス線の数nは異なります。例えば、16ビットデータバスで、n = 23のときはメモリサイズ256Mbとなります)
DQ0 〜 DQ15 Data 入力/出力 データ入出力。8ビットバスの場合はDQ7までとなります。
CE# Chip enable 入力 デバイスのセレクト信号。本信号がアサート(assert、負論理の場合Low入力)されている期間のみ、他の信号線の入出力が有効となります。
WE# Write enable 入力 デバイスへの書き込み許可信号。本信号がアサートされている期間は、ライトサイクルであると認識されます。その逆に、ネゲート(negate、負論理の場合High入力)期間中は、リードサイクルとなります。
OE# Output enable 入力 デバイスからのデータ出力許可信号。本信号がアサートされている期間は、デバイス(フラッシュメモリ)からのデータ出力が許可されます。通常、本端子はマイコンのRD#端子と接続されます。
RY/BY# Ready/Busy 出力 レディ/ビジー信号。フラッシュメモリ内部処理の進行中/完了ステータスを示します。本信号がLOW出力のとき、フラッシュメモリはプログラム動作中またはイレーズ動作中のため、次のコマンドを受け付けることができません。

表1. NOR型フラッシュメモリ端子機能

3-3. リードアクセスタイミング

NOR型フラッシュメモリへのリードアクセス時におけるタイミングチャート例を下図に示します。SRAM等のアクセスと同様に、バスクロックが早すぎて、ノンウェイト(通常、2ステートアクセス)時にフラッシュメモリ推奨のアクセスタイムを守れない場合は、マイコンの設定でウェイトサイクルを挿入することができます。

NOR型フラッシュメモリのリードアクセスタイミング例です。
図1. NOR型フラッシュメモリ リードアクセスタイミング例(3ステートアクセス)

ライトアクセス時のタイミングチャートは、基本的にはリード時(図1)と同じような内容となります(OE#の代わりにWE#がアサートされる)。しかし、フラッシュメモリの書き換え(プログラム)にはコマンドの入力が必要となりますので、SRAMのように1サイクルで書き込みを行うことはできません。

3-4. コマンド方式

先に述べたとおり、メモリの消去(イレーズ)、書き込み(プログラム)などの操作は、コマンド入力により行います。コマンドには、フラッシュメモリメーカーごとにいくつか種類が存在しますが、代表的なものにJEDEC(Joint Electron Device Engineering Council)標準型コマンド方式とIntel系CUI(Common User Interface)コマンド方式があります。
プログラムおよびセクタイレーズ(ブロックイレーズ)時の入力コマンドについて、JEDEC標準型コマンド方式とCUIコマンド方式での具体例を下表にまとめます。コマンドアドレス/データの違いのほか、コマンド入力に必要なサイクル数にもそれぞれ違いがあります。
JEDEC標準型コマンド方式は、Hynix、Macronix、SPANSION、STマイクロエレクトロニクス、東芝などのメーカーが採用している方式です。一方、CUIコマンド方式は、Intel、シャープなどのメーカーが採用しています。

なお、JEDEC標準型コマンド方式におけるアドレスコマンド入力には若干注意が必要です。マイコンとフラッシュメモリを16ビットバス接続して使用する場合、ハード的にマイコンのアドレスバスとフラッシュメモリのアドレスバスを1bitずらして接続する場合があります(例えば、マイコン側のA22〜A1をフラッシュメモリのA21〜A0に接続するような場合)。このような場合は、下表のバスサイズ”Word”側のアドレスコマンドを入力してしまうと、正常にプログラム/イレーズができません。1bit左シフトしたアドレスコマンドを入力する必要があります。


バス
サイズ
1stサイクル 2ndサイクル 3rdサイクル 4thサイクル 5thサイクル 6thサイクル
Addr Data Addr Data Addr Data Addr Data Addr Data Addr Data
プログラム Word 555H AAH 2AAH 55H 555H A0H プログラム
アドレス
プログラム
データ
       
Byte AAAH 555H AAAH    
セクタ
イレーズ
Word 555H AAH 2AAH 55H 555H 80H 555H AAH 2AAH 55H セクタ
アドレス
30H
Byte AAAH 555H AAAH AAAH 555H

表2. プログラム/イレーズ時入力コマンド(JEDEC標準型コマンド方式)


バス
サイズ
1stサイクル 2ndサイクル 3rdサイクル 4thサイクル 5thサイクル 6thサイクル
Addr Data Addr Data Addr Data Addr Data Addr Data Addr Data
プログラム Word プログラム
アドレス
40H プログラム
アドレス
プログラム
データ
               
Byte      
ブロック
イレーズ
Word ブロック
アドレス
20H ブロック
アドレス
D0H                
Byte      

表3. プログラム/イレーズ時入力コマンド(CUIコマンド方式)

3-5. プログラムシーケンス

プログラムシーケンス実行時のタイミングチャートを下図に示します。
先に挙げたJEDEC標準型コマンド方式とCUIコマンド方式では、それぞれ入力コマンドなどに違いはありますが、基本的な流れは同じです。まず、各方式に従って、コマンドとプログラムデータのライトを行います。その後、フラッシュメモリ内部の書き込み処理が完了するまで一定の時間を要しますが、書き込みが正常に完了したことをチェックするためにステータス情報の読み込みを行います。内部処理の完了については、RY/BY#信号の状態でも確認することは可能ですが、正常にプログラム完了できなかった場合のエラー情報を確認するにはステータス情報を解析する必要があります。

プログラムシーケンスの一部です。
図2. NOR型フラッシュメモリ プログラムシーケンス例

3-6. セクタイレーズシーケンス

セクタイレーズシーケンス実行時のタイミングチャートを下図に示します。
基本的な流れは、プログラムシーケンス時と変わりません。イレーズ時も、フラッシュメモリ内部の消去処理が完了したことを確認するため、ステータス情報のチェックを行います。なお、イレーズシーケンスの最後に入力するセクタアドレスは消去対象セクタ内に含まれる任意のアドレスで構いません。NOR型フラッシュメモリのセクタ数やセクタ境界アドレスは、メモリサイズやメーカーによって異なりますので、必ずデータシート等で確認してください。

セクタイレーズシーケンスの一部です。
図3. NOR型フラッシュメモリ セクタイレーズシーケンス例

3-7. NOR型フラッシュメモリをマイコンで制御する際の注意点

マイコンから外付けのNOR型フラッシュメモリに書き込みを行わず、データを読み出すだけであれば、基本的な注意点はSRAMを使用する際と全く同じになります。外部メモリ使用時に必要となるレジスタ設定(接続するエリアとデータバス幅の設定、プログラマブルウェイトの挿入設定)を最適化すればよいだけです。
フラッシュメモリのデータ書き換えをマイコンで行う場合は、前述のプログラムシーケンス、イレーズシーケンス等を実行するためのデバイスドライバが必要となります。また、ここでは一部のコマンドのみの説明となりましたが、この他にも、デバイスID取得、プログラム/イレーズの一時停止(サスペンド)、プログラム/イレーズの再開(レジューム)、メーカー独自の高速書き込み、などの多数のコマンドが存在します。開発するシステムに応じて、書き込み、消去以外のドライバ機能を実装する必要があります。

4. NOR型フラッシュメモリ選定時の注意点

昨今の半導体不況に伴い、フラッシュメモリ業界再編に関するニュースがちらほらと聞こえてくるようになりました。既存システムで使用しているフラッシュメモリの供給停止に備え、代替品の選定を考えている方も多いのではないでしょうか。
極力ソフト変更は行わずにフラッシュメモリを交換したい場合は、以下のような点に注意して代替品の選定を行う必要があります。

  • フラッシュメモリのタイミング特性に大きな差はないか?
    代替品の応答速度が前のものに比べて速い/遅い場合には、プログラマブルウェイトの設定などを最適化する必要があります。
  • 対象のシステムではフラッシュメモリのデータ書き換え機能を具備しているか?
    フラッシュメモリの書き換えを行っていないのであれば、マイコンのレジスタ設定値変更のみで対応可能となる可能性があります。
  • フラッシュメモリのメモリサイズ、セクタ数は同一か?
    セクタごとにデータの配置を規定して書き込みを行っているシステムでは、データの配置変更が必要になります。
  • フラッシュメモリのコマンド方式は同一か?
    JEDEC標準型コマンド方式からCUIコマンド方式への変更など、コマンド方式が変わる場合はドライバの修正が必要になります。
  • 対象のシステムでは、メーカー固有のコマンドを使用していないか?
    メーカー独自の高速書き込みコマンド等を使用している場合は、別メーカー品への変更によりドライバの修正が必要になります。

また、これから新規に開発を行うシステムにフラッシュメモリを採用する予定であれば、万が一、供給停止となった場合に備えて汎用的なドライバを開発しておくことも大切です。コマンド方式の切り替えを可能とする、セクタアドレス情報をテーブル化して差し替え可能とする、などの対策をあらかじめ組み込むことで、フラッシュメモリの変更にも、ある程度柔軟に対応できるようになります。

5. 最後に

今回は、ソフテックだより第59号の続編として、マイコンによるフラッシュメモリ制御について取り上げましたが、いかがだったでしょうか。NOR型フラッシュメモリについての説明が中心となってしまいましたが、先に挙げたSSDの普及などに伴い、NAND型フラッシュメモリの高集積化、低価格化が急速に進んでいるようです。個人的には、今後、組み込み用途向けでも、ますますNAND型フラッシュメモリを採用する事例が増えてくるのではないかと思っています(書き換え可能回数の減少、データ保持時間の短縮など品質面で気になる話もありますが・・・)。今後、機会があればNAND型フラッシュメモリについても詳しく紹介したいと思います。

なお、ここではNOR型フラッシュメモリ制御について、特定のメーカー品に関してではなく、あくまでも一般的な内容を取り上げました。実際のシステム開発、運用に際しては、対象フラッシュメモリのデータシートやマイコンのハードウェアマニュアルを熟読されることをお勧めします。

(T.S.)

[参考文献]
山武一朗、横田敬久、
「NOR型フラッシュROM搭載マイコン・システムの設計事例」 Interface Mar. 2007
桑野雅彦、
「NAND型フラッシュROMの使い方」 Interface Mar. 2007

関連ページへのリンク

関連するソフテックだより

ページTOPへ