STM32F746NG fatfs library
Dependents: DISCO-F746NG_uSD Active-WolfMan_V2-5-All-Frank-Board-Functions_copy DISCO-F746NG_uSD DISCO-F746NG_uSD
diskio.c@0:3a2f06aeceaf, 2018-02-03 (annotated)
- Committer:
- buyukesmeli
- Date:
- Sat Feb 03 14:38:06 2018 +0000
- Revision:
- 0:3a2f06aeceaf
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New 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 |