Pierre Provent / USBHost

Dependents:   TEST_USB_Nucleo_F429ZI Essais_USB_Nucleo_F429ZI SID_V3_Nucleo_F429ZI SID_V4_Nucleo_F429ZI_copy

Committer:
pierreprovent
Date:
Fri Sep 25 10:17:49 2020 +0000
Revision:
0:77ca32e8e04e
Programme acquisition en enregistrement sur clef USB carte Nucleo F429ZI cours ELE118 Cnam

Who changed what in which revision?

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