STM32F746NG fatfs library

Dependents:   DISCO-F746NG_uSD Active-WolfMan_V2-5-All-Frank-Board-Functions_copy DISCO-F746NG_uSD DISCO-F746NG_uSD

Committer:
buyukesmeli
Date:
Sat Feb 03 14:38:06 2018 +0000
Revision:
0:3a2f06aeceaf
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
buyukesmeli 0:3a2f06aeceaf 1 /*-----------------------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */
buyukesmeli 0:3a2f06aeceaf 3 /* */
buyukesmeli 0:3a2f06aeceaf 4 /* Portions COPYRIGHT 2016 STMicroelectronics */
buyukesmeli 0:3a2f06aeceaf 5 /* Portions Copyright (C) 2014, ChaN, all right reserved */
buyukesmeli 0:3a2f06aeceaf 6 /*-----------------------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 7 /* If a working storage control module is available, it should be */
buyukesmeli 0:3a2f06aeceaf 8 /* attached to the FatFs via a glue function rather than modifying it. */
buyukesmeli 0:3a2f06aeceaf 9 /* This is an example of glue functions to attach various exsisting */
buyukesmeli 0:3a2f06aeceaf 10 /* storage control modules to the FatFs module with a defined API. */
buyukesmeli 0:3a2f06aeceaf 11 /*-----------------------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 12
buyukesmeli 0:3a2f06aeceaf 13 /**
buyukesmeli 0:3a2f06aeceaf 14 ******************************************************************************
buyukesmeli 0:3a2f06aeceaf 15 * @file diskio.c
buyukesmeli 0:3a2f06aeceaf 16 * @author MCD Application Team
buyukesmeli 0:3a2f06aeceaf 17 * @version V1.4.0
buyukesmeli 0:3a2f06aeceaf 18 * @date 23-December-2016
buyukesmeli 0:3a2f06aeceaf 19 * @brief FatFs low level disk I/O module.
buyukesmeli 0:3a2f06aeceaf 20 ******************************************************************************
buyukesmeli 0:3a2f06aeceaf 21 * @attention
buyukesmeli 0:3a2f06aeceaf 22 *
buyukesmeli 0:3a2f06aeceaf 23 *
buyukesmeli 0:3a2f06aeceaf 24 * Redistribution and use in source and binary forms, with or without
buyukesmeli 0:3a2f06aeceaf 25 * modification, are permitted, provided that the following conditions are met:
buyukesmeli 0:3a2f06aeceaf 26 *
buyukesmeli 0:3a2f06aeceaf 27 * 1. Redistribution of source code must retain the above copyright notice,
buyukesmeli 0:3a2f06aeceaf 28 * this list of conditions and the following disclaimer.
buyukesmeli 0:3a2f06aeceaf 29 * 2. Redistributions in binary form must reproduce the above copyright notice,
buyukesmeli 0:3a2f06aeceaf 30 * this list of conditions and the following disclaimer in the documentation
buyukesmeli 0:3a2f06aeceaf 31 * and/or other materials provided with the distribution.
buyukesmeli 0:3a2f06aeceaf 32 * 3. Neither the name of STMicroelectronics nor the names of other
buyukesmeli 0:3a2f06aeceaf 33 * contributors to this software may be used to endorse or promote products
buyukesmeli 0:3a2f06aeceaf 34 * derived from this software without specific written permission.
buyukesmeli 0:3a2f06aeceaf 35 * 4. This software, including modifications and/or derivative works of this
buyukesmeli 0:3a2f06aeceaf 36 * software, must execute solely and exclusively on microcontroller or
buyukesmeli 0:3a2f06aeceaf 37 * microprocessor devices manufactured by or for STMicroelectronics.
buyukesmeli 0:3a2f06aeceaf 38 * 5. Redistribution and use of this software other than as permitted under
buyukesmeli 0:3a2f06aeceaf 39 * this license is void and will automatically terminate your rights under
buyukesmeli 0:3a2f06aeceaf 40 * this license.
buyukesmeli 0:3a2f06aeceaf 41 *
buyukesmeli 0:3a2f06aeceaf 42 * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
buyukesmeli 0:3a2f06aeceaf 43 * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
buyukesmeli 0:3a2f06aeceaf 44 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
buyukesmeli 0:3a2f06aeceaf 45 * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
buyukesmeli 0:3a2f06aeceaf 46 * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
buyukesmeli 0:3a2f06aeceaf 47 * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
buyukesmeli 0:3a2f06aeceaf 48 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
buyukesmeli 0:3a2f06aeceaf 49 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
buyukesmeli 0:3a2f06aeceaf 50 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
buyukesmeli 0:3a2f06aeceaf 51 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
buyukesmeli 0:3a2f06aeceaf 52 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
buyukesmeli 0:3a2f06aeceaf 53 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
buyukesmeli 0:3a2f06aeceaf 54 *
buyukesmeli 0:3a2f06aeceaf 55 ******************************************************************************
buyukesmeli 0:3a2f06aeceaf 56 */
buyukesmeli 0:3a2f06aeceaf 57
buyukesmeli 0:3a2f06aeceaf 58 /* Includes ------------------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 59 #include "diskio.h"
buyukesmeli 0:3a2f06aeceaf 60 #include "ff_gen_drv.h"
buyukesmeli 0:3a2f06aeceaf 61
buyukesmeli 0:3a2f06aeceaf 62 /* Private typedef -----------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 63 /* Private define ------------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 64 /* Private variables ---------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 65 extern Disk_drvTypeDef disk;
buyukesmeli 0:3a2f06aeceaf 66
buyukesmeli 0:3a2f06aeceaf 67 /* Private function prototypes -----------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 68 /* Private functions ---------------------------------------------------------*/
buyukesmeli 0:3a2f06aeceaf 69
buyukesmeli 0:3a2f06aeceaf 70 /**
buyukesmeli 0:3a2f06aeceaf 71 * @brief Gets Disk Status
buyukesmeli 0:3a2f06aeceaf 72 * @param pdrv: Physical drive number (0..)
buyukesmeli 0:3a2f06aeceaf 73 * @retval DSTATUS: Operation status
buyukesmeli 0:3a2f06aeceaf 74 */
buyukesmeli 0:3a2f06aeceaf 75 DSTATUS disk_status (
buyukesmeli 0:3a2f06aeceaf 76 BYTE pdrv /* Physical drive nmuber to identify the drive */
buyukesmeli 0:3a2f06aeceaf 77 )
buyukesmeli 0:3a2f06aeceaf 78 {
buyukesmeli 0:3a2f06aeceaf 79 DSTATUS stat;
buyukesmeli 0:3a2f06aeceaf 80
buyukesmeli 0:3a2f06aeceaf 81 stat = disk.drv[pdrv]->disk_status(disk.lun[pdrv]);
buyukesmeli 0:3a2f06aeceaf 82 return stat;
buyukesmeli 0:3a2f06aeceaf 83 }
buyukesmeli 0:3a2f06aeceaf 84
buyukesmeli 0:3a2f06aeceaf 85 /**
buyukesmeli 0:3a2f06aeceaf 86 * @brief Initializes a Drive
buyukesmeli 0:3a2f06aeceaf 87 * @param pdrv: Physical drive number (0..)
buyukesmeli 0:3a2f06aeceaf 88 * @retval DSTATUS: Operation status
buyukesmeli 0:3a2f06aeceaf 89 */
buyukesmeli 0:3a2f06aeceaf 90 DSTATUS disk_initialize (
buyukesmeli 0:3a2f06aeceaf 91 BYTE pdrv /* Physical drive nmuber to identify the drive */
buyukesmeli 0:3a2f06aeceaf 92 )
buyukesmeli 0:3a2f06aeceaf 93 {
buyukesmeli 0:3a2f06aeceaf 94 DSTATUS stat = RES_OK;
buyukesmeli 0:3a2f06aeceaf 95
buyukesmeli 0:3a2f06aeceaf 96 if(disk.is_initialized[pdrv] == 0)
buyukesmeli 0:3a2f06aeceaf 97 {
buyukesmeli 0:3a2f06aeceaf 98 disk.is_initialized[pdrv] = 1;
buyukesmeli 0:3a2f06aeceaf 99 stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
buyukesmeli 0:3a2f06aeceaf 100 }
buyukesmeli 0:3a2f06aeceaf 101 return stat;
buyukesmeli 0:3a2f06aeceaf 102 }
buyukesmeli 0:3a2f06aeceaf 103
buyukesmeli 0:3a2f06aeceaf 104 /**
buyukesmeli 0:3a2f06aeceaf 105 * @brief Reads Sector(s)
buyukesmeli 0:3a2f06aeceaf 106 * @param pdrv: Physical drive number (0..)
buyukesmeli 0:3a2f06aeceaf 107 * @param *buff: Data buffer to store read data
buyukesmeli 0:3a2f06aeceaf 108 * @param sector: Sector address (LBA)
buyukesmeli 0:3a2f06aeceaf 109 * @param count: Number of sectors to read (1..128)
buyukesmeli 0:3a2f06aeceaf 110 * @retval DRESULT: Operation result
buyukesmeli 0:3a2f06aeceaf 111 */
buyukesmeli 0:3a2f06aeceaf 112 DRESULT disk_read (
buyukesmeli 0:3a2f06aeceaf 113 BYTE pdrv, /* Physical drive nmuber to identify the drive */
buyukesmeli 0:3a2f06aeceaf 114 BYTE *buff, /* Data buffer to store read data */
buyukesmeli 0:3a2f06aeceaf 115 DWORD sector, /* Sector address in LBA */
buyukesmeli 0:3a2f06aeceaf 116 UINT count /* Number of sectors to read */
buyukesmeli 0:3a2f06aeceaf 117 )
buyukesmeli 0:3a2f06aeceaf 118 {
buyukesmeli 0:3a2f06aeceaf 119 DRESULT res;
buyukesmeli 0:3a2f06aeceaf 120
buyukesmeli 0:3a2f06aeceaf 121 res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count);
buyukesmeli 0:3a2f06aeceaf 122 return res;
buyukesmeli 0:3a2f06aeceaf 123 }
buyukesmeli 0:3a2f06aeceaf 124
buyukesmeli 0:3a2f06aeceaf 125 /**
buyukesmeli 0:3a2f06aeceaf 126 * @brief Writes Sector(s)
buyukesmeli 0:3a2f06aeceaf 127 * @param pdrv: Physical drive number (0..)
buyukesmeli 0:3a2f06aeceaf 128 * @param *buff: Data to be written
buyukesmeli 0:3a2f06aeceaf 129 * @param sector: Sector address (LBA)
buyukesmeli 0:3a2f06aeceaf 130 * @param count: Number of sectors to write (1..128)
buyukesmeli 0:3a2f06aeceaf 131 * @retval DRESULT: Operation result
buyukesmeli 0:3a2f06aeceaf 132 */
buyukesmeli 0:3a2f06aeceaf 133 #if _USE_WRITE == 1
buyukesmeli 0:3a2f06aeceaf 134 DRESULT disk_write (
buyukesmeli 0:3a2f06aeceaf 135 BYTE pdrv, /* Physical drive nmuber to identify the drive */
buyukesmeli 0:3a2f06aeceaf 136 const BYTE *buff, /* Data to be written */
buyukesmeli 0:3a2f06aeceaf 137 DWORD sector, /* Sector address in LBA */
buyukesmeli 0:3a2f06aeceaf 138 UINT count /* Number of sectors to write */
buyukesmeli 0:3a2f06aeceaf 139 )
buyukesmeli 0:3a2f06aeceaf 140 {
buyukesmeli 0:3a2f06aeceaf 141 DRESULT res;
buyukesmeli 0:3a2f06aeceaf 142
buyukesmeli 0:3a2f06aeceaf 143 res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count);
buyukesmeli 0:3a2f06aeceaf 144 return res;
buyukesmeli 0:3a2f06aeceaf 145 }
buyukesmeli 0:3a2f06aeceaf 146 #endif /* _USE_WRITE == 1 */
buyukesmeli 0:3a2f06aeceaf 147
buyukesmeli 0:3a2f06aeceaf 148 /**
buyukesmeli 0:3a2f06aeceaf 149 * @brief I/O control operation
buyukesmeli 0:3a2f06aeceaf 150 * @param pdrv: Physical drive number (0..)
buyukesmeli 0:3a2f06aeceaf 151 * @param cmd: Control code
buyukesmeli 0:3a2f06aeceaf 152 * @param *buff: Buffer to send/receive control data
buyukesmeli 0:3a2f06aeceaf 153 * @retval DRESULT: Operation result
buyukesmeli 0:3a2f06aeceaf 154 */
buyukesmeli 0:3a2f06aeceaf 155 #if _USE_IOCTL == 1
buyukesmeli 0:3a2f06aeceaf 156 DRESULT disk_ioctl (
buyukesmeli 0:3a2f06aeceaf 157 BYTE pdrv, /* Physical drive nmuber (0..) */
buyukesmeli 0:3a2f06aeceaf 158 BYTE cmd, /* Control code */
buyukesmeli 0:3a2f06aeceaf 159 void *buff /* Buffer to send/receive control data */
buyukesmeli 0:3a2f06aeceaf 160 )
buyukesmeli 0:3a2f06aeceaf 161 {
buyukesmeli 0:3a2f06aeceaf 162 DRESULT res;
buyukesmeli 0:3a2f06aeceaf 163
buyukesmeli 0:3a2f06aeceaf 164 res = disk.drv[pdrv]->disk_ioctl(disk.lun[pdrv], cmd, buff);
buyukesmeli 0:3a2f06aeceaf 165 return res;
buyukesmeli 0:3a2f06aeceaf 166 }
buyukesmeli 0:3a2f06aeceaf 167 #endif /* _USE_IOCTL == 1 */
buyukesmeli 0:3a2f06aeceaf 168
buyukesmeli 0:3a2f06aeceaf 169 /**
buyukesmeli 0:3a2f06aeceaf 170 * @brief Gets Time from RTC
buyukesmeli 0:3a2f06aeceaf 171 * @param None
buyukesmeli 0:3a2f06aeceaf 172 * @retval Time in DWORD
buyukesmeli 0:3a2f06aeceaf 173 */
buyukesmeli 0:3a2f06aeceaf 174 __weak DWORD get_fattime (void)
buyukesmeli 0:3a2f06aeceaf 175 {
buyukesmeli 0:3a2f06aeceaf 176 return 0;
buyukesmeli 0:3a2f06aeceaf 177 }
buyukesmeli 0:3a2f06aeceaf 178
buyukesmeli 0:3a2f06aeceaf 179 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
buyukesmeli 0:3a2f06aeceaf 180