改版履歴

Cente NAND Flash Driver

・独自機能を追加

電源断発生直前までにアクセスしたブロック情報を管理する事で、再度電源立ち上げ時、続きの空きブロックから書き込みを開始出来る機能を追加しました。本機能は、電源断が頻繁に発生する機器に有効な機能となります。

・4096バイト/ページのNANDに対応

4096バイト/ページのNANDに対応しました。

・BSP追加

Renesas Starter Kit+ for RX65N-2MB + シリアルインターフェースNANDの組み合わせで動作するドライバの動作サンプル環境を追加しました。

・ブート領域機能の追加

指定した物理ブロックより前に位置しているブロックを、NANDフラッシュドライバ管理対象外の領域とする機能を追加しました。

・ゾーン拡張機能の追加

1ゾーン内で管理するブロック数を拡張する事で不良ブロックの許容数を増加し、ゾーン単位の寿命を延ばす機能を追加しました。2ゾーン(1024×2ブロック)以上あるNANDフラッシュを使用する場合に本機能は使用出来ます。

・Logical Block Address領域追加機能の追加

冗長領域で管理するLogical Block Address情報のバックアップ領域を追加する事で、ビット化け発生時の訂正能力を向上させる機能を追加しました。

Cente NAND Flash Driver

・シリアルインターフェース(SPI)のNANDに対応
シリアルインターフェース(SPI)のNANDに対応しました。
・BSP追加
ESPT-RX + 拡張ボード + シリアルインターフェースNANDの組み合わせで動作する、ドライバの動作サンプル環境を追加しました。
・ハードウェアECCに対応
CPU内蔵のECC機能およびNAND Flash Memory内蔵のECC機能に対応するための、ユーザカスタマイズ関数を追加しました。
・工場出荷時の不良ブロック検出関数を追加
工場出荷時に書き込まれている不良マークとCente NAND Flash Driverが書き込む不良マークは、これまで同じ関数内で検出していましたが、工場出荷時の不良ブロックを検出するための関数を独立させました。
・ECCコードに0x00が含まれていた場合に訂正、検出が正しく行えない不具合を修正(Cente障害情報:108-0010)
生成されたECCコード3バイトに0x00が含まれていた場合にECC処理が正しく行えず、以下の問題が発生する不具合を修正しました。
①ビット化けが発生した際、ページデータを訂正、エラー検出せずに戻してしまう可能性がある。
②ビット化けが発生した際、誤った位置を訂正してしまう可能性がある。
③1ビット化けが発生した際、訂正できずに2ビット化けのエラーとして検出してしまう可能性がある。

 

Cente NAND Flash Driver

