## disk_ioctl

セクタの読み書き以外のディスク・ドライブ自体に対する様々な制御をします。

    DRESULT disk_ioctl (
      BYTE pdrv,    /* [IN] 物理ドライブ番号 */
      BYTE cmd,     /* [IN] 制御コマンド */
      void* buff    /* [I/O] データ受け渡しバッファ */
    );

#### 引数

pdrv
  物理ドライブ番号(0-9)が指定されます。
cmd
  制御コマンド・コードが指定されます。
buff
  制御コマンドに依存したパラメータを授受するバッファを指すポインタが指定されます。データの授受のないコマンドの場合は、値に意味はありません。

#### 戻り値

RES_OK (0)
  正常終了。
RES_ERROR
  何らかのエラーが発生した。
RES_PARERR
  コマンドが不正。
RES_NOTRDY
  ドライブが動作可能状態ではない、または初期化されていない。

#### 解説

物理ドライブの種類によりサポートされるコマンドは異なりますが、FatFsモジュールでは、次の汎用コマンドのみ使用し、特定のハードウェアに依存した制御は行いません。

コマンド | 解説
--- | ---
CTRL_SYNC | ドライブ内のデータ書き込み処理の完了待ち。ライト・バック・キャッシュなどが存在する場合は、書き込まれていないデータを即時書き戻します。リード・オンリー構成では使用されません。
GET_SECTOR_SIZE | `buff`の指す`WORD`型変数にドライブのセクタ・サイズ(バイト単位)を返します。セクタ・サイズが固定(`_MAX_SS`が512)のときはこのコマンドは使われません。
GET_SECTOR_COUNT | `buff`の指す`DWORD`型変数にドライブ上の総セクタ数を返します。`f_mkfs()`内で呼び出され、作成するボリュームのサイズを決定するために使用されます。
GET_BLOCK_SIZE | `buff`の指す`DWORD`型変数にフラッシュ・メモリの消去ブロック・サイズ(セクタ単位)を返します。1から32768の範囲で2の累乗の値でなければなりません。不明な場合またはフラッシュ・メモリ以外のメディアでは1を返します。`f_mkfs()`内でのみ使用され、ボリュームのデータ領域はこの境界にアライメントされます。
CTRL_ERASE_SECTOR | フラッシュ・メモリ上の指定領域の消去。`buff`の指す`DWORD`型配列には消去する領域 {開始セクタ,終了セクタ} を指定して呼び出されます。`_USE_ERASE`が1のとき、クラスタが解放されるときに呼び出されます。これは、ATAコマンド・セットのTrimコマンドと等価で、この機能をサポートしない場合は何もする必要はありません。また、戻り値はチェックされず、消去が完全に行われなかったとしてもFatFsの動作には影響ありません。

戻る