Cente FileSystem

Cente SD Card Driver

・多チャンネル対応

Cente SD Card Driver部に多チャンネル機能を追加

・物理フォーマット機能APIの仕様変更

多チャンネル対応に伴い、物理フォーマット時にドライブ名を指定するように変更

・物理フォーマット機能APIの機能追加

物理フォーマット機能にSDXCカード(64GB~)をFAT32フォーマットする機能を追加

・物理フォーマット機能にライトプロテクト検出機能を追加

sdphy_format()内でライトプロテクトのチェックを行うように変更

・異常検出が出来るように戻り値の型を変更

以下の関数内で異常を検出した場合にエラーが戻せるように、戻り値の型を「void」から「ct_int_fast16_t」型へ変更

SD_read_buf(), SD_Pow_ON()

・SD_TOUTのソフトウェアループで使用している変数の型を変更

ソフトウェアループで使用している変数を「ct_int_fast16_t tout;」(signed int)で宣言しているが、int=16bitの環境では桁溢れする可能性があるため「ct_uint32_t tout;」(unsigned long)へ変更

・SD_TranStateCheck()内の処理を変更

リード/ライト転送時に行っているSDカードのステートチェックにおいて、「Stand-by State」の場合に「Transfer State」へ遷移させる処理を追加

Cente Compact FileSystem

 ・サイズ0のファイルに対してfseek()によりセクタサイズ以下のファイル拡張が出来ない不具合を修正Cente障害情報:002-0014
FS_OVER_SZ_SEEKマクロに「1」または「2」を設定した環境下において、サイズ0のファイルに対してfseek()によりサイズを拡張する。その際、指定メディアのPartition Boot Sector(PBS)情報を壊してしまう不具合を修正しました。
・ファイルデータ用バッファサイズ境界(末尾)の位置へシーク後、正しくデータ読み書きを行うことが出来ない不具合を修正Cente障害情報:002-0015
fseek()に対してファイルデータ用バッファのサイズで割り切れる位置への移動を指定する。その後、ファイル操作を行うと本来アクセスするべきセクタより前のセクタにアクセスしてしまう不具合を修正しました。
・ディレクトリ削除時にエラーが発生した際、エラーの詳細コードを取得できない不具合を修正Cente障害情報:002-0016
ディレクトリ削除時にエラー「指定ディレクトリが存在しない」「デバイスドライバでリードエラー」「指定ディレクトリが空ではない」が発生した場合に、正しいエラーの詳細コードが取得できない不具合を修正しました。
FS_SJIS_API0」設定時にコンパイルエラーが発生する不具合を修正Cente障害情報:002-0017
fs_cfg.hファイル内のFS_SJIS_APIマクロが「0:無効」の状態で、FS_RMDIRマクロまたはFS_READDIRマクロを「1:有効」にした場合に、コンパイルエラーが検出されてしまう不具合を修正しました。
・ファイルを書き込みモードで多重オープンできてしまう不具合を修正Cente障害情報:101-0073
fopen()は書き込みモード(a, a+, w, w+, r+)の多重オープンを認めていませんが、オープン中ファイルより上の階層に存在するディレクトリの名前を変更すると、多重オープンができてしまう不具合を修正しました。
fseek()の移動先に4GBを越える位置を指定してもエラーを検出できない不具合を修正Cente障害情報:101-0077
FAT32の場合、fseek()に対して4GBを超える位置(後方)への移動を指定した場合は、エラーとして検出する必要がありますが、エラーを検出できずに正常終了してしまう不具合を修正しました。
・ショートエントリ検索で誤算出する場合がある不具合を修正Cente障害情報:101-0089
UNICODE API に対して以下の条件に該当する名前を指定した場合、ファイル・ディレクトリを誤検出してしまう不具合を修正しました。
1.ドットが複数ある場合。
2.12文字以内のUNICODE文字列中にASCII変換できないコード(全角文字)が含まれていた場合。
3.ショートエントリ中のスペースを含む名前と一致したUNICODE名を指定した場合。
MISRA-C 対応
C言語のためのソフトウェア設計標準規格であるMISRA-C:2004に対応しました。
・ツールの変更
RAM ディスクドライバ作成ツールを、Ver2.00以降の仕様に対応しました。これに伴い、「MKRAM.exe」から「CFS_MKRAM.exe」に名前を変更しました。
・標準ライブラリ関数追加、削除
memcmpを直接コールしていた箇所を独自のfs_memcmpに置き換えました。またMISRA-C対応に伴い、fs_memmoveをコールしている箇所をfs_memcpyに置き換え、fs_memmove

Cente exFAT FileSystem

・FAT領域かディレクトリエントリ領域に書き込み中に電源断が起きたとき、修復不能になる場合がある不具合を修正 (Cente障害情報:101-0065)

メタデータ保護機能使用時、セクタの書き込み中に電源断が発生し、メディアによってはそのセクタを読むとメディアからエラーが返ってきてデータが読めないときがあります。その場合に修復出来なくなる不具合を修正しました。

