Cente SD Card FileSystem for TDS701
MMCカードに対応
MMCA 4.1規格に準拠したMMC(Multi Media Card)に対応しました。(1ビットモード及び最大周波数20MHzまで対応)
SDCLK停止処理追加
unmount関数内でTDS701 SD Control Register“SDCLKOFFEN”bitを0に設定し、SDCLKを停止する処理を追加しました。
SDカード挿入/抜去モジュールの移動
SDカード挿入/抜去モジュール部を、新たに追加したfs_TDS701_config.cファイル内に移動しました。
TDS701関連ユーザーカスタマイズ定義の移動
fs_TDS701.hファイル内に定義されていたTDS701関連ユーザーカスタマイズ定義を、新たに追加したfs_TDS701_config.hファイル内に移動しました。
ライトプロテクトフラグのセット/クリア処理追加
マウント処理時にライトプロテクト(書き込み保護スイッチ)の検出を行ない、ライトプロテクトフラグをセット/クリアする処理を追加しました。(上位のFileSystemのために必要な処理)
write_sector関数、read_sector関数不具合修正
write_sector関数、read_sector関数について、SD_WriteBlock関数(またはSD_ReadBlock関数)からエラーを返された場合に、SD_Card_check関数の戻り値を返してしまっていたため、上位のFileSystemが誤動作する不具合を修正しました。
SD_SendSCR関数、SD_SendSD_Status関数不具合修正
・マウント処理時のSD_SetBusWidth関数実行前にSD_SendSCR関数(SCRの取得)を実行しているが、そのデータアクセスが完了する前にSD_SetBusWidth関数の処理が行なわれ、コマンドの発行に失敗してしまうことがあったため、処理終了時にデータアクセス完了のチェック処理を追加しました。(SD_SendSD_Status関数の処理も同様)
・SD_Info2_check関数を使用した、TDS701内部バッファのリードイネーブルチェック部について、関数からの戻り値を変数に渡していないのにも関わらず、変数の値を返していたため修正しました。
SD変換アダプタ挿入時の対応
miniSDカードなどのアダプタのみが挿入された場合(miniSDカード自体は取り外されている状態)の対応として、SD_SendOpCond関数内のCMD55及びACMD41発行部のcontinue処理をreturn処理に変更し、即座にエラー終了するような形に改善しました。
クロック設定後に74Clockウェイト処理
SDカードの規格上、SD_SetClk()による100KHz – 400KHz設定後に74clock分のウェイトを追加する必要があるため、1MSEC以上のウェイト処理を追加しました。
R1レスポンスの有効ビット抽出
R1レスポンスに対して、各コマンドで定められている有効ビット(エラーステータス)のみを抽出し、評価を行うように変更しました。
未使用のエラーコードをリザーブ化
fs_TDS701.hファイル内で定義されているエラーコードについて、ドライバ内で使用していないエラーコードについては、全て“#define SD_ERROR10 -10 /**< Reserved */”のようにリザーブ扱いに変更しました。
Hardware Swapに対応
BigEndian環境でのDMA使用時にHardware側でSwapする機構を設けた場合、マクロ(#define SDC_HARDWARE_SWAP)の設定切り替えにより容易にHardware Swap環境への対応が可能なように改善を行ないました。
リード/ライト時のタイムアウト変更
SD_Info2_check関数によるTDS701内部バッファのリード/ライトイネーブルチェック部に、SDカードの規格に定義されている時間のタイムアウトを設けるように変更しました。
High Speed Modeに対応
CMD6発行によるHigh Speed Mode対応カードの検出及び、High Speed Modeへの切り替えが行なわれるように改善を行ないました。
物理フォーマット機能を追加
MBR(Master Boot Record)、PBS(Partition Boot Sector)、FSINFO(FAT32のみ)、FAT、ROOTDIRECTORY領域の初期化を行なう物理フォーマット機能を追加しました。
ウェイト処理削除
通常動作時(リード/ライト時)の動作クロック設定後に行っていたウェイト処理を削除しました。
カード抜去によるループ処理の中断対応
タイムアウト分のループ処理が行なわれる箇所について、SD_Card_check関数によるカード挿抜状態のチェック処理を追加し、カードが抜かれた場合は即座にループから抜け、エラー終了するように改善を行ないました。
永久ループ箇所のタイムアウト化
SD_SetClk関数内のTDS701 SD_INFO2 Register“CBSY”bitチェック部について、“CBSY”bitが1である限り永久にループしてしまう可能性があったため、タイムアウト処理を設けました。
R7フォーマットのレスポンス取得対応
SD_GetResponses関数内にR7フォーマットが指定された場合の対応処理を追加し、CMD8発行時にR7フォーマットの指定が行なえるように改善を行ないました。
独自のデータタイプに対応
変数に対するデータタイプ(型)として、独自に定義したデータタイプを使用するように変更しました。(fs_typedef.hファイル内に定義)
定数のマクロ定義化
マクロが定義されていない定数についてマクロを定義し、そのマクロをドライバ内で参照するように変更しました。
インクルードファイルの一元化
fs_TDS701.hファイル内で、ユーザーカスタマイズ定義部のヘッダファイルをまとめてインクルードするように変更しました。
カード挿抜チェック周期ハンドラのタスク化
周期起動ハンドラに対応していないOSがあるため、カード挿抜チェックをタスクにより行う形に変更しました。
関数名変更
my_wait関数の名前をsd_waitに変更、SDINFO1_INT_body関数の名前をSDINFO2_INT_bodyに変更しました。
BSP環境変更
BSP環境を「SH7709Sリファレンス基板+SD-EVA-BOARD」上で動作する環境からCente評価ボード(ESPT/ESPT2/ESPT-SH7673 + ESPT-SD)上で動作する環境に変更しました。