|
- #include "SdFat.h"
-
- #ifdef __AVR__
- const uint32_t FILE_SIZE_MiB = 10UL;
- #else // __AVR__
- const uint32_t FILE_SIZE_MiB = 100UL;
- #endif
-
- bool waitBusy = true;
-
- #define SD_CONFIG SdSpiConfig(SS, DEDICATED_SPI)
- // Config for Teensy 3.5/3.6 buit-in SD.
- //#define SD_CONFIG SdSpiConfig(SDCARD_SS_PIN, DEDICATED_SPI)
- //#define SD_CONFIG SdioConfig(FIFO_SDIO)
-
- //------------------------------------------------------------------------------
- const uint64_t FILE_SIZE = (uint64_t)FILE_SIZE_MiB << 20;
-
- SdExFat sd;
- ExFile file;
-
- uint8_t buf[512];
-
- #define error(s) sd.errorHalt(&Serial, F(s))
- //------------------------------------------------------------------------------
- void setup() {
- Serial.begin(9600);
-
- // Wait for USB Serial
- while (!Serial) {
- SysCall::yield();
- }
- delay(1000);
-
- Serial.println(F("Type any character to start\n"));
- while (!Serial.available()) {
- SysCall::yield();
- }
- // Initialize the SD card.
- if (!sd.begin(SD_CONFIG)) {
- sd.initErrorHalt();
- }
- if (!file.open("SdBusyTest.bin", O_RDWR | O_CREAT |O_TRUNC)) {
- error("file open failed");
- }
- if (!file.preAllocate(FILE_SIZE)) {
- error("preallocate failed");
- }
- Serial.print(F("Starting write of "));
- Serial.print(FILE_SIZE_MiB);
- Serial.println(F(" MiB."));
- uint32_t maxMicros = 0;
- uint32_t minMicros = 99999999;
- uint32_t ms = millis();
-
- // Write a dummy sector to start a multi-sector write.
- if(file.write(buf, sizeof(buf)) != sizeof(buf)) {
- error("write failed for first sector");
- }
-
- while (file.position() < FILE_SIZE) {
- if (waitBusy) {
- while (sd.card()->isBusy()) {}
- }
- uint32_t m = micros();
- if (file.write(buf, sizeof(buf)) != sizeof(buf)) {
- error("write failed");
- }
- m = micros() - m;
- if (m < minMicros) {
- minMicros = m;
- }
- if (m > maxMicros) {
- maxMicros = m;
- }
- }
- ms = millis() - ms;
- Serial.print(F("minMicros: "));
- Serial.println(minMicros);
- Serial.print(F("maxMicros: "));
- Serial.println(maxMicros);
- Serial.print(1e-3*ms);
- Serial.println(F(" Seconds"));
- Serial.print(1.0*FILE_SIZE/ms);
- Serial.println(F(" KB/sec"));
- }
- void loop() {}
|