aboutsummaryrefslogtreecommitdiffstats
path: root/os/various/fatfs_bindings
diff options
context:
space:
mode:
Diffstat (limited to 'os/various/fatfs_bindings')
-rw-r--r--os/various/fatfs_bindings/fatfs_diskio.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/os/various/fatfs_bindings/fatfs_diskio.c b/os/various/fatfs_bindings/fatfs_diskio.c
index 39a8658..7f510a0 100644
--- a/os/various/fatfs_bindings/fatfs_diskio.c
+++ b/os/various/fatfs_bindings/fatfs_diskio.c
@@ -206,8 +206,6 @@ DRESULT disk_write (
UINT count /* Number of sectors to write (1..255) */
)
{
- // invalidate cache on buffer
- cacheBufferFlush(buff, count * MMCSD_BLOCK_SIZE);
switch (pdrv) {
#if HAL_USE_MMC_SPI
@@ -218,11 +216,15 @@ DRESULT disk_write (
return RES_WRPRT;
if (mmcStartSequentialWrite(&FATFS_HAL_DEVICE, sector))
return RES_ERROR;
+
while (count > 0) {
- if (mmcSequentialWrite(&FATFS_HAL_DEVICE, buff))
- return RES_ERROR;
- buff += MMCSD_BLOCK_SIZE;
- count--;
+ // invalidate cache on buffer
+ cacheBufferFlush(buff, MMCSD_BLOCK_SIZE);
+
+ if (mmcSequentialWrite(&FATFS_HAL_DEVICE, buff))
+ return RES_ERROR;
+ buff += MMCSD_BLOCK_SIZE;
+ count--;
}
if (mmcStopSequentialWrite(&FATFS_HAL_DEVICE))
return RES_ERROR;
@@ -231,8 +233,13 @@ DRESULT disk_write (
case SDC:
if (blkGetDriverState(&FATFS_HAL_DEVICE) != BLK_READY)
return RES_NOTRDY;
+
+ // invalidate cache on buffer
+ cacheBufferFlush(buff, count * MMCSD_BLOCK_SIZE);
+
if (sdcWrite(&FATFS_HAL_DEVICE, sector, buff, count))
return RES_ERROR;
+
return RES_OK;
#endif
#if HAL_USBH_USE_MSD
@@ -240,6 +247,10 @@ DRESULT disk_write (
/* It is initialized externally, just reads the status.*/
if (blkGetDriverState(&MSBLKD[0]) != BLK_READY)
return RES_NOTRDY;
+
+ // invalidate cache on buffer
+ cacheBufferFlush(buff, count * MSBLKD[0].info.blk_size);
+
if (usbhmsdLUNWrite(&MSBLKD[0], sector, buff, count))
return RES_ERROR;
return RES_OK;