manitou
Senior Member+
The SdFat library provides optimized SPI functions that utilize 16-bit frames and the FIFO. I ran some simple unconnected SPI transfers using the teensy 3.0 SPI library (Paul's clever AVR emulation) vs the SPI functions in the SdFat lib. Results for the teensy, DUE, and maple are found in the file SPIperf.txt at
https://github.com/manitou48/DUEZoo
The teensy optimized SPI functions are real close to the SPI clock rate, so a DMA version (TBD) won't run much faster, but could free up the MCU for doing other tasks.
You can get impressive SD performance using the SdFat library as described in this thread
http://forum.pjrc.com/threads/16758-Teensy-3-MicroSD-guide
I ran some lower-level SD tests of 512-byte block read/writes (using card.readBlock() and write.Block()) with the default SPI library and the SdFat library. I had to hack Sd2Card.cpp to get all the SPI clock rates I wanted (ctar). The low-level block data rates for a SANS 8GB card are found at the github URL above in the file SDperft.txt
https://github.com/manitou48/DUEZoo
The teensy optimized SPI functions are real close to the SPI clock rate, so a DMA version (TBD) won't run much faster, but could free up the MCU for doing other tasks.
You can get impressive SD performance using the SdFat library as described in this thread
http://forum.pjrc.com/threads/16758-Teensy-3-MicroSD-guide
I ran some lower-level SD tests of 512-byte block read/writes (using card.readBlock() and write.Block()) with the default SPI library and the SdFat library. I had to hack Sd2Card.cpp to get all the SPI clock rates I wanted (ctar). The low-level block data rates for a SANS 8GB card are found at the github URL above in the file SDperft.txt