SD File System

Committer:
lucydamon
Date:
Thu Dec 01 23:57:53 2022 +0000
Revision:
0:4c17779d2cc6
1st commit- code but not working needs some debugs;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucydamon 0:4c17779d2cc6 1 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */
lucydamon 0:4c17779d2cc6 3 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 4 /* If a working storage control module is available, it should be */
lucydamon 0:4c17779d2cc6 5 /* attached to the FatFs via a glue function rather than modifying it. */
lucydamon 0:4c17779d2cc6 6 /* This is an example of glue functions to attach various exsisting */
lucydamon 0:4c17779d2cc6 7 /* storage control modules to the FatFs module with a defined API. */
lucydamon 0:4c17779d2cc6 8 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 9
lucydamon 0:4c17779d2cc6 10 #include "diskio.h"
lucydamon 0:4c17779d2cc6 11 #include "mbed_debug.h"
lucydamon 0:4c17779d2cc6 12 #include "FATFileSystem.h"
lucydamon 0:4c17779d2cc6 13
lucydamon 0:4c17779d2cc6 14 using namespace mbed;
lucydamon 0:4c17779d2cc6 15
lucydamon 0:4c17779d2cc6 16 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 17 /* Get Drive Status */
lucydamon 0:4c17779d2cc6 18 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 19
lucydamon 0:4c17779d2cc6 20 DSTATUS disk_status (
lucydamon 0:4c17779d2cc6 21 BYTE pdrv /* Physical drive nmuber to identify the drive */
lucydamon 0:4c17779d2cc6 22 )
lucydamon 0:4c17779d2cc6 23 {
lucydamon 0:4c17779d2cc6 24 debug_if(FFS_DBG, "disk_status on pdrv [%d]\n", pdrv);
lucydamon 0:4c17779d2cc6 25 return (DSTATUS)FATFileSystem::_ffs[pdrv]->disk_status();
lucydamon 0:4c17779d2cc6 26 }
lucydamon 0:4c17779d2cc6 27
lucydamon 0:4c17779d2cc6 28 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 29 /* Inidialize a Drive */
lucydamon 0:4c17779d2cc6 30 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 31
lucydamon 0:4c17779d2cc6 32 DSTATUS disk_initialize (
lucydamon 0:4c17779d2cc6 33 BYTE pdrv /* Physical drive nmuber to identify the drive */
lucydamon 0:4c17779d2cc6 34 )
lucydamon 0:4c17779d2cc6 35 {
lucydamon 0:4c17779d2cc6 36 debug_if(FFS_DBG, "disk_initialize on pdrv [%d]\n", pdrv);
lucydamon 0:4c17779d2cc6 37 return (DSTATUS)FATFileSystem::_ffs[pdrv]->disk_initialize();
lucydamon 0:4c17779d2cc6 38 }
lucydamon 0:4c17779d2cc6 39
lucydamon 0:4c17779d2cc6 40 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 41 /* Read Sector(s) */
lucydamon 0:4c17779d2cc6 42 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 43
lucydamon 0:4c17779d2cc6 44 DRESULT disk_read (
lucydamon 0:4c17779d2cc6 45 BYTE pdrv, /* Physical drive nmuber to identify the drive */
lucydamon 0:4c17779d2cc6 46 BYTE* buff, /* Data buffer to store read data */
lucydamon 0:4c17779d2cc6 47 DWORD sector, /* Sector address in LBA */
lucydamon 0:4c17779d2cc6 48 UINT count /* Number of sectors to read */
lucydamon 0:4c17779d2cc6 49 )
lucydamon 0:4c17779d2cc6 50 {
lucydamon 0:4c17779d2cc6 51 debug_if(FFS_DBG, "disk_read(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
lucydamon 0:4c17779d2cc6 52 if (FATFileSystem::_ffs[pdrv]->disk_read((uint8_t*)buff, sector, count))
lucydamon 0:4c17779d2cc6 53 return RES_PARERR;
lucydamon 0:4c17779d2cc6 54 else
lucydamon 0:4c17779d2cc6 55 return RES_OK;
lucydamon 0:4c17779d2cc6 56 }
lucydamon 0:4c17779d2cc6 57
lucydamon 0:4c17779d2cc6 58 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 59 /* Write Sector(s) */
lucydamon 0:4c17779d2cc6 60 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 61
lucydamon 0:4c17779d2cc6 62 #if _USE_WRITE
lucydamon 0:4c17779d2cc6 63 DRESULT disk_write (
lucydamon 0:4c17779d2cc6 64 BYTE pdrv, /* Physical drive nmuber to identify the drive */
lucydamon 0:4c17779d2cc6 65 const BYTE* buff, /* Data to be written */
lucydamon 0:4c17779d2cc6 66 DWORD sector, /* Sector address in LBA */
lucydamon 0:4c17779d2cc6 67 UINT count /* Number of sectors to write */
lucydamon 0:4c17779d2cc6 68 )
lucydamon 0:4c17779d2cc6 69 {
lucydamon 0:4c17779d2cc6 70 debug_if(FFS_DBG, "disk_write(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
lucydamon 0:4c17779d2cc6 71 if (FATFileSystem::_ffs[pdrv]->disk_write((uint8_t*)buff, sector, count))
lucydamon 0:4c17779d2cc6 72 return RES_PARERR;
lucydamon 0:4c17779d2cc6 73 else
lucydamon 0:4c17779d2cc6 74 return RES_OK;
lucydamon 0:4c17779d2cc6 75 }
lucydamon 0:4c17779d2cc6 76 #endif
lucydamon 0:4c17779d2cc6 77
lucydamon 0:4c17779d2cc6 78 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 79 /* Miscellaneous Functions */
lucydamon 0:4c17779d2cc6 80 /*-----------------------------------------------------------------------*/
lucydamon 0:4c17779d2cc6 81
lucydamon 0:4c17779d2cc6 82 #if _USE_IOCTL
lucydamon 0:4c17779d2cc6 83 DRESULT disk_ioctl (
lucydamon 0:4c17779d2cc6 84 BYTE pdrv, /* Physical drive nmuber (0..) */
lucydamon 0:4c17779d2cc6 85 BYTE cmd, /* Control code */
lucydamon 0:4c17779d2cc6 86 void* buff /* Buffer to send/receive control data */
lucydamon 0:4c17779d2cc6 87 )
lucydamon 0:4c17779d2cc6 88 {
lucydamon 0:4c17779d2cc6 89 debug_if(FFS_DBG, "disk_ioctl(%d)\n", cmd);
lucydamon 0:4c17779d2cc6 90 switch(cmd) {
lucydamon 0:4c17779d2cc6 91 case CTRL_SYNC:
lucydamon 0:4c17779d2cc6 92 if(FATFileSystem::_ffs[pdrv] == NULL) {
lucydamon 0:4c17779d2cc6 93 return RES_NOTRDY;
lucydamon 0:4c17779d2cc6 94 } else if(FATFileSystem::_ffs[pdrv]->disk_sync()) {
lucydamon 0:4c17779d2cc6 95 return RES_ERROR;
lucydamon 0:4c17779d2cc6 96 }
lucydamon 0:4c17779d2cc6 97 return RES_OK;
lucydamon 0:4c17779d2cc6 98 case GET_SECTOR_COUNT:
lucydamon 0:4c17779d2cc6 99 if(FATFileSystem::_ffs[pdrv] == NULL) {
lucydamon 0:4c17779d2cc6 100 return RES_NOTRDY;
lucydamon 0:4c17779d2cc6 101 } else {
lucydamon 0:4c17779d2cc6 102 DWORD res = FATFileSystem::_ffs[pdrv]->disk_sectors();
lucydamon 0:4c17779d2cc6 103 if(res > 0) {
lucydamon 0:4c17779d2cc6 104 *((DWORD*)buff) = res; // minimum allowed
lucydamon 0:4c17779d2cc6 105 return RES_OK;
lucydamon 0:4c17779d2cc6 106 } else {
lucydamon 0:4c17779d2cc6 107 return RES_ERROR;
lucydamon 0:4c17779d2cc6 108 }
lucydamon 0:4c17779d2cc6 109 }
lucydamon 0:4c17779d2cc6 110 case GET_BLOCK_SIZE:
lucydamon 0:4c17779d2cc6 111 *((DWORD*)buff) = 1; // default when not known
lucydamon 0:4c17779d2cc6 112 return RES_OK;
lucydamon 0:4c17779d2cc6 113
lucydamon 0:4c17779d2cc6 114 }
lucydamon 0:4c17779d2cc6 115 return RES_PARERR;
lucydamon 0:4c17779d2cc6 116 }
lucydamon 0:4c17779d2cc6 117 #endif