・2048バイト/ページのNAND FlashのECC訂正処理において1bit訂正ができない不具合を修正
読出しの際に1bit訂正が可能な場合であってもエラーにしていた不具合を修正しました。
(Cente障害情報:108-0001)
・2048バイト/ページのNAND FlashのECC訂正処理において2bitエラー検出ができない、及びECCコード部の1bitエラー時の訂正ができていない不具合を修正
ECC訂正処理において以下の問題が発生する不具合を修正しました。
①NAND Flashからデータを読出した際に2bitの誤りが発生した場合、データを誤訂正し正常終了する場合があります。
②NAND Flashの冗長領域に書き込まれているECCコードに1bit化けが有った場合、その場所のデータを読み出す時に、不必要な代替ブロックへの置き替えが発生し読み書きが遅くなります。
(Cente障害情報:108-0002)
・システムID格納用配列のサイズ不足により、他の変数を書き換えてしまう不具合を修正
システムID取得時に、用意している配列の範囲を超えた場所にアクセスしてしまい、他の変数を書き換えてしまう不具合を修正しました。
(Cente障害情報:108-0003)
・"#define USE_NANDFLASH_CLOSE  0"設定時に正しいページ操作が行なえない不具合を修正
fs_nandcfg.hのUSE_NANDFLASH_CLOSEマクロを「0」に設定した場合に、以下の問題が発生する不具合を修正しました。
①read_sector()で同じセクタを連続でリードすると、別セクタをリードしてしまう場合があります。
またその後のwrite_sector()で指定セクタと異なるセクタにライトしてしまう場合があります。
②write_sector()でエラーが発生した場合に、続くread_sector()、write_sector()で指定セクタと異なるセクタにアクセスしてしまう場合があります。
③2048バイト/ページのNAND Flashで且つ"#define NAND_FORMAT_2048  0"設定時に同一ブロック(物理ブロック)の同一ページを必要以上にライトしてしまい、速度の遅延が発生する場合があります。
(Cente障害情報:108-0004)
・ページの先頭アドレス以外を指定した場合に、正しいページデータを読み書きできない不具合を修正
以下2つの条件を満たした環境下でread_sector()、write_sector()を実行すると正しいデータを読み書きできない、またデータバッファのサイズを越える位置に書き込んでしまう不具合を修正しました。
①2048バイト/ページのNAND Flash
②fs_nand.h の NAND_FORMAT_2048 マクロを「0」に設定
(Cente障害情報:108-0005)
・ページデータ書き換え時に既存データを0xFFに書き換えてしまう不具合を修正
以下2つの条件を満たした環境下でwrite_sector()を実行すると、指定した場所と関係の無いデータが0xFFに書き換えられる不具合を修正しました。
①2048バイト/ページのNAND Flash
②fs_nand.h の NAND_FORMAT_2048 マクロを「0」に設定
(Cente障害情報:108-0006)
・冗長領域のLogical Block Addressに2bit以上のデータ化けがあった場合、正しくエラーを検出できない不具合を修正
冗長領域のLogical Block Address1とLogical Block Address2の値に2bit以上の違いがあった場合は、論理物理アドレス変換テーブルへの登録を行わずにアクセス対象外のブロックとして管理する必要がありますが、2bit以上の違いがあった場合でも、論理物理アドレス変換テーブルに登録してしまう不具合を修正しました。
(Cente障害情報:108-0007)
・128MBのNAND Flashを正しく論理フォーマットできない不具合を修正
以下の条件下でNAND Flashに対してNFLogical_Format()を実行すると、Partition Boot Sector(PBS)情報を正しい位置に書込めず、その結果、FileSystemのマウント処理でエラーが発生する不具合を修正しました。
①容量が128MB
②ページサイズが2048Byte
③NAND_FORMAT_2048マクロを「0」に設定
(Cente障害情報:108-0008)
・1GBのNAND Flashを正しく識別できない不具合を修正
1GBのNAND Flashを正しく識別できず、512MBのNAND Flashとして動作してしまう不具合を修正しました。
(Cente障害情報:108-0009)
・独自の変数型に変更
変数型をCente FileSystem及びCente NAND Flash Driver独自の変数型に変更しました。
(fs_typedef.hを追加)
・カスタマイズ関数を変更
《fs_nandcommand.c》
-nandFlashInitializePort()を追加しました。
-nandFlashCheckStatus()内でステータスリードコマンドを発行するように変更しました。
-関数名を一部変更しました。
-nandFlashCheckBusy()内でOSシステムコールのget_timeを使用するようにしました。
-nandFlashByte()を削除しました。
-nandFlashResetErr()を削除しました。
-nfCheckStatus()を追加しました。
-レジスタ読込みマクロ関数としてport_in()を使用するようにしました。
《fs_nandcommand.h》
-マクロ関数をsfr_xxxからport_xxxに変更しました。(xxxにはin、out、set、clrが入ります)
《fs_nanddev.c》
-fs_nandinit.c内のsetNandFlashModel()、checkDeviceCode()を、新しく追加したfs_nanddev.cに移動しました。
・カスタマイズマクロを変更
《fs_nandcfg.h》
-NAND_BUSY_CHK_TOUTマクロを追加しました。
-NAND_FORMAT_2048マクロをfs_nand.hから移動しました。
・エラーコード返却内容を変更
《fs_nand.c》
-identify()内でのMBR、PBS読込み時にエラーがあった場合、エラーコード:NF_NOTFATを返すように修正しました。
《fs_nandLog.c》
-NF_ReadSector()内のreadPhyOneSect()実行箇所で、エラー発生時のエラーコードをNF_ECCREAD_ERRとしていましたが、readPhyOneSect()の戻り値を返却するように変更しました。
-NF_WriteSector()内のreadPhyOneSect()実行箇所でエラー発生時のエラーコードをNF_ECCREAD_ERRとしていましたが、readPhyOneSect()の戻り値を返却するように変更しました。
(より詳細なエラーコードを取得できるようになりました)
・論理フォーマット仕様の変更
2048バイト/ページ(容量が128MB~1GB)のNAND Flashに対する論理フォーマット仕様を変更しました。
PBSの「隠しセクタ数」「FATセクタ数」などの設定値を調整し、無駄なセクタ(使用されないセクタ数)が少なくなるようにしました。
また全てのNAND Flashに対してPBSの「拡張ブートレコードシグネチャ」を設定するようにしました。
・全ブロック消去APIを追加
NAND Flashの全ブロック消去用APIとしてEraseAllBlock()を追加しました。<

