図1は、本発明に係るメモリ制御装置を含む情報処理装置10の構成を示すブロック図である。図1に示すように、情報処理装置10は、CPU(Central Processing Unit)11、インタフェース部12、RAM(Random Access Memory)13、フラッシュメモリ14、CPUバス15、パワーオンリセット生成部16、オアゲート17及び内部リセット生成部18を含む。
CPU11は、CPUバス15を介してインタフェース部12、RAM13及び内部リセット生成部18に接続されている。CPU11は、CPUバス15及びインタフェース部12を介してフラッシュメモリ14に対してデータの読出し・書き込みアクセスを行う。
すなわち、CPU11は、フラッシュメモリ14に格納されているプログラムデータ(図示せず)、つまり情報処理装置10の主機能を実現する為の主プログラムをインタフェース部12を介して読み出し、この主プログラムに従った主制御を実行する制御部である。更に、CPU11は、フラッシュメモリ14に格納されているリフレッシュプログラムデータ及びメモリチェックプログラムデータをインタフェース部12を介して読み出し、このリフレッシュプログラムデータに従ったリフレッシュ処理及びメモリチェックプログラムデータに従ったメモリチェック処理を実行する。このリフレッシュ処理は、対象のメモリブロックから符号化データ片を読み出し、誤り訂正処理を施して異なるメモリブロックに書き込む処理である。またメモリチェック処理は、フラッシュメモリ14内に記憶されたデータを正しく読み出せるか否かを検査する処理である。尚、リフレッシュ処理及びメモリチェック処理の詳細については後述する。
インタフェース部12は、エラー検出訂正部20、ステータスレジスタ21及びメモリチェック領域指定レジスタ22を含む。エラー検出訂正部20は、後述するメモリチェック処理の対象となるメモリブロック(以下、単にブロックと称する)のチェック対象のページ(以下、オフセットページと称する)に含まれるエラーを検出する。また、エラー検出訂正部20は、指定されたブロックについて、エラーの訂正を行う。ステータスレジスタ21は、エラー検出訂正部20が検出したエラーのビット数等の情報を保持する。メモリチェック領域指定レジスタ22は、メモリチェック処理の対象として指定されたメモリ領域を示す情報を保持する。また、インタフェース部12は、フラッシュメモリ14に対する読み出し、書き込み等のアクセス用の制御情報を有する。インタフェース部12が有するこれらの制御情報は、リセット信号Rに応じてリセット(初期化)される。
RAM13は、記憶部としてのパワーオンリセットチェック領域30を含む。パワーオンリセットチェック領域30には、電源投入後の最初のリセット信号であるパワーオンリセット信号PRを受信したことを示す情報として例えば1バイトの値「0x5A」(パワーオンリセット済コード)が、CPU11によって書き込まれる。一旦「0x5A」が書き込まれると、パワーオンリセットチェック領域30は、電源がオフになるまで「0x5A」の値を保持する。また、RAM13には、ページ/ブロック情報31が格納される。ページ/ブロック情報31は、図2(a)に示すように、ブロックアクセス回数情報301、リフレッシュ対象ブロック情報302、メモリチェック対象ブロック情報303及びメモリチェック対象オフセットページ情報304を含む。
フラッシュメモリ14は、図3(a)に示すように、1ブロックがK個のページ1〜K(K;自然数)からなる、L個のブロック1〜L(L;自然数)のアクセス領域に区分けされている。また、フラッシュメモリ14は、管理情報40を記憶する領域を有する。管理情報40は、図2(b)に示すように、ブロックアクセス回数情報401、リフレッシュ対象ブロック情報402及びメモリチェック対象ブロック情報403を含む。
ブロックアクセス回数情報301及び401は、フラッシュメモリ14の各ブロックに対するリードアクセスの累積回数をブロック毎に示す情報である。尚、ブロックアクセス回数情報の更新処理については後述する。
パワーオンリセット生成部16は、情報処理装置10の電源投入時に1パルスのリセット信号PR(第1リセット信号)を生成し、これをオアゲート17に供給する。内部リセット生成部18は、主制御の実行時に発令されたリセット要求指令、又はプログラムタイマ(図示せず)によるタイムアウトエラーに応じて1パルスのリセット信号IR(第2リセット信号)を生成し、これをオアゲート17に供給する。オアゲート17は、パワーオンリセット生成部16からリセット信号PRが供給された場合には、これをリセット信号R(初期化信号)としてCPU11及びインタフェース部12に供給する。また、オアゲート17は、内部リセット生成部18からリセット信号IRが供給された場合には、これをリセット信号RとしてCPU11及びインタフェース部12に供給する。
CPU11は、リセット信号Rに応じて、図4に示す起動チェックルーチンに従って、起動チェック処理を実行する。起動チェック処理は、リフレッシュ処理、メモリチェック処理及びこれらの処理を行うか否かの判定処理を含む処理である。
まず、CPU11は、RAM13のパワーオンリセットチェック領域30に保持されている値が「0x5A」であるか否かを判定する(ステップS1)。ステップS1においてパワーオンリセットチェック領域30に保持されている値が「0x5A」であると判定された場合、CPU11は、受信したリセット信号Rがパワーオンリセット信号PRに基づくものではないと判定して、この起動チェックルーチンを終了する。他方、ステップS1においてパワーオンリセットチェック領域30に「0x5A」が保持されていないと判定した場合、CPU11は、受信したリセット信号Rがパワーオンリセット信号PRに基づくものであると判定して、RAM13のパワーオンリセットチェック領域30に「0x5A」を書き込む(ステップS2)。
次に、CPU11は、インタフェース部12を介してフラッシュメモリ14から図2(b)に示す管理情報40を読み出し、これをページ/ブロック情報31としてRAM13に書き込む(ステップS3)。これにより、管理情報40中のブロックアクセス回数情報401が、ブロックアクセス回数情報301としてRAM13に格納される。また、管理情報40中のリフレッシュ対象ブロック情報402が、リフレッシュ対象ブロック情報302としてRAM13に格納される。さらに、メモリチェック対象ブロック情報403が、メモリチェック対象ブロック情報303としてRAM13に格納される。
CPU11は、RAM13に格納されているブロックアクセス回数情報301に基づき、フラッシュメモリ14内の対象ブロック(例えば、ブロック1)のリードアクセスの回数が第1のアクセス閾値TA1を越えているか否か、すなわちTA1よりも大きいか否かを判定する(ステップS4)。なお、このステップS4における判定は、リフレッシュ対象ブロック情報の追加及び保存処理を経て、ブロック1〜ブロックLの全てのブロックについて行われる。
ステップS4の判定の結果、対象ブロックのリードアクセスの回数が第1のアクセス閾値TA1よりも大きかった場合、CPU11は、当該ブロックをリフレッシュ対象ブロックとして、リフレッシュ対象ブロック情報302に追加する(ステップS5)。また、CPU11は、当該情報をリフレッシュ対象ブロック情報402としてフラッシュメモリ14に保存する(ステップS6)。
一方、ステップS4の判定の結果、対象ブロックのリードアクセスの回数が第1のアクセス閾値TA1を越えていなかった場合、CPU11は、対象ブロックのリードアクセスの回数が第2のアクセス閾値TA2(TA2<TA1)よりも大きいか否かを判定する(ステップS7)。
ステップS7の判定の結果、対象ブロックのリードアクセスの回数が第2のアクセス閾値TA2よりも大きかった場合、CPU11は、当該ブロックをメモリチェックの対象領域として、インタフェース部12のメモリチェック領域指定レジスタ22に設定する(ステップS8)。ステップS8の実行後、CPU11は、メモリチェックの対象ブロックについて、図5に示すメモリチェック対象オフセットページの更新処理を実行する(ステップS9)。
図5は、かかるメモリチェック対象オフセットページ更新処理のルーチンを示すフローチャートである。CPU11は、まずRAM13に記憶されているメモリチェック対象オフセットページ情報304にて示される番号を1だけインクリメントした番号を、新たなメモリチェック対象オフセットページを示すページ番号としてRAM13のメモリチェック対象オフセットページ情報304に上書き記憶させる(ステップS21)。例えば、ページ番号「N」が記憶されていた場合、これに1をインクリメントしたページ番号「N+1」を新たなページ番号として上書き記憶させる。次に、CPU11は、インクリメントされたページ番号が最終ページの番号Kを超えたか否かの判定を行う(ステップS22)。ステップS22において最終ページの番号Kを超えたと判定された場合、つまりメモリチェック対象ブロック内でのメモリチェック処理が全て終了している場合には、CPU11は、RAM13に記憶されているメモリチェック対象オフセットページ情報304のページ番号を0に設定する(ステップS23)。
図4におけるメモリチェック対象オフセットページ情報更新処理(ステップS9)の実行後、CPU11は、指定メモリ領域のメモリ読み出しチェック処理(メモリチェック処理)を実行する(ステップS10)。
すなわち、CPU11は、フラッシュメモリ14内のアドレスを指定して、読み出し指令信号をインタフェース部12に供給する。インタフェース部12は、かかる読み出し指令信号に応じて、指定されたアドレスに対応したページに記憶されている符号化データ片を、フラッシュメモリ14から読み出す。インタフェース部12のエラー検出訂正部20は、かかる符号化データ片に対してエラー検出処理を実行し、エラービットの数を示すエラー情報を生成する。CPU11は、かかるエラー情報を、エラーの検出された符号化データ片が保持されているフラッシュメモリ14内のブロックの番号と対応付けて、インタフェース部12のステータスレジスタ21に記憶させる。
なお、メモリチェック処理は、図3(b)に示すように、ページ数をインクリメントしつつ、対象ブロック(例えば、ブロックM)のKページ目までの全てのページについて行われる。
CPU11は、ステップS10の指定メモリ領域のメモリ読出しチェック処理中に、図6に示すようなエラー発生確認処理を実行する。
CPU11は、ステータスレジスタ21に記憶されているエラー情報に基づいて、エラービットの数が第1のエラー閾値TE1を越えているか否か、すなわちTE1よりも大きいか否かを判定する(ステップS31)。この第1のエラー閾値TE1は、誤り訂正処理によって訂正可能なエラービット数の限界値に近い値であり、リフレッシュ処理が必要なビット数の目安となる数値である。
エラービットの数が第1のエラー閾値TE1よりも大きいと判定された場合、CPU11は、当該ブロックをRAM13のリフレッシュ対象ブロック情報302に追加する(ステップS32)。また、CPU11は、当該情報をリフレッシュ対象ブロック情報402としてフラッシュメモリ14に保存する(ステップS33)。
一方、ステップS31においてエラービットの数が第1のエラー閾値TE1を越えていないと判定された場合、CPU11は、エラービットの数が第2のエラー閾値TE2(TE2<TE1)よりも大きいか否かを判定する(ステップS34)。この第2のエラー閾値TE2は、リフレッシュ処理が必要な数には至らないものの経過観測が必要なエラービット数の目安となる数値である。
エラービットの数が第2のエラー閾値TE2を越えていないと判定された場合、CPU11は、RAM13のメモリチェック対象ブロック情報303から当該ブロックをクリアする(ステップS35)。これに対し、エラービットの数が第2のエラー閾値TE2よりも大きいと判定された場合、CPU11は、当該ブロックのクリアを行わない。すなわち、RAM13は従前のメモリチェック対象ブロック情報303をそのまま保持する。
図4に示すステップS10において、CPU11は以上のようなエラー発生確認ルーチンを含む指定メモリ領域のメモリ読出しチェック処理を実行する。
一方、ステップS7において、対象ブロックのリードアクセスの回数が閾値TA2を越えていないと判定された場合、CPU11は対象ブロックがインタフェース部12のメモリチェック領域指定レジスタ22に登録されているか否かを判定する(ステップS11)。この判定処理は、対象ブロックが、例えば前回の起動チェック処理時にメモリチェック処理の対象領域としてレジスタに登録されたにもかかわらず不慮の動作によってメモリチェック処理がなされなかったメモリブロックに該当するか否かを判定する処理である。メモリチェック領域指定レジスタ22に登録されていると判定された場合、CPU11は、ステップS9のメモリチェック対象オフセットページの更新処理の実行に移る。
ステップS11において対象ブロックがメモリチェック領域指定レジスタ22に登録されていないと判定された場合、又はリフレッシュ対象ブロック情報402のフラッシュメモリ14への保存処理(ステップS6)若しくは指定メモリ領域のメモリ読み出しチェック処理(ステップS10)の実行後、CPU11は、ブロックアクセス回数情報オフセットの更新処理を実行する(ステップS12)。
図7は、ブロックアクセス回数情報オフセットの更新処理のルーチンを示すフローチャートである。
CPU11は、まずRAM13に記憶されているブロックアクセス回数情報301にて示される対象ブロック番号を1だけインクリメントした番号を、アクセス回数のチェック対象としての新たなブロック番号として設定する(ステップS41)。例えば、アクセス回数のチェック対象がブロック番号「M」であった場合、これに1をインクリメントしたブロック番号「M+1」を新たなブロック番号として設定する。次に、CPU11は、インクリメントされたブロック番号が最終ブロックの番号Lを超えたか否かの判定を行う(ステップS42)。ステップS42において最終ブロックの番号Lを超えたと判定された場合、つまり全ブロックのアクセス回数のチェックが全て終了している場合には、CPU11は、ブロックアクセス回数情報のオフセットを0に設定する(ステップS43)。
CPU11は、ステップS4〜S12のチェック処理が全ブロックについて完了したか否かを判定する(ステップS13)。完了したと判定すると、CPU11は、リフレッシュ処理(ステップS14)の実行に移る。完了していないと判定すると、CPU11は、ステップS4に戻って、ステップS4〜S12の処理を再び実行する。
図8は、リフレッシュ処理のルーチンを示すフローチャートである。CPU11は、RAM13のリフレッシュ対象ブロック情報302に基づき、リフレッシュ対象ブロックがあるか否かを判定する(ステップS51)。リフレッシュ対象ブロックがないと判定した場合、CPU11は、このリフレッシュ処理を終了する。
リフレッシュ対象ブロックがあると判定した場合、CPU11は、インタフェース部12に対してリフレッシュ処理の実行命令を送出する(ステップS52)。
すなわち、インタフェース部12は、まずリフレッシュ処理の対象ブロックから符号化データ片を読み出す。インタフェース部12のエラー検出訂正部20は、かかる符号化データ片に対して誤り訂正処理を施す。インタフェース部12は、誤り訂正処理の施された1ブロック分の符号化データ片を、当該符号化データ片が保持されていたブロックとは異なるブロックに書き込む。
CPU11は、リフレッシュ処理を実施したブロックの番号を、RAM13のリフレッシュ対象ブロック情報302から削除する(ステップS53)。また、CPU11は、当該ブロックの番号のアクセス回数を0に設定して(ステップS54)、RAM13のブロックアクセス回数情報301を更新する。
図4に示すリフレッシュ処理(ステップS14)の実行後、CPU11は、インタフェース部12を介してフラッシュメモリ14の管理情報40の更新処理を実行する。この管理情報40の更新処理には、ブロックアクセス回数情報401の更新処理が含まれる。
図9は、かかるブロックアクセス回数情報更新処理のルーチンを示すフローチャートである。CPU11は、フラッシュメモリ14に対してリードアクセスがあったか否かを判定する(ステップS61)。リードアクセスがないと判定した場合、CPU11は、このブロックアクセス回数情報更新処理を終了する。
リードアクセスがあると判定した場合、CPU11は、リードアクセスがあったブロックのアクセス回数をインクリメントする(ステップS62)。また、CPU11は、全ブロックに対するリードアクセスの回数(全リードアクセス回数)をインクリメントする(ステップS63)。
CPU11は、全リードアクセス回数が第3のアクセス閾値TA3を越えたか否かを判定する(ステップS64)。TA3を越えていないと判定すると、CPU11は、このブロックアクセス回数情報更新処理を終了する。一方、TA3を越えていると判定すると、CPU11は、インクリメントしたブロックアクセス回数情報をブロックアクセス回数情報401としてフラッシュメモリ14に保存する(ステップS65)。
以上のように、上記した起動チェック処理では、まずフラッシュメモリ14内の各メモリブロックに対するリードアクセスの回数に応じて、対象ブロックに対してリフレッシュ処理及びメモリチェック処理を行うか否かを判別する。そして、リードアクセスの回数が第1のアクセス閾値TA1を越えている場合にはリフレッシュ処理を行い、第1のアクセス閾値TA1は越えていないものの第2のアクセス閾値TA2を越えている場合にはメモリチェック処理を行う。つまり、リードアクセスの回数が第2のアクセス閾値TA2を超えていない場合には、メモリチェック処理及びリフレッシュ処理を行わないようにしたのである。これにより、アクセス回数が少ないメモリブロックに対しては処理がなされないため、メモリチェック処理及びリフレッシュ処理の実行に要する時間を短縮することができる。
また、上記した起動チェック処理では、RAM13において更新したブロックアクセス回数情報301をブロックアクセス回数情報401としてフラッシュメモリ14に保存する。これにより、前回の起動チェック処理時のブロックアクセス回数及び累積したブロックアクセス情報が取得可能となり、的確なブロックアクセス回数に基づいた起動チェック処理、リフレッシュ処理及びメモリチェック処理の実施が可能となる。
また、上記した起動チェック処理では、RAM13において更新したリフレッシュ対象ブロック情報302をリフレッシュ対象ブロック情報402としてフラッシュメモリ14に保存する。これにより、前回の起動チェック処理時のリフレッシュ対象ブロック情報を取得することができるため、リフレッシュ対象ブロック情報に登録されているものの不慮の動作等により前回の起動チェック時にリフレッシュ処理が実施されなかったブロックに対して、リフレッシュ処理を行うことが可能となる。
また、上記した起動チェック処理では、RAM13において更新したメモリチェック対象ブロック情報303をメモリチェック対象ブロック情報403としてフラッシュメモリ14に保存する。これにより、メモリチェック対象ブロック情報に登録されているものの不慮の動作等により前回の起動チェック時にメモリチェック処理が実施されなかったブロックに対して、メモリチェック処理を行うことが可能となる。また、前回の起動チェック処理時のメモリチェック対象ブロック情報から継続してエラービット数が第2のエラー閾値TE2を越えているブロックに対して、メモリチェック処理を行うことが可能となる。
また、上記した起動チェック処理では、RAM13のパワーオンリセットチェック領域30に保持されている値に基づき、リセット信号Rがパワーオンリセット信号PRに基づくものであるか否かを判別する。そして、パワーオンリセット信号PRに基づくリセット信号Rを受けた場合のみ、起動チェック処理を行う。つまり、内部リセット信号IRに基づくリセット信号Rを受けた場合は、リフレッシュ処理及びメモリチェック処理を実行するか否かの判定を行わないようにしたのである。これにより、電源投入直後を除き、フラッシュメモリ14へのアクセス時における起動チェック処理、メモリチェック処理及びリフレッシュ処理を実行する為の待機状態が無いため、フラッシュメモリ14に対して常に高速アクセスを行うことが可能となる。さらに、電源投入直後にのみ起動チェック処理、メモリチェック処理及びリフレッシュ処理を行うため、頻繁にこれらの処理を行うことに起因するメモリの劣化を抑えることができる。
実施例2にかかる情報処理装置は、各部の構成については図1に示す実施例1の情報処理装置10と同様であり、ページ/ブロック情報31としてRAM13に格納される情報及び管理情報40としてフラッシュメモリ14に記憶される情報が実施例1の情報処理装置10と異なる。また、実施例1の起動チェック処理と同様のリフレッシュ処理及びメモリチェック処理の判定処理を行う第1のモードの他に、後述する優先メモリチェック処理を行う第2のモードを備える点で実施例1の情報処理装置10と異なる。以下、実施例1と異なる部分及び動作について説明する。
図11(a)に示すように、RAM13に格納されるページ/ブロック情報31は、301〜304の各情報に加えて、優先メモリチェック対象ブロック情報305及び優先メモリチェック対象オフセットページ情報306を含む。
図11(b)に示すように、フラッシュメモリ14に記憶される管理情報40は、401〜403の各情報に加えて、チェック対象オフセットページ情報404及び優先メモリチェックブロック情報405を含む。
CPU11は、リセット信号Rに応じて、図12に示す起動チェックルーチンに従って、第1モード処理又は第2モード処理を実行する。
まず、CPU11は、RAM13のパワーオンリセットチェック領域30に保持されている値が「0x5A」であるか否かを判定する(ステップS1)。ステップS1においてパワーオンリセットチェック領域30に保持されている値が「0x5A」であると判定された場合、CPU11は、受信したリセット信号Rがパワーオンリセット信号PRに基づくものではないと判定して、この起動チェックルーチンを終了する。他方、ステップS1においてパワーオンリセットチェック領域30に「0x5A」が保持されていないと判定した場合、CPU11は、受信したリセット信号Rがパワーオンリセット信号PRに基づくものであると判定して、RAM13のパワーオンリセットチェック領域30に「0x5A」を書き込む(ステップS2)。
次に、CPU11は、インタフェース部12を介してフラッシュメモリ14から図11(b)に示す管理情報40を読み出し、これをページ/ブロック情報31としてRAM13に書き込む(ステップS3)。これにより、管理情報40中のブロックアクセス回数情報401、リフレッシュ対象ブロック情報402、メモリチェック対象ブロック情報403、チェック対象オフセットページ情報404及び優先メモリチェック対象ブロック情報405が、それぞれブロックアクセス回数情報301、リフレッシュ対象ブロック情報302、メモリチェック対象ブロック情報303、メモリチェック対象オフセットページ情報304及び優先メモリチェック対象ブロック情報305としてRAM13に格納される。
CPU11は、RAM13に格納されているブロックアクセス回数情報301に基づき、フラッシュメモリ14内の全ブロックに対するリードアクセスの回数の合計数が第5のアクセス閾値TA5を越えているか否か、すなわちTA5よりも大きいか否かを判定する(ステップS4)。
第5のアクセス閾値TA5を越えていると判定された場合、CPU11は、第1モード処理を実行する(ステップS5)。この第1モード処理は、実施例1における起動チェック処理の図4のステップS4〜S14に相当する処理である。したがって、ここでは第1モード処理についての説明は省略する。
一方、全ブロックに対するリードアクセスの回数の合計が第5のアクセス閾値TA5を越えていないと判定された場合、CPU11は、第2モード処理の実行に移る(ステップS6)。
図13は、第2モード処理のルーチンを示すフローチャートである。まず、CPU11は、RAM13に格納されている優先メモリチェック対象ブロック情報305に基づき、フラッシュメモリ14内の対象ブロック(例えば、ブロック1)が優先メモリチェックの対象ブロックか否かを判定する(ステップS11)。なお、このステップS11における判定は、後述するメモリチェック対象ブロック及びオフセットページ情報更新処理を経て、ブロック1〜ブロックLの全てのブロックについて行われる。
ステップS11の判定の結果、対象ブロックが優先メモリチェックの対象ブロックであった場合、CPU11は、当該ブロックを優先メモリチェック対象領域として、インタフェース部12のメモリチェック領域指定レジスタ22に設定する(ステップS12)。ステップS12の実行後、CPU11は、優先メモリチェック対象オフセットページ更新処理の実行に移る(ステップS13)。
図14は、かかる優先メモリチェック対象オフセットページ更新処理のルーチンを示すフローチャートである。CPU11は、まずRAM13に記憶されている優先メモリチェック対象オフセットページ情報306にて示される番号を1だけインクリメントした番号を、新たな優先メモリチェック対象オフセットページを示す番号としてRAM13の優先メモリチェック対象オフセットページ情報306に上書き記憶させる(ステップS21)。例えば、ページ番号「N」が記憶されていた場合、これに1をインクリメントしたページ番号「N+1」を新たなページ番号として上書き記憶させる。次に、CPU11は、インクリメントされたページ番号が最終ページの番号Kを超えたか否かの判定を行う(ステップS22)。ステップS22において最終ページの番号Kを超えたと判定された場合、つまり優先メモリチェック対象ブロック内での優先メモリチェック処理(後述する)が全て終了している場合には、RAM13の優先メモリチェックの対象オフセットページ情報306を初期値にクリアする(ステップS23)。ステップS23の実行後、CPU11は、メモリチェック対象ブロック及びオフセットページ更新処理の実行に移る(ステップS24)。
図15は、かかるメモリチェック対象ブロック及びオフセットページ更新処理のルーチンを示すフローチャートである。CPU11は、RAM13に記憶されているメモリチェック対象ブロック情報303が示す番号を1だけインクリメントした番号を、新たなメモリチェック対象ブロックを示す番号としてRAM13に上書き記憶させる(ステップS31)。次に、CPU11は、インクリメントされたブロック番号が最終ブロックの番号Lを超えたか否かの判定を行う(ステップS32)。ステップ32において最終ブロックの番号Lを超えたと判定された場合、つまり通常のメモリチェックの対象ブロックでのメモリチェック処理が一通り完了している場合には、CPU11は、RAM13に記憶されているメモリチェック対象ブロック情報303のブロック番号を0に設定する(ステップS33)。次に、CPU11は、RAM13に記憶されているメモリチェック対象オフセットページ情報304が示すページ番号を1だけインクリメントした番号を、新たなメモリチェック対象オフセットページを示す番号としてRAM13に上書き記憶させる(ステップS34)。次に、CPU11は、インクリメントされたページ番号が最終ページの番号Kを超えたか否かの判定を行う(ステップS35)。ステップ35において最終ページの番号Kを超えたと判定された場合、つまり通常のメモリチェックの対象ブロック内で全てのページについてメモリチェック処理が完了している場合には、CPU11は、RAM13に記憶されているメモリチェック対象オフセットページ情報304のページ番号を0に設定する(ステップS36)。
ステップS36の実行後、又はステップS32において最終ブロック番号Lを超えていないと判定された場合、あるいはステップS35において最終ページ番号Kを超えていないと判定された場合、CPU11は、図15に示すメモリチェック対象ブロック及びオフセットページ更新ルーチンを抜けて図13のステップS16の実行に移る。
一方、図13に示すステップS11において、対象ブロックが優先メモリチェックの対象ブロックではないと判定された場合、CPU11は、当該ブロックを通常のメモリチェック対象領域として、インタフェース部12のメモリチェック領域指定レジスタ22に設定する(ステップS14)。ステップS14の実行後、CPU11は、図15に示すメモリチェック対象ブロック及びオフセットページ情報更新処理の実行に移る(ステップS15)。
図13に示す優先メモリチェック対象オフセットページ情報更新処理(ステップS13)、又はメモリチェック対象ブロック及びオフセットページ情報更新処理(ステップS15)の実行後、CPU11は、指定メモリ領域のメモリ読出しチェック処理(メモリチェック処理)を実行する(ステップS16)。
すなわち、CPU11は、フラッシュメモリ14内のアドレスを指定して、読み出し指令信号をインタフェース部12に供給する。インタフェース部12は、かかる読み出し指令信号に応じて、指定されたアドレスに対応したページに記憶されている符号化データ片を、フラッシュメモリ14から読み出す。インタフェース部12のエラー検出訂正部20は、かかる符号化データ片に対してエラー検出処理を実行し、エラービットの数を示すエラー情報を生成する。CPU11は、かかるエラー情報を、エラーの検出された符号化データ片が保持されているフラッシュメモリ14内のブロックの番号と対応付けて、インタフェース部12のステータスレジスタ21に記憶させる。
なお、メモリチェック処理においては、ブロック番号をインクリメントしつつ読出し及びエラーの検出を行い、例えばブロック1のページN、ブロック2のページN、ブロック3のページN・・・という順番で、全てのブロックの対応するページを対象ページとしてメモリチェックを行う。また、最終ブロックまでメモリチェックが終わるとオフセットページをインクリメントするため、電源投入の度に異なるページに対してメモリチェック処理が行われる。
これに対し、優先メモリチェック処理においては、優先メモリチェックの対象ブロックに対して、ページ数をインクリメントしつつチェックを行う。これにより、図3(b)に示すように、例えばブロックMの全てのページについてメモリチェックが行われる。
CPU11は、ステップS16の指定メモリ領域のメモリ読出しチェック処理中に、図16に示すようなエラー発生確認処理を実行する。
図16において、CPU11は、ステータスレジスタ21に記憶されているエラー情報に基づいて、エラーが有るか否か、つまりエラービット数が1以上であるか否かを判定する(ステップS41)。エラーが無いと判定した場合、CPU11は、このエラー発生確認処理を終了する。
一方、ステップS41においてエラーが有ると判定した場合、CPU11は、ステータスレジスタ21に記憶されているエラー情報に基づいて、エラービットの数が第3のエラー閾値TE3よりも大きいか否かを判定する(ステップS42)。エラービットの数が第3のエラー閾値TE3よりも大きいと判定された場合、CPU11は、当該ブロックの番号をRAM13の優先メモリチェック対象ブロック情報305に追加する(ステップS43)。次に、CPU11は、エラービットの数が第4のエラー閾値TE4(TE4>TE3)よりも大きいか否かを判定する(ステップS44)。エラービットの数が第4のエラー閾値TE4よりも大きいと判定された場合、CPU11は、当該ブロックの番号をRAM13のリフレッシュ対象ブロック情報302に追加する(ステップS45)。
ステップS45の実行後、又はステップS44においてエラービットの数が第4のエラー閾値TE4以下であると判定された場合、CPU11は、このエラー発生確認ルーチンを終了する。
このエラー発生確認ルーチンを含む指定メモリ領域のメモリ読出しチェック処理(ステップS16)の実行後、CPU11は、メモリ読出しチェックが全ブロックについて完了したか否かを判定する(ステップS17)。完了したと判定すると、CPU11は、リフレッシュ処理(ステップS18)の実行に移る。完了していないと判定すると、CPU11は、ステップS11に戻って、ステップS11〜S16の処理を再び実行する。
図17は、リフレッシュ処理のルーチンを示すフローチャートである。CPU11は、RAM13のリフレッシュ対象ブロック情報302に基づき、リフレッシュ対象ブロックがあるか否かを判定する(ステップS51)。リフレッシュ対象ブロックがないと判定した場合、CPU11は、このリフレッシュ処理を終了する。
リフレッシュ対象ブロックがあると判定した場合、CPU11は、インタフェース部12に対してリフレッシュ処理の実行命令を送出する(ステップS52)。
すなわち、インタフェース部12は、まずリフレッシュ処理の対象ブロックから符号化データ片を読み出す。インタフェース部12のエラー検出訂正部20は、かかる符号化データ片に対して誤り訂正処理を施す。インタフェース部12は、誤り訂正処理の施された1ブロック分の符号化データ片を、当該符号化データ片が保持されていたブロックとは異なるブロックに書き込む。
CPU11は、リフレッシュ処理を実施したブロックの番号を、RAM13のリフレッシュ対象ブロック情報302から削除する(ステップS53)。また、CPU11は、当該ブロックの番号をRAM13の優先メモリチェック対象ブロック情報305から削除する(ステップS54)。
リフレッシュ処理の実行後、CPU11は、図12の管理情報更新処理(ステップS7)を実行する。この管理情報更新処理は、RAM13に格納されたページ/ブロック情報31をフラッシュメモリ14の管理情報40として保存する処理であり、実施例1又は実施例2と同様のブロックアクセス回数情報更新処理を含む。
以上のように、本実施例において、情報処理装置10は、実施例1と同様の処理を行う第1モード処理の他に、優先メモリチェック処理を含む第2モード処理を実行する機能を有する。そして、フラッシュメモリ14の全ブロックに対するリードアクセス回数の合計が所定の閾値(TA5)を越えている場合には第1モード処理を実行し、越えていない場合には第2モード処理を実行する。すなわち、本実施例の情報処理装置10は、アクセス回数が多い場合にはアクセス回数に応じたリフレッシュ処理及びメモリチェック処理を実行し、アクセス回数が少ない場合にはアクセス回数を前提としないメモリチェック処理、優先メモリチェック処理及びリフレッシュ処理を実行する。したがって、メモリに対するアクセスが少ない場合にもメモリチェックを行うことができ、状況に応じた適切なリフレッシュ処理及びメモリチェック処理を実行することができる。
以上、説明したように、本発明によれば、メモリ内の各メモリブロックに対するリードアクセスの回数に応じて、対象ブロックに対してリフレッシュ処理及びメモリチェック処理を行うか否かを判別する。そして、リードアクセスの回数が所定の閾値を越えている場合にのみ、メモリチェック処理及びリフレッシュ処理を行う。したがって、アクセス回数が少ないメモリブロックに対しては処理がなされないため、メモリチェック処理及びリフレッシュ処理の実行に要する時間を短縮することができる。
また、ブロック単位でのアクセス回数に応じてリフレッシュ処理及びメモリチェック処理を行うため、アクセスが集中しているメモリセルのみならず、これと同じブロック内の隣接するメモリセルに対してもリフレッシュ処理及びメモリチェック処理を行うことができる。
また、本発明によれば、パワーオンリセット信号を受けた場合のみ、メモリチェック処理、リフレッシュ処理及びこれらを行うか否かの判定を行うため、電源投入直後以外のリセット時にはメモリチェック及びリフレッシュ処理の為の待機状態が無い。したがって、フラッシュメモリに対して高速アクセスを行うことが可能となる。
なお、上記実施例では、ブロックアクセス回数情報301及び401として、フラッシュメモリ14の各ブロック毎のリードアクセス回数の情報を管理している。しかし、これに限らず、例えばブロックを構成するページ単位や誤り訂正処理における処理データ量の単位でアクセス回数の情報を管理してもよい。
また、上記実施例では、パワーオンリセット信号PRに基づくリセット信号Rの受信時にパワーオンリセットチェック領域30に1バイトの値「0x5A」を書き込み、この値が保持されているか否かによって、受信したリセット信号Rがパワーオンリセット信号PRに基づくものか否かの判定を行っている。しかし、リセット信号Rがパワーオンリセット信号PRに基づくものか否かをパワーオンリセットチェック領域30に所定の値が書き込まれているか否かによって判定できれば良いのであって、書き込む値は「0x5A」に限られない。また、誤認識を防ぐため、例えば1バイトではなく数バイトの値を書き込むことにより、リセット信号Rがパワーオンリセット信号PRに基づくものかどうかの判定を行っても良い。
また、上記実施例では、フラッシュメモリ14が管理情報40を記憶している。しかし、インタフェース部12と接続された不揮発性メモリ等をフラッシュメモリとは別に設け、当該不揮発性メモリ等に管理情報40を記憶させる構成であってもよい。
また、上記実施例では、メモリチェック処理について、フラッシュメモリ14内に記憶されたデータを正しく読み出せるか否かを検査する処理として説明したが、これに加えて、データを正しく書き込めるか否かを検査する処理を行っても良い。
また、上記実施例3では、全ブロックに対するアクセス回数が第5のアクセス閾値TA5を越えているか否かに応じて、第1モード処理と第2モード処理のいずれかが選択される構成として説明した。しかし、これに限られず、アクセス回数が所定の閾値を越えているブロックが存在するか否かに応じて、第1モード処理又は第2モード処理を選択する構成であってもよい。また、情報処理装置10の電源投入後にユーザがいずれかのモードを選択し、その選択に応じていずれかの処理を実行する構成であってもよい。また、ユーザの選択をインタフェース部12内のレジスタに予め記憶しておき、電源投入後にこれを参照してモードを決定する構成であってもよい。