You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
#include "SdFs.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(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_CREAT |O_TRUNC |O_RDWR)) {
|
|
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() {}
|
|
|