From c436c39ea8dd1e78b72dd2b504f8370c9b43631e Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Wed, 6 May 2020 23:52:16 +0200 Subject: [PATCH] pkg/fatfs: use page-wise read() and write() The FAT file system operates on sectors (pages), so use the new mtd_write_page() and mtd_read_page() functions. This also avoids the wrap-around after reading/writing past 4 GiB. --- pkg/fatfs/fatfs_diskio/mtd/mtd_diskio.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/pkg/fatfs/fatfs_diskio/mtd/mtd_diskio.c b/pkg/fatfs/fatfs_diskio/mtd/mtd_diskio.c index d218276de1..687f71aa1e 100644 --- a/pkg/fatfs/fatfs_diskio/mtd/mtd_diskio.c +++ b/pkg/fatfs/fatfs_diskio/mtd/mtd_diskio.c @@ -95,15 +95,15 @@ DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count) return RES_PARERR; } - uint32_t nread = count * fatfs_mtd_devs[pdrv]->page_size; - int res = mtd_read(fatfs_mtd_devs[pdrv], buff, - sector * fatfs_mtd_devs[pdrv]->page_size, - nread); + uint32_t sector_size = fatfs_mtd_devs[pdrv]->page_size + * fatfs_mtd_devs[pdrv]->pages_per_sector; + + int res = mtd_read_page(fatfs_mtd_devs[pdrv], buff, + sector, 0, count * sector_size); if (res != 0) { return RES_ERROR; } - assert((nread / fatfs_mtd_devs[pdrv]->page_size) == count); return RES_OK; } @@ -127,23 +127,21 @@ DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count) } /* erase memory before writing to it */ - int res = mtd_erase(fatfs_mtd_devs[pdrv], - sector * fatfs_mtd_devs[pdrv]->page_size, - count * fatfs_mtd_devs[pdrv]->page_size); + int res = mtd_erase_sector(fatfs_mtd_devs[pdrv], sector, count); if (res != 0) { return RES_ERROR; /* erase failed! */ } - uint32_t nwrite = count * fatfs_mtd_devs[pdrv]->page_size; - res = mtd_write(fatfs_mtd_devs[pdrv], buff, - sector * fatfs_mtd_devs[pdrv]->page_size, - nwrite); + uint32_t sector_size = fatfs_mtd_devs[pdrv]->page_size + * fatfs_mtd_devs[pdrv]->pages_per_sector; + + res = mtd_write_page(fatfs_mtd_devs[pdrv], buff, + sector, 0, count * sector_size); if (res != 0) { return RES_ERROR; } - assert((nwrite / fatfs_mtd_devs[pdrv]->page_size) == count); return RES_OK; }