A collection of examples organized from basics to advanced.
Dependencies: mbed SDFileSystem
Mbed online compiler has no facility to easily manage a lot of programs or organized them in to related folders. This makes creating an examples and sample pack difficult.
This repository contains a single main.cpp file (which does very little), and a BuildOptions.h file. Simply uncomment the example you would like to compile from the build options. Each example is wrapped in a compiler directive.
If the directive does not include a description comment, it likely does not exist yet. If you would like to contribute to the Examples project, please contact me or fork and issue a pull request.
09_Files_SD/SD_Speed_Test.cpp
- Committer:
- epremeaux
- Date:
- 2019-07-09
- Revision:
- 2:17a5c34b3a79
File content as of revision 2:17a5c34b3a79:
/* https://os.mbed.com/users/neilt6/code/SDFileSystem/ * * Mounts an SD card, creates a buffer of random data, then writes and reads * back that data. Finishes with a report of the size of the buffer file * and read / write speeds. * * SDFileSystem library requires MBED Release 165, dated Feb 20, 2019. Updates will break it. * If having difficulty, import the link above as independant program. */ #ifdef COMPILE_SD_Speed_Test #include "SDFileSystem.h" Timer timer; DigitalIn button(D7, PullUp); // MOSI, MISO, CLK, CS, "name", detect SDFileSystem sd(PB_5, PB_4, PB_3, PA_11, "sd", PA_8, SDFileSystem::SWITCH_NEG_NC, 25000000); char buffer[4096]; void writeTest() { //Test write performance by creating a 1MB file printf("Testing %iB write performance...", sizeof(buffer)); FileHandle* file = sd.open("Test File.bin", O_WRONLY | O_CREAT | O_TRUNC); if (file != NULL) { timer.start(); for (int i = 0; i < (1048576 / sizeof(buffer)); i++) { if (file->write(buffer, sizeof(buffer)) != sizeof(buffer)) { timer.stop(); printf("write error!\n"); timer.reset(); return; } } timer.stop(); if (file->close()) printf("failed to close file!\n"); else printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0)); timer.reset(); } else { printf("failed to create file!\n"); } } void readTest() { //Test read performance by reading the 1MB file created by writeTest() printf("Testing %iB read performance...", sizeof(buffer)); FileHandle* file = sd.open("Test File.bin", O_RDONLY); if (file != NULL) { timer.start(); int iterations = 0; while (file->read(buffer, sizeof(buffer)) == sizeof(buffer)) iterations++; timer.stop(); if (iterations != (1048576 / sizeof(buffer))) printf("read error!\n"); else if (file->close()) printf("failed to close file!\n"); else if (sd.remove("Test File.bin")) printf("failed to delete file!\n"); else printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0)); timer.reset(); } else { printf("failed to open file!\n"); } } int main() { printf("SD Card Tester...\n"); //Configure CRC, large frames, and write validation sd.crc(true); sd.large_frames(true); sd.write_validation(true); printf("Filling buffer with random data for write test...\n"); //Fill the buffer with random data for the write test srand(time(NULL)); for (int i = 0; i < sizeof(buffer); i++) buffer[i] = rand(); printf("Done. Press button to test\n"); while(1) { //Simple button debouncing wait(0.5); //Print the start message printf("\nStarting Tests: "); //Wait for the button to be pressed while(button); //Make sure a card is present if (!sd.card_present()) { printf("\nNo card present!\n"); continue; } //Try to mount the SD card printf("\nMounting SD card..."); if (sd.mount() != 0) { printf("failed!\n"); continue; } printf("success!\n"); //Display the card type printf("\tCard type: "); SDFileSystem::CardType cardType = sd.card_type(); if (cardType == SDFileSystem::CARD_NONE) printf("None\n"); else if (cardType == SDFileSystem::CARD_MMC) printf("MMC\n"); else if (cardType == SDFileSystem::CARD_SD) printf("SD\n"); else if (cardType == SDFileSystem::CARD_SDHC) printf("SDHC\n"); else printf("Unknown\n"); //Display the card capacity printf("\tSectors: %u\n", sd.disk_sectors()); printf("\tCapacity: %.1fMB\n", sd.disk_sectors() / 2048.0); /*//Format the card printf("Formatting SD card..."); if (sd.format() != 0) { printf("failed!\n"); continue; } printf("success!\n");*/ //Perform a read/write test writeTest(); readTest(); //Unmount the SD card sd.unmount(); } } #endif