disk_write

ストレージ デバイスにデータを書き込むときに呼ばれます。

DRESULT disk_write (
  BYTE pdrv,        /* [IN] 物理ドライブ番号 */
  const BYTE* buff, /* [IN] 書き込むデータへのポインタ */
  DWORD sector,     /* [IN] 書き込み開始セクタ番号 */
  UINT count        /* [IN] 書き込むセクタ数 */
);

引数

pdrv
対象のデバイスを識別する物理ドライブ番号(0-9)が指定されます。
buff
ストレージ デバイスに書き込むセクタ データが格納されたバイト配列が指定されます。データのバイト数は、セクタ サイズ*countとなります。
sector
書き込みを開始するセクタ番号。32ビットLBAで指定されます。
count
書き込むセクタ数(1以上の値)が指定されます。

戻り値

RES_OK (0)
正常終了。
RES_ERROR
回復不能なエラーにより、書き込み操作を完了できなかった。
RES_WRPRT
メディアが書き込み禁止状態。
RES_PARERR
パラメータが不正。
RES_NOTRDY
ストレージ デバイスが動作可能な状態ではない (初期化されていない)。

解説

buffに指定されるアドレスは常にワード アライメントされているとは限りません。これについては、disk_read関数の解説を参照してください。

一般的に、複数セクタの転送要求は、デバイスに対して可能な限りマルチ セクタ転送しなければなりません。複数のシングル セクタ書き込みに分解された場合、スループットが著しく低下することがあります。

FatFsはディスク制御レイヤが遅延書き込み機能を持つことも想定しています。この関数から戻るとき、デバイスが書き込みを実行中だったり単にライトバック キャッシュに書き込まれただけなど、必ずしもメディアへの書き込みが完了している必要はありません。ただし、buffのデータは、この関数から戻ると無効となります。書き込み完了の要求は、disk_ioctl関数のCTRL_SYNCコマンドによって行われます。このような遅延書き込み機能が実装された場合、書き込みスループットを向上させることができます。

アプリケーションからはこの関数を呼び出してはなりません。さもないと、FATボリュームが破壊される可能性があります。

対応情報

リード オンリー構成(_FS_READONLY == 1)ではこの関数は必要とされません。

戻る