Example of using the SDFileSystem library on a K64F to write data to files and also read data into dynamically created arrays.

Dependencies:   mbed

Committer:
eencae
Date:
Mon Feb 03 12:06:21 2020 +0000
Revision:
1:caceb9d9d17a
Updated Mbed library. Removed serial. Confirmed working Jan 2020.

Who changed what in which revision?

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