Austins SD card logger
Dependencies: mbed SDFileSystem
Diff: main.cpp
- Revision:
- 2:7bb016846566
- Parent:
- 0:bdbd3d6fc5d5
- Child:
- 3:8d4c12a3b5d4
--- a/main.cpp Tue May 16 05:18:55 2017 +0000 +++ b/main.cpp Tue Apr 16 04:30:26 2019 +0000 @@ -1,19 +1,112 @@ #include "mbed.h" #include "SDFileSystem.h" +#include "string.h" -SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board +/*SD card*/ +//#define DI D11 +//#define DO D12 +//#define SCK D13 +//#define CS D10 +#define DI PB_5 +#define DO PB_4 +#define SCK PB_3 +#define CS PB_6 + + +char fname[255]; +char current_time[64]; + + +/*Serial buffer*/ +#define PAGE_SIZE 4096 +#define HEADER_SIZE 10 +#define CHUNK_SIZE (PAGE_SIZE-HEADER_SIZE) +#define BUF_SIZE (16*PAGE_SIZE) + +//RTC +#define SET_TIME false + +int start = 0, end = 0; +unsigned char buf[BUF_SIZE]; +unsigned char hdr[HEADER_SIZE] = {0xff, 0xff,'M','A','N','B','L','O','R','T'}; + +/*UART*/ +#define BAUD_RATE 256000 +//#define BAUD_RATE 9600 +//Serial serial4(PA_11, D9); +Serial serial4(PA_2, PA_3); +Serial pc(PA_9, PA_10); + +/*Test pins*/ +DigitalOut test(PC_0); +DigitalOut test2(PC_2); +int flag=0, flag2=0; + + + + + +void rx_callback() { + while(serial4.readable()) { + buf[end] = serial4.getc(); + //pc.printf("%c",buf[end]); + end++; + if (end == BUF_SIZE) end = 0; + } +} int main() { - printf("Hello World!\n"); + pc.baud(256000); + + /*init SD card, wait for card insertion*/ + pc.printf("\n\rconfiging SD card \n\r"); + SDFileSystem sd(DI, DO, SCK, CS, "sd"); + + while (sd.disk_status()) { + sd.disk_initialize(); + wait(0.5); + } + pc.printf("disk initialized \n\r"); + + if (SET_TIME) {set_time(1526496200);} + + time_t seconds = time(NULL); + pc.printf("Time as seconds since January 1, 1970 = %d\n\r", seconds); + + + + strcpy(fname, "/sd/log_"); - mkdir("/sd/mydir", 0777); + sprintf(current_time, "%u", seconds ); + strcat(fname, current_time); + strcat(fname, ".dat"); + pc.printf("Logging to %s\n", fname); - FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); - if(fp == NULL) { - error("Could not open file for write\n"); + FILE *fp = fopen(fname, "wb"); + + + /*init serial*/ + serial4.baud(BAUD_RATE); + serial4.attach(rx_callback); + + //while (1==1) {pc.prinf("%i",end);} + + for (;;) { + int length = end - start; + if (length < 0) length += BUF_SIZE; + if (length >= CHUNK_SIZE) { + //fwrite(hdr, 1, HEADER_SIZE, fp); + if (start+CHUNK_SIZE-1 < BUF_SIZE) { + fwrite(buf+start, 1, CHUNK_SIZE, fp); + } else { + fwrite(buf+start, 1, BUF_SIZE-start+1, fp); + fwrite(buf, 1, CHUNK_SIZE-(BUF_SIZE-start+1), fp); + } + fflush(fp); + start += CHUNK_SIZE; + if (start >= BUF_SIZE) start -= BUF_SIZE; + } } - fprintf(fp, "Hello fun SD Card World!"); - fclose(fp); +} - printf("Goodbye World!\n"); -} + \ No newline at end of file