Fixed version not to issue warning messages. Original: Revision 26:8f15aa3b052b by Dieter Graef. https://developer.mbed.org/users/DieterGraef/code/SDFileSystem/

Dependencies:   FATFileSystem

Dependents:   F746_AudioPlayerSD F746_SD_WavPlayer F746_SD_GraphicEqualizer_ren0620 F746_SD_TextFile_RW ... more

Committer:
MikamiUitOpen
Date:
Mon Jan 09 05:30:14 2017 +0000
Revision:
1:99666dacaae6
Parent:
0:225138ac03fd
2, "FATFileSystem" is updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:225138ac03fd 1 //-----------------------------------------------------------------------
MikamiUitOpen 1:99666dacaae6 2 // Fixed version not to issue warning message by N.Mikami
MikamiUitOpen 1:99666dacaae6 3 // January 09, 2017
MikamiUitOpen 0:225138ac03fd 4 //-----------------------------------------------------------------------
MikamiUitOpen 0:225138ac03fd 5
MikamiUitOpen 0:225138ac03fd 6 /* SD/MMC File System Library
MikamiUitOpen 0:225138ac03fd 7 * Copyright (c) 2016 Neil Thiessen
MikamiUitOpen 0:225138ac03fd 8 * Modified for the use with STM32F746 Discovery (C) 2016 Dieter Greaf
MikamiUitOpen 0:225138ac03fd 9 * Licensed under the Apache License, Version 2.0 (the "License");
MikamiUitOpen 0:225138ac03fd 10 * you may not use this file except in compliance with the License.
MikamiUitOpen 0:225138ac03fd 11 * You may obtain a copy of the License at
MikamiUitOpen 0:225138ac03fd 12 *
MikamiUitOpen 0:225138ac03fd 13 * http://www.apache.org/licenses/LICENSE-2.0
MikamiUitOpen 0:225138ac03fd 14 *
MikamiUitOpen 0:225138ac03fd 15 * Unless required by applicable law or agreed to in writing, software
MikamiUitOpen 0:225138ac03fd 16 * distributed under the License is distributed on an "AS IS" BASIS,
MikamiUitOpen 0:225138ac03fd 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MikamiUitOpen 0:225138ac03fd 18 * See the License for the specific language governing permissions and
MikamiUitOpen 0:225138ac03fd 19 * limitations under the License.
MikamiUitOpen 0:225138ac03fd 20 */
MikamiUitOpen 0:225138ac03fd 21
MikamiUitOpen 0:225138ac03fd 22 #ifndef SD_FILE_SYSTEM_H
MikamiUitOpen 0:225138ac03fd 23 #define SD_FILE_SYSTEM_H
MikamiUitOpen 0:225138ac03fd 24
MikamiUitOpen 0:225138ac03fd 25 #include "mbed.h"
MikamiUitOpen 0:225138ac03fd 26 #include "stm32746g_discovery_sd.h"
MikamiUitOpen 0:225138ac03fd 27 #include "FATFileSystem.h"
MikamiUitOpen 0:225138ac03fd 28
MikamiUitOpen 0:225138ac03fd 29 /** SDFileSystem class.
MikamiUitOpen 0:225138ac03fd 30 * Used for creating a virtual file system for accessing SD/MMC cards via SPI.
MikamiUitOpen 0:225138ac03fd 31 *
MikamiUitOpen 0:225138ac03fd 32 * Example:
MikamiUitOpen 0:225138ac03fd 33 * @code
MikamiUitOpen 0:225138ac03fd 34 * #include "mbed.h"
MikamiUitOpen 0:225138ac03fd 35 * #include "SDFileSystem.h"
MikamiUitOpen 0:225138ac03fd 36 *
MikamiUitOpen 0:225138ac03fd 37 * //Create an SDFileSystem object
MikamiUitOpen 0:225138ac03fd 38 * SDFileSystem sd("sd");
MikamiUitOpen 0:225138ac03fd 39 *
MikamiUitOpen 0:225138ac03fd 40 * int main()
MikamiUitOpen 0:225138ac03fd 41 * {
MikamiUitOpen 0:225138ac03fd 42 * //Mount the filesystem
MikamiUitOpen 0:225138ac03fd 43 * sd.mount();
MikamiUitOpen 0:225138ac03fd 44 *
MikamiUitOpen 0:225138ac03fd 45 * //Perform a write test
MikamiUitOpen 0:225138ac03fd 46 * printf("\nWriting to SD card...");
MikamiUitOpen 0:225138ac03fd 47 * FILE *fp = fopen("/sd/sdtest.txt", "w");
MikamiUitOpen 0:225138ac03fd 48 * if (fp != NULL) {
MikamiUitOpen 0:225138ac03fd 49 * fprintf(fp, "We're writing to an SD card!");
MikamiUitOpen 0:225138ac03fd 50 * fclose(fp);
MikamiUitOpen 0:225138ac03fd 51 * printf("success!\n");
MikamiUitOpen 0:225138ac03fd 52 * } else {
MikamiUitOpen 0:225138ac03fd 53 * printf("failed!\n");
MikamiUitOpen 0:225138ac03fd 54 * }
MikamiUitOpen 0:225138ac03fd 55 *
MikamiUitOpen 0:225138ac03fd 56 * //Perform a read test
MikamiUitOpen 0:225138ac03fd 57 * printf("Reading from SD card...");
MikamiUitOpen 0:225138ac03fd 58 * fp = fopen("/sd/sdtest.txt", "r");
MikamiUitOpen 0:225138ac03fd 59 * if (fp != NULL) {
MikamiUitOpen 0:225138ac03fd 60 * char c = fgetc(fp);
MikamiUitOpen 0:225138ac03fd 61 * if (c == 'W')
MikamiUitOpen 0:225138ac03fd 62 * printf("success!\n");
MikamiUitOpen 0:225138ac03fd 63 * else
MikamiUitOpen 0:225138ac03fd 64 * printf("incorrect char (%c)!\n", c);
MikamiUitOpen 0:225138ac03fd 65 * fclose(fp);
MikamiUitOpen 0:225138ac03fd 66 * } else {
MikamiUitOpen 0:225138ac03fd 67 * printf("failed!\n");
MikamiUitOpen 0:225138ac03fd 68 * }
MikamiUitOpen 0:225138ac03fd 69 *
MikamiUitOpen 0:225138ac03fd 70 * //Unmount the filesystem
MikamiUitOpen 0:225138ac03fd 71 * sd.unmount();
MikamiUitOpen 0:225138ac03fd 72 * }
MikamiUitOpen 0:225138ac03fd 73 * @endcode
MikamiUitOpen 0:225138ac03fd 74
MikamiUitOpen 0:225138ac03fd 75 */
MikamiUitOpen 0:225138ac03fd 76 #define CMD59 (0x40 | 59)
MikamiUitOpen 0:225138ac03fd 77 using namespace mbed;
MikamiUitOpen 0:225138ac03fd 78
MikamiUitOpen 0:225138ac03fd 79 class SDFileSystem : public FATFileSystem
MikamiUitOpen 0:225138ac03fd 80 {
MikamiUitOpen 0:225138ac03fd 81 public:
MikamiUitOpen 0:225138ac03fd 82 /** Represents the different card detect switch types
MikamiUitOpen 0:225138ac03fd 83 */
MikamiUitOpen 0:225138ac03fd 84 enum SwitchType {
MikamiUitOpen 0:225138ac03fd 85 SWITCH_NONE, /**< No card detect switch (assumes socket is always occupied) */
MikamiUitOpen 0:225138ac03fd 86 SWITCH_POS_NO, /**< Switch shorts to VDD when the socket is occupied (positive logic, normally open) */
MikamiUitOpen 0:225138ac03fd 87 SWITCH_POS_NC, /**< Switch shorts to VDD when the socket is empty (positive logic, normally closed) */
MikamiUitOpen 0:225138ac03fd 88 SWITCH_NEG_NO, /**< Switch shorts to GND when the socket is occupied (negative logic, normally open) */
MikamiUitOpen 0:225138ac03fd 89 SWITCH_NEG_NC /**< Switch shorts to GND when the socket is empty (negative logic, normally closed) */
MikamiUitOpen 0:225138ac03fd 90 };
MikamiUitOpen 0:225138ac03fd 91
MikamiUitOpen 0:225138ac03fd 92 /** Represents the different SD/MMC card types
MikamiUitOpen 0:225138ac03fd 93 */
MikamiUitOpen 0:225138ac03fd 94 enum CardType {
MikamiUitOpen 0:225138ac03fd 95 CARD_NONE, /**< No card is present */
MikamiUitOpen 0:225138ac03fd 96 CARD_MMC, /**< MMC card */
MikamiUitOpen 0:225138ac03fd 97 CARD_SD, /**< Standard capacity SD card */
MikamiUitOpen 0:225138ac03fd 98 CARD_SDHC, /**< High capacity SD card */
MikamiUitOpen 0:225138ac03fd 99 CARD_UNKNOWN /**< Unknown or unsupported card */
MikamiUitOpen 0:225138ac03fd 100 };
MikamiUitOpen 0:225138ac03fd 101
MikamiUitOpen 0:225138ac03fd 102 /** Create a virtual file system for accessing SD/MMC cards via SPI
MikamiUitOpen 0:225138ac03fd 103 *
MikamiUitOpen 0:225138ac03fd 104 * @param mosi The SPI data out pin.
MikamiUitOpen 0:225138ac03fd 105 * @param miso The SPI data in pin.
MikamiUitOpen 0:225138ac03fd 106 * @param sclk The SPI clock pin.
MikamiUitOpen 0:225138ac03fd 107 * @param cs The SPI chip select pin.
MikamiUitOpen 0:225138ac03fd 108 * @param name The name used to access the virtual filesystem.
MikamiUitOpen 0:225138ac03fd 109 * @param cd The card detect pin.
MikamiUitOpen 0:225138ac03fd 110 * @param cdtype The type of card detect switch.
MikamiUitOpen 0:225138ac03fd 111 * @param hz The SPI bus frequency (defaults to 1MHz).
MikamiUitOpen 0:225138ac03fd 112 */
MikamiUitOpen 0:225138ac03fd 113 SDFileSystem( const char* name);
MikamiUitOpen 0:225138ac03fd 114
MikamiUitOpen 0:225138ac03fd 115 /** Determine whether or not a card is present
MikamiUitOpen 0:225138ac03fd 116 *
MikamiUitOpen 0:225138ac03fd 117 * @returns
MikamiUitOpen 0:225138ac03fd 118 * 'true' if a card is present,
MikamiUitOpen 0:225138ac03fd 119 * 'false' if no card is present.
MikamiUitOpen 0:225138ac03fd 120 */
MikamiUitOpen 0:225138ac03fd 121 bool card_present();
MikamiUitOpen 0:225138ac03fd 122
MikamiUitOpen 0:225138ac03fd 123 /** Get the detected SD/MMC card type
MikamiUitOpen 0:225138ac03fd 124 *
MikamiUitOpen 0:225138ac03fd 125 * @returns The detected card type as a CardType enum.
MikamiUitOpen 0:225138ac03fd 126 *
MikamiUitOpen 0:225138ac03fd 127 * @note Valid after the filesystem has been mounted.
MikamiUitOpen 0:225138ac03fd 128 */
MikamiUitOpen 0:225138ac03fd 129 SDFileSystem::CardType card_type();
MikamiUitOpen 0:225138ac03fd 130
MikamiUitOpen 0:225138ac03fd 131 /** Get whether or not CRC is enabled for commands and data
MikamiUitOpen 0:225138ac03fd 132 *
MikamiUitOpen 0:225138ac03fd 133 * @returns
MikamiUitOpen 0:225138ac03fd 134 * 'true' if CRC is enabled for commands and data,
MikamiUitOpen 0:225138ac03fd 135 * 'false' if CRC is disabled for commands and data.
MikamiUitOpen 0:225138ac03fd 136 */
MikamiUitOpen 0:225138ac03fd 137 bool crc();
MikamiUitOpen 0:225138ac03fd 138
MikamiUitOpen 0:225138ac03fd 139 /** Set whether or not CRC is enabled for commands and data
MikamiUitOpen 0:225138ac03fd 140 *
MikamiUitOpen 0:225138ac03fd 141 * @param enabled Whether or not to enable CRC for commands and data.
MikamiUitOpen 0:225138ac03fd 142 */
MikamiUitOpen 0:225138ac03fd 143 void crc(bool enabled);
MikamiUitOpen 0:225138ac03fd 144
MikamiUitOpen 0:225138ac03fd 145 /** Get whether or not 16-bit frames are enabled for data read/write operations
MikamiUitOpen 0:225138ac03fd 146 *
MikamiUitOpen 0:225138ac03fd 147 * @returns
MikamiUitOpen 0:225138ac03fd 148 * 'true' if 16-bit frames will be used during data read/write operations,
MikamiUitOpen 0:225138ac03fd 149 * 'false' if 8-bit frames will be used during data read/write operations.
MikamiUitOpen 0:225138ac03fd 150 */
MikamiUitOpen 0:225138ac03fd 151 bool large_frames();
MikamiUitOpen 0:225138ac03fd 152
MikamiUitOpen 0:225138ac03fd 153 /** Set whether or not 16-bit frames are enabled for data read/write operations
MikamiUitOpen 0:225138ac03fd 154 *
MikamiUitOpen 0:225138ac03fd 155 * @param enabled Whether or not 16-bit frames are enabled for data read/write operations.
MikamiUitOpen 0:225138ac03fd 156 */
MikamiUitOpen 0:225138ac03fd 157 void large_frames(bool enabled);
MikamiUitOpen 0:225138ac03fd 158
MikamiUitOpen 0:225138ac03fd 159 /** Get whether or not write validation is enabled for data write operations
MikamiUitOpen 0:225138ac03fd 160 *
MikamiUitOpen 0:225138ac03fd 161 * @returns
MikamiUitOpen 0:225138ac03fd 162 * 'true' if data writes will be verified using CMD13,
MikamiUitOpen 0:225138ac03fd 163 * 'false' if data writes will not be verified.
MikamiUitOpen 0:225138ac03fd 164 */
MikamiUitOpen 0:225138ac03fd 165 bool write_validation();
MikamiUitOpen 0:225138ac03fd 166
MikamiUitOpen 0:225138ac03fd 167 /** Set whether or not write validation is enabled for data write operations
MikamiUitOpen 0:225138ac03fd 168 *
MikamiUitOpen 0:225138ac03fd 169 * @param enabled Whether or not write validation is enabled for data write operations.
MikamiUitOpen 0:225138ac03fd 170 */
MikamiUitOpen 0:225138ac03fd 171 void write_validation(bool enabled);
MikamiUitOpen 0:225138ac03fd 172
MikamiUitOpen 0:225138ac03fd 173 virtual int unmount();
MikamiUitOpen 0:225138ac03fd 174 virtual int disk_initialize();
MikamiUitOpen 0:225138ac03fd 175 virtual int disk_status();
MikamiUitOpen 0:225138ac03fd 176 virtual int disk_read(uint8_t* buffer, uint32_t sector, uint32_t count);
MikamiUitOpen 0:225138ac03fd 177 virtual int disk_write(const uint8_t* buffer, uint32_t sector, uint32_t count);
MikamiUitOpen 0:225138ac03fd 178 virtual int disk_sync();
MikamiUitOpen 0:225138ac03fd 179 virtual uint32_t disk_sectors();
MikamiUitOpen 0:225138ac03fd 180
MikamiUitOpen 0:225138ac03fd 181 private:
MikamiUitOpen 0:225138ac03fd 182 Timer m_Timer;
MikamiUitOpen 0:225138ac03fd 183 InterruptIn m_Cd;
MikamiUitOpen 0:225138ac03fd 184 int m_CdAssert;
MikamiUitOpen 0:225138ac03fd 185 SDFileSystem::CardType m_CardType;
MikamiUitOpen 0:225138ac03fd 186 bool m_Crc;
MikamiUitOpen 0:225138ac03fd 187 bool m_LargeFrames;
MikamiUitOpen 0:225138ac03fd 188 bool m_WriteValidation;
MikamiUitOpen 0:225138ac03fd 189 int m_Status;
MikamiUitOpen 0:225138ac03fd 190 HAL_SD_CardInfoTypedef m_CardInfo;
MikamiUitOpen 0:225138ac03fd 191 //Internal methods
MikamiUitOpen 0:225138ac03fd 192 void onCardRemoval();
MikamiUitOpen 0:225138ac03fd 193 void checkSocket();
MikamiUitOpen 0:225138ac03fd 194
MikamiUitOpen 0:225138ac03fd 195 // Followings are original
MikamiUitOpen 0:225138ac03fd 196 // void DMA2_Stream3_IRQHandler();
MikamiUitOpen 0:225138ac03fd 197 // void DMA2_Stream6_IRQHandler();
MikamiUitOpen 0:225138ac03fd 198 // void SDMMC1_IRQHandler();
MikamiUitOpen 0:225138ac03fd 199
MikamiUitOpen 0:225138ac03fd 200 // Modified
MikamiUitOpen 0:225138ac03fd 201 static void DMA2_Stream3_IRQHandler();
MikamiUitOpen 0:225138ac03fd 202 static void DMA2_Stream6_IRQHandler();
MikamiUitOpen 0:225138ac03fd 203 static void SDMMC1_IRQHandler();
MikamiUitOpen 0:225138ac03fd 204 };
MikamiUitOpen 0:225138ac03fd 205
MikamiUitOpen 0:225138ac03fd 206 #endif