Cente NAND Flash FileSystem

不具合修正○fs_nandLog.c

makeLogicalTable()の修正

重複する論理ブロック番号が存在した場合に本来残すべきブロックを消去していた不具合の修正

ブロック消去後にアサインテーブル更新処理されない不具合の修正

不良ブロックチェック時に不良ブロックではなく、ブロックステータスをチェックしていた不具合の修正

NandFlashClose()の修正

セクタが連続してない場合に、リードの時もライトの時と同様に処理を行ってしまう不具合修正

不具合修正 ○fs_nandPhy.c

readPhyOneSectSub()の修正

ECCエラーチェック処理時に、間違ったバッファアドレスを参照していた不具合の修正

1BitECCエラーが発生した場合に、代替処理を行わない不具合の修正

1BitECCエラーが発生した場合に、代替処理を行わない不具合の修正

ファイルの新設 fs_nandredundant.c

fs_nandredundant.h・fs_nandinit.cファイルを新設しました。

ソースファイル名改名

fs_nandcommon.cをfs_nandstring.cにファイル名を変更しました。

機能追加

RAM領域縮小機能の追加(論理物理アドレス変換テーブルのサイズ縮小マクロの追加)

関数追加

ドライバのエラーコード取得関数get_nander関数追加しました

マクロの削除 FORMATマクロを削除しました

CIS関連処理の削除 CIS関連処理の削除を行いました

エラーコード見直し

エラーコードの見直しを行いました

ソース記述の変更

char型の記述を、unsignedなのかsignedなのか明示的に表記…など

Cente NAND Flash FileSystem

16M~256Mbyteのデバイスに対応

デバイスのデバイスIDを読み込み、512byte/page・2048byte/pageの両方に対応する機能を追加

ctkernel対応

ctkernelモジュールの導入に伴う修正

ソース・ヘッダファイル名の変更

各ファイル名を以下に変更しました

・common.c→→fs_nandcommon.c

・nand.h→fs_nand.h

・nandecc.c→fs_nandecc.c

・nandfmt.c→fs_nandfmt.c

・nandfmt.h→fs_nandfmt.h

・ nandmain.c→fs_nandmain.c

・nandsub.c→fs_nandsub.c

・nand_hwcfg.c→fs_nandhwcfg.c

・nand_hwcfg.h→fs_nandhwcfg.h

Cente NAND Flash FileSystem

不具合修正

○nandmain.c

・変数、systemidcodeをchar型からunsignedchar型に修正

・setNandFlashModel()・checkDeviceCode()・nandFlashByte()の引数systemidcodeをchar型からunsignedchar型に修正

・NF_ReadSector()関数内でセクタアドレスがインクリメントされない不具合の修正

○nandsub.c

・nandFlashSetRdApr()の削除