123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- /**
- * Copyright (c) 2011-2021 Bill Greiman
- * This file is part of the SdFat library for SD memory cards.
- *
- * MIT License
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
- /**
- \mainpage Arduino %SdFat Library
- \section Warn Warnings for SdFat V2
- This is a major new version of SdFat. It is mostly
- backward compatible with SdFat Version 1 for FAT16/FAT32 cards.
- You should edit SdFatConfig.h to select features. The default version of
- SdFatConfig.h is suitable for UNO and other small AVR boards.
- \section Intro Introduction
- The Arduino %SdFat library supports FAT16, FAT32, and exFAT file systems
- on Standard SD, SDHC, and SDXC cards.
- In %SdFat version 1, SdFat and File are the main classes.
- In %SdFat version 2, SdFat and File are defined by typedefs in terms of the
- following classes.
- The file system classes in the %SdFat library are SdFat32, SdExFat, and SdFs.
- SdFat32 supports FAT16 and FAT32. SdExFat supports exFAT, SdFs supports
- FAT16, FAT32, and exFAT.
- The corresponding file classes are File32, ExFile, and FsFile.
- The types for SdFat and File are defined in SdFatConfig.h. This version
- uses FAT16/FAT32 for small AVR boards and FAT16/FAT32/exFAT for all other
- boards.
- \code{.cpp}
- // File types for SdFat, File, SdFile, SdBaseFile, fstream,
- // ifstream, and ofstream.
- //
- // Set SDFAT_FILE_TYPE to:
- // 1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT.
- //
- #if defined(__AVR__) && FLASHEND < 0X8000
- // FAT16/FAT32 for 32K AVR boards.
- #define SDFAT_FILE_TYPE 1
- #else // defined(__AVR__) && FLASHEND < 0X8000
- // FAT16/FAT32 and exFAT for all other boards.
- #define SDFAT_FILE_TYPE 3
- #endif // defined(__AVR__) && FLASHEND < 0X8000
- \endcode
- It is possible to use option three, support or FAT16/FAT32 and exFat
- on an Uno or other AVR board with 32KB flash and 2KB SRAM but memory
- will be very limited.
- Uno memory use for a simple data logger is:
- > option 1, FAT16/FAT32, 11902 bytes of flash and 855 bytes of SRAM.
- >
- > option 2, exFAT, 14942 bytes of flash and 895 bytes of SRAM.
- >
- > option 3, FAT16/FAT32 and exFAT, 21834 bytes of flash and 908 bytes of SRAM.
- Please read documentation under the above classes tab for more information.
- A number of example are provided in the %SdFat/examples folder. These were
- developed to test %SdFat and illustrate its use.
- \section exFAT exFAT Features
- exFAT has many features not available in FAT16/FAT32.
- Files larger than 4GiB, 64-bit file size and file position.
- Free space allocation performance improved by using a free space bitmap.
- Removal of the physical "." and ".." directory entries that appear in
- FAT16/FAT32 subdirectories.
- Better support for large flash pages with boundary alignment offsets
- for the FAT table and data region.
- exFAT files have two separate 64-bit length fields. The DataLength
- field indicate how much space is allocate to the file. The ValidDataLength
- field indicates how much actual data has been written to the file.
- An exFAT file can be contiguous with pre-allocate clusters and bypass the
- use of the FAT table. In this case the contiguous flag is set in the
- directory entry. This allows an entire file to be written as one large
- multi-block write.
- \section SDPath Paths and Working Directories
- Relative paths in %SdFat are resolved in a manner similar to Windows.
- Each instance of SdFat32, SdExFat, and SdFs has a current directory.
- This directory is called the volume working directory, vwd.
- Initially this directory is the root directory for the volume.
- The volume working directory is changed by calling the chdir(path).
- The call sd.chdir("/2014") will change the volume working directory
- for sd to "/2014", assuming "/2014" exists.
- Relative paths for member functions are resolved by starting at
- the volume working directory.
- For example, the call sd.mkdir("April") will create the directory
- "/2014/April" assuming the volume working directory is "/2014".
- There is current working directory, cwd, that is used to resolve paths
- for file.open() calls.
- For a single SD card, the current working directory is always the volume
- working directory for that card.
- For multiple SD cards the current working directory is set to the volume
- working directory of a card by calling the chvol() member function.
- The chvol() call is like the Windows \<drive letter>: command.
- The call sd2.chvol() will set the current working directory to the volume
- working directory for sd2.
- If the volume working directory for sd2 is "/music" the call
- file.open("BigBand.wav", O_READ);
- will open "/music/BigBand.wav" on sd2.
- \section Install Installation
- You must manually install %SdFat by renaming the download folder %SdFat
- and copy the %SdFat folder to the Arduino libraries folder in your
- sketchbook folder.
- It will be necessary to unzip and rename the folder if you download a zip
- file from GitHub.
- See the Manual installation section of this guide.
- http://arduino.cc/en/Guide/Libraries
- \section SDconfig SdFat Configuration
- Several configuration options may be changed by editing the SdFatConfig.h
- file in the %SdFat/src folder.
- Here are a few of the key options.
- If the symbol ENABLE_DEDICATED_SPI is nonzero, multi-block SD I/O may
- be used for better performance. The SPI bus may not be shared with
- other devices in this mode.
- The symbol SPI_DRIVER_SELECT is used to select the SPI driver.
- > If the symbol SPI_DRIVER_SELECT is:
- >
- > 0 - An optimized custom SPI driver is used if it exists
- > else the standard library driver is used.
- >
- > 1 - The standard library driver is always used.
- >
- > 2 - The software SPI driver is always used.
- >
- > 3 - An external SPI driver derived from SdSpiBaseClass is always used.
- To enable SD card CRC checking in SPI mode set USE_SD_CRC nonzero.
- See SdFatConfig.h for other options.
- \section Hardware Hardware Configuration
- The hardware interface to the SD card should not use a resistor based level
- shifter. Resistor based level shifters results in signal rise times that are
- too slow for many newer SD cards.
- \section HowTo How to format SD Cards
- The best way to restore an SD card's format on a PC or Mac is to use
- SDFormatter which can be downloaded from:
- http://www.sdcard.org/downloads
- A formatter program, SdFormatter.ino, is included in the
- %SdFat/examples/SdFormatter directory. This program attempts to
- emulate SD Association's SDFormatter.
- SDFormatter aligns flash erase boundaries with file
- system structures which reduces write latency and file system overhead.
- The PC/Mac SDFormatter does not have an option for FAT type so it may format
- very small cards as FAT12. Use the %SdFormatter example to force FAT16
- formatting of small cards.
- Do not format the SD card with an OS utility, OS utilities do not format SD
- cards in conformance with the SD standard.
- You should use a freshly formatted SD card for best performance. FAT
- file systems become slower if many files have been created and deleted.
- This is because the directory entry for a deleted file is marked as deleted,
- but is not deleted. When a new file is created, these entries must be scanned
- before creating the file. Also files can become
- fragmented which causes reads and writes to be slower.
- \section ExampleFiles Examples
- A number of examples are provided in the SdFat/examples folder.
- To access these examples from the Arduino development environment
- go to: %File -> Examples -> %SdFat -> \<program Name\>
- Compile, upload to your Arduino and click on Serial Monitor to run
- the example.
- Here is a list:
- AvrAdcLogger - Fast AVR ADC logger using Timer/ADC interrupts.
- BackwardCompatibility - Demonstrate SD.h compatibility with %SdFat.h.
- bench - A read/write benchmark.
- %BufferedPrint - Demo a buffered print class for AVR loggers.
- debug folder - Some of my debug programs - will be remove in the future.
- DirectoryFunctions - Use of chdir(), ls(), mkdir(), and rmdir().
- examplesV1 folder - Examples from SdFat V1 for compatibility tests.
- ExFatLogger - A data-logger optimized for exFAT features.
- MinimumSizeSdReader - Example of small file reader for FAT16/FAT32.
- OpenNext - Open all files in the root dir and print their filename.
- QuickStart - Quick hardware test for SPI card access.
- ReadCsvFile - Function to read a CSV text file one field at a time.
- rename - demonstrates use of rename().
- RtcTimestampTest - Demonstration of timestamps with RTClib.
- SdErrorCodes - Produce a list of error codes.
- SdFormatter - This program will format an SD, SDHC, or SDXC card.
- SdInfo - Initialize an SD card and analyze its structure for trouble shooting.
- SoftwareSpi - Demo of limited Software SPI support in SdFat V2.
- STM32Test - Example use of two SPI ports on an STM32 board.
- TeensyDmaAdcLogger - Fast logger using DMA ADC.
- TeensyRtcTimestamp - %File timestamps for Teensy3.
- TeensySdioDemo - Demo of SDIO and SPI modes for the Teensy 3.5/3.6 built-in SD.
- TeensySdioLogger - Fast logger using a ring buffer.
- UnicodeFilenames - Test program for Unicode file names.
- UserChipSelectFunction - Useful for port expanders or replacement of the standard GPIO functions.
- UserSPIDriver - An example of an external SPI driver.
- */
|