・キャッシュのブロック単位の書込みを考慮していなかった為、修復不能になる場合がある不具合を修正 (Cente障害情報:101-0066)
メタデータ保護機能使用時、ini_blk_cache(), ini_blk_cache_dir(), ini_ab_cache()の第4引数(キャッシュブロック数)を2以上に設定します。この設定でメディアに書き込み中、電源が落ちるといずれかのブロックで不良セクタとなる可能性があります。修復時この不良セクタを読み取るとエラーが発生し、修復処理エラーとなっていた不具合を修正しました。

・ジャーナルファイルリード時に修復不可能エラーが発生すると、ジャーナルファイルで使用できない領域ができてしまう不具合を修正 (Cente障害情報:101-0067)

メタデータ保護機能使用時、修復処理でエラーが発生するとフラグ管理領域の該当エリアをクリアしていないため、再使用ができなくなります。その為フラグ管理領域が枯渇しメタデータ保護処理ができなくなる不具合を修正しました。

・FATチェーンクリア中の電源断後、修復による再FATチェーンクリアが実行できない場合がある不具合を修正 (Cente障害情報:101-0068)

メタデータ保護機能使用時、FATチェーンクリア処理中に電源断が発生するとFATチェーンが寸断される為、修復時の再FATチェーンクリアができません。その結果クリアされないFATチェーンは破損クラスタとして残ってしまう不具合を修正しました。

・複数ドライブでメタデータ保護機能を有効にした場合に正常に修復できない場合がある不具合を修正 (Cente障害情報:101-0070)

複数ドライブでメタデータ保護機能を有効にした場合、メタデータ保護用のメモリが誤った情報になり、正しくデータを書き戻せない場合がある不具合を修正しました。

・ファイルを書き込みモードで多重オープンできてしまう不具合を修正 (Cente障害情報:101-0073)

名前を変更したディレクトリを含むフルパスで、オープン中のファイルを多重オープンできてしまう不具合を修正しました。

・マルチバイト文字の2byte目のコードを正しく処理できていない不具合を修正 (Cente障害情報:101-0076)

マルチバイト文字の2バイト目を1バイトコードとして扱っていた為、アルファベットの小文字に該当するコードを誤って大文字に変換し文字列比較を行ってしまう不具合を修正しました。

・API処理中のアンマウントによる資源返却の不具合を修正 (Cente障害情報:101-0085)

API処理中にunmount_disk()を実行するとタイミングによって以下の問題が発生する不具合を修正しました。

1. ディスクドライブセマフォ資源の返却が行えず、再度mount_disk()を実行した際に、資源獲得でタイムアウトエラーが発生する(マウントできない)。

2. 処理中のAPIが、ST_FILE、ST_DIR構造体のポインタを引数に持つAPIであった場合、NULLポインタアクセスが発生する。

・全角の大文字・小文字の表記が可能なコードの扱いに誤りがある不具合を修正 (Cente障害情報:101-0092)

アルファベットのファイル・ディレクトリ名に対する大文字・小文字を同一視すべき判定処理に誤りがあった不具合を修正しました。 以下のコード領域が不具合対象となります。

【全角英字、ギリシャ文字、ロシア文字、アラビア数字】

・追記モードで開いたファイルに正しく追記できない不具合を修正 (Cente障害情報:103-0018)

追記モードで開いたファイルの読み書き位置を終端以外に移動すると、fputc(), fputs(), fwrite()により正しく追記できない不具合を修正しました。

・UNICODE API追加

UNICODEを指定してファイル・ディレクトリアクセスできるAPIを追加しました。

・メタデータ保護機能の仕様変更

1. 複数ドライブに対応しました。

2. メタデータ保護管理ファイルのサイズを縮小しました。

3. 保護処理及び修復処理を高速化しました。

・ファイル分割、クラスタ挿入、ファイル結合API追加

S-JIS用ファイル分割API【ct_divide()】、クラスタ挿入API【ct_ins_clust()】、ファイル結合API【ct_combine()】

UNICODE用ファイル分割API【ct_divide_uni()】、クラスタ挿入API【ct_ins_clust_uni()】、ファイル結合API【ct_combine_uni()】を追加しました。

・ドライブ削除API追加

ドライブ削除API【del_disk()】を追加しました。

・機能制限の撤廃

rename(), rename_uni(), move(), move_uni() において大文字から小文字もしくは小文字から大文字に変更できない機能制限がありましたが、この制限が無くなりました。

・ファイル名、ディレクトリ名の文字数の変更

Ver2.01までの最大長は、フルパスでS-JIS APIは258byte、UNICODE APIは516byteだった為、全角文字(2バイトコード)を含めると255文字の名前を作成・検索・削除ができませんでしたが、この制限が無くなり、フルパスで258文字までになりました。

・DISK_MOUNTビット処理をAPIへ移動

ST_DISK構造体のメンバdsk_flgのDISK_MOUNTビットの処理をmount_disk()でセット、unmount_disk()でリセットするよう変更しました。従って、デバイスドライバ内での処理は必要なくなりました。

 

