Reading Analog Ports and Saving in a micro SD CARD with the KL25z

Dependencies:   SDFileSystem mbed

Fork of SDFileSystem_HelloWorld by Neil Thiessen

main.cpp

Committer:
neilt6
Date:
2015-07-08
Revision:
16:d68a6d4050f2
Parent:
12:bd8b17cd6a7b
Child:
17:e5b7469082c8

File content as of revision 16:d68a6d4050f2:

#include "mbed.h"
#include "SDFileSystem.h"

Timer timer;
DigitalIn button(p21, PullUp);
SDFileSystem sd(p5, p6, p7, p20, "sd", p22, SDFileSystem::SWITCH_NEG_NO, 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()
{
    //Configure CRC, large frames, and write validation
    sd.crc(true);
    sd.large_frames(true);
    sd.write_validation(true);

    //Fill the buffer with random data for the write test
    srand(time(NULL));
    for (int i = 0; i < sizeof(buffer); i++)
        buffer[i] = rand();

    while(1) {
        //Print the start message
        printf("\nPress the button to perform tests: ");

        //Wait for the button to be pressed
        while(button);

        //Display the card type and capacity
        printf("\nCard type: ");
        if (sd.card_type() == SDFileSystem::CARD_NONE)
            printf("None\n");
        else if (sd.card_type() == SDFileSystem::CARD_MMC)
            printf("MMC\n");
        else if (sd.card_type() == SDFileSystem::CARD_SD)
            printf("SD\n");
        else if (sd.card_type() == SDFileSystem::CARD_SDHC)
            printf("SDHC\n");
        else
            printf("Unknown\n");
        printf("Sectors: %llu\n", sd.disk_sectors());
        printf("Capacity: %.1fMB\n", sd.disk_sectors() / 2048.0);

        //Mount the filesystem
        sd.mount();

        /*//Format the card
        printf("Formatting card...");
        if (sd.format() == 0)
            printf("success!\n");
        else
            printf("failed!\n");*/

        //Perform a read/write tests
        writeTest();
        readTest();

        //Unmount the filesystem
        sd.unmount();
    }
}