Cente FileSystem

 ・ショートエントリ検索で誤検出する場合がある不具合を修正(Cente障害情報:101-0089)

 UNICODE APIにおいて12文字以内のUNICODEのASCII変換に誤りがあり、指定名以外のエントリを検出してしまう場合がある不具合を修正。

 ・rename_uniにおける名前比較で誤ったエラーコードを返す不具合を修正(Cente障害情報:101-0090)

 UNICODEファイル名が同一か否かを比較する際に、文字列の終端を誤検出していた為、誤った比較結果を返していた不具合を修正。

 ・UNICODE文字の2バイト目のコードの扱いに誤りがある不具合を修正(Cente障害情報:101-0091)

 UNICODE文字列比較関数fs_unicodecmp(), fs_unicodencmp()において異なるUNICODE文字を同一と判定してしまう場合がある不具合を修正。

 ・全角の大文字・小文字の表記が可能なコードの扱いに誤りがある不具合を修正(Cente障害情報:101-0092)

 アルファベットのファイル・ディレクトリ名に対する大文字・小文字を同一視すべき判定処理に誤りがあった不具合を修正。

以下のコード領域が不具合対象となります。【全角英字、ギリシャ文字、ロシア文字、アラビア数字】

・高速なファイル・ディレクトリ検索機能追加

 ハッシュアルゴリズムを応用することでファイル・ディレクトリの検索が高速になる機能が追加されました。

 ・FAT領域のビットマップ化機能変更

(1)メディアの最適なビットマップサイズを取得できるAPI get_bitmapsize()を追加しました。

(2)大容量メディア向けに空き時間を使用してビットマップを構築するサンプルタスクを提供しました。

(3)ini_bitmapfat()の第1引数を変更しました。

   第1引数をST_DISK *d[ディスク構造体]からct_int8_t drv[ドライブ名(’A’,’B’,…)]に変更しました。

・メタデータ保護機能用のマクロ名を変更

S-JIS API用とUNICODE API用を個別に設定できるようにしました。

・チェックディスクAPI追加

UNICODE用チェックディスクAPI【chk_dsk_uni()】を追加しました。

・UNICODE API追加

UNICODE用ファイル分割API【ct_divide_uni()】、クラスタ挿入API【ct_ins_clust_uni()】を追加しました。

・ファイル結合API追加

S-JIS用ファイル結合API【ct_combine()】、UNICODE用ファイル結合API【ct_combine_uni()】を追加しました。

・ドライブ削除API追加

ドライブ削除API【del_disk()】を追加しました。

・機能制限の撤廃

rename(), rename_uni(), move(), move_uni() において大文字から小文字もしくは小文字から大文字に変更できない機能制限がありましたが、この制限が無くなりました。

・ファイル名・ディレクトリ名の文字数の変更

Ver6.11までの最大長は、フルパスでS-JIS APIは258byte、UNICODE APIは516byteだった為、全角文字(2バイトコード)を含めると255文字の名前を作成・検索・削除ができませんでしたが、この制限が無くなり、フルパスで258文字までになりました。

・FSINFOが異常値だった場合の対策を追加

(1)fs_drv.c内get_dev2()にてFSINFOセクタのsignatureチェックでエラーを戻すよう変更しました。

(2)renew_fsinfo(), renew_fsinfo_uni()にてNextFreeClusterの更新機能を追加しました。

 ・DISK_MOUNTビット処理をAPIへ移動

 ST_DISK構造体のメンバdsk_flgのDISK_MOUNTビットの処理をmount_disk()でセット、unmount_disk()でリセットするよう変更しました。従って、デバイスドライバ内での処理は必要なくなりました。

 ・空きFAT検索開始位置の仕様改善

 remove(), remove_uni(), rmdir(), rmdir_uni()で削除されたクラスタを空きFAT検索時、早期に再利用できるよう変更しました。

 

Cente SPI Memory Card Driver

・BSP追加
ESPT-RXを追加しました。
アプリケーションサンプルファイルの追加
シェルコマンド及びFileSystem APIを使用したアプリケーションサンプルプログラムを新規に追加しました。
・ユーザカスタマイズファイルを追加
fs_mmc_cfg.c及びfs_mmc_cfg.hを新規追加しました。
fs_mmc_cfg.cファイル内にOS依存部及びタイムアウト機能を記述しています。fs_mmc_cfg.hファイルはfs_mmc_cfg.cファイル内で使用しているマクロを定義しています。
・データタイプ(変数型)の変更
独自データタイプ名の頭に「ct_」を付加させ、より独自性を持たせるようにしました。
・マウント処理のCMD10発行時にレスポンスエラーが発生してしまう不具合を修正 (Cente障害情報:005-0001)
CSD,CIDレジスタのリード時にCRCの受信処理を行っておらず、SDカードに依ってCMD9発行後のCMD10発行に失敗する不具合を修正しました。
整数型(integer)16bit環境でSDHCカードを正常にマウントできない不具合を修正 (Cente障害情報:005-0002)
SDHCカードを識別するためのCMD58発行時において、受信した32bitの「OCR Register」情報に対するキャスト処理が正しく行われておらず、マウントまたはリード/ライトに失敗する不具合を修正しました。
整数型(integer)16bitの環境でSDHCカードを使用した場合に発生します。

Page 6 of 26