EEPROMのデータをSDカードにコピーし,バイナリデータからテキストデータに変換するプログラム.SDカードスロットの接続が必要.SDカードにあらかじめformat.txtが必要.

Dependencies:   mbed SDFileSystem EEPROM_lib

Files at this revision

API Documentation at this revision

Comitter:
Sigma884
Date:
Tue Feb 12 15:55:25 2019 +0000
Commit message:
EEPROM's Binary Data encode for Text Data ver1

Changed in this revision

EEPROM_lib.lib Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 16243fbc2c6e EEPROM_lib.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM_lib.lib	Tue Feb 12 15:55:25 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/PQ_Hybrid_Electrical_Equipment_Team/code/EEPROM_lib/#d9de12f32978
diff -r 000000000000 -r 16243fbc2c6e SDFileSystem.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Tue Feb 12 15:55:25 2019 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/teams/PQ_Hybrid_Electrical_Equipment_Team/code/SDFileSystem/#48133645f053
diff -r 000000000000 -r 16243fbc2c6e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Feb 12 15:55:25 2019 +0000
@@ -0,0 +1,266 @@
+#include "mbed.h"
+#include "SDFileSystem.h"
+#include "EEPROM_lib.h"
+
+Serial pc(USBTX, USBRX, 115200);
+I2C i2c_bus(p28, p27);
+
+EEPROM_lib EEPROM(i2c_bus, 4);
+SDFileSystem sd(p5, p6, p7, p8, "sd");
+
+const int DATA_INT = 1, DATA_FLOAT = 2, DATA_DOUBLE = 3, DATA_BOOL = 4, DATA_CHAR = 5, DATA_SHORT = 6, DATA_LONGLONG = 7;
+
+FILE *file_bin, *file_format, *file_out;
+
+int main() {
+    wait(1.0f);
+    
+    //プログラムの説明
+    pc.printf("\r\n");
+    pc.printf("EEPROM's Binary Data Encode for Text Data\r\n");
+    pc.printf("Please Input 'D' (large D) to Start : ");
+    while(1){
+        if(pc.getc() == 'D'){
+            pc.printf("START\r\n\n");
+            break;
+        }
+    }
+    
+    //フォーマットファイルの探索
+    printf("Searching file [format.txt] in SD...\r\n");
+    file_format = fopen("/sd/format.txt", "r");
+    if(file_format == NULL){
+        pc.printf("[format.txt] not found.\r\n");
+        pc.printf("Please Add file [format.txt] in SD\r\n");
+        while(1);
+    }
+    else{
+        pc.printf("[format.txt] OK!!\r\n");
+    }
+    
+    
+    //フォーマットファイルの読み取り
+    char data_line[16], data_format[16];
+    int format_length[128], format_length_n = 0;
+    
+    pc.printf("Read [format.txt].\r\n");
+    while(fgets(data_line, 16, file_format) != NULL){
+        sscanf(data_line, "%s", data_format);
+        if(strcmp(data_format, "int") == 0){
+            format_length[format_length_n++] = DATA_INT;
+            pc.printf("%d : int\r\n", format_length_n - 1);
+        }
+        else if(strcmp(data_format, "float") == 0){
+            format_length[format_length_n++] = DATA_FLOAT;
+            pc.printf("%d : float\r\n", format_length_n - 1);
+        }
+        else if(strcmp(data_format, "double") == 0){
+            format_length[format_length_n++] = DATA_DOUBLE;
+            pc.printf("%d : double\r\n", format_length_n - 1);
+        }
+        else if(strcmp(data_format, "bool") == 0){
+            format_length[format_length_n++] = DATA_BOOL;
+            pc.printf("%d : bool\r\n", format_length_n - 1);
+        }
+        else if(strcmp(data_format, "short") == 0){
+            format_length[format_length_n++] = DATA_SHORT;
+            pc.printf("%d : short\r\n", format_length_n - 1);
+        }
+        else if(strcmp(data_format, "longlong") == 0){
+            format_length[format_length_n++] = DATA_LONGLONG;
+            pc.printf("%d : long long\r\n", format_length_n - 1);
+        }
+        else{
+            pc.printf("ERROR : format error!!!!!\r\n");
+        }
+    }
+    
+    fclose(file_format);
+    pc.printf("OK!!\r\n");
+    
+    
+    //EEPROMの中身をSDに移植
+    char ADDR_H, ADDR_L;
+    int num, block;
+    char data_eeprom[128];
+    
+    ADDR_H = ADDR_L = 0x00;
+    num = 1;
+    block = 0;
+    
+    file_bin = fopen("/sd/EEPROM_data.bin", "wb");
+    
+    pc.printf("Data Copy [EEPROM -> SD].");
+    
+    for(int i = 0; i < 4096; i ++){
+        switch(i){
+            case 512:
+            num = 1;
+            block = 1;
+            break;
+            
+            case 1024:
+            num = 2;
+            block = 0;
+            break;
+            
+            case 1536:
+            num = 2;
+            block = 1;
+            break;
+            
+            case 2048:
+            num = 3;
+            block = 0;
+            break;
+            
+            case 2560:
+            num = 3;
+            block = 1;
+            break;
+            
+            case 3072:
+            num = 4;
+            block = 0;
+            break;
+            
+            case 3584:
+            num = 4;
+            block = 1;
+            break;
+        }
+        
+        EEPROM.readMultiByte(num, block, ADDR_H, ADDR_L, data_eeprom, 128);
+        //pc.printf("%d %01d %02x %02x\r\n", num, block, ADDR_H, ADDR_L);
+        pc.printf(".");
+        fwrite(data_eeprom, sizeof(char), 128, file_bin);
+        
+        if(ADDR_L == 0x00){
+            ADDR_L = 0x80;
+        }
+        else{
+            ADDR_L = 0x00;
+            ADDR_H ++;
+        }
+    }
+    
+    fclose(file_bin);
+    pc.printf("OK!!\r\n");
+    
+    
+    //バイナリファイルのオープン(読み取り用に)
+    pc.printf("Binary File Open : ");
+    file_bin = fopen("/sd/EEPROM_data.bin", "rb");
+    if(file_bin == NULL){
+        pc.printf("NG...\r\n");
+        pc.printf("Please Check Connection and Settings\r\n");
+        while(1);
+    }
+    else{
+        pc.printf("OK!!\r\n");
+    }
+    
+    
+    //書き込むファイルのオープン
+    pc.printf("Text File Open : ");
+    file_out = fopen("/sd/EEPROM_encode_data.txt", "w");
+    if(file_out == NULL){
+        pc.printf("NG...\r\n");
+        pc.printf("Please Check Connection and Settings\r\n");
+        while(1);
+    }
+    else{
+        pc.printf("OK!!\r\n");
+    }
+    
+    
+    //データ取得&テキストデータとして書き込み
+    int data_int;
+    float data_float;
+    double data_double;
+    bool data_bool;
+    char data_char;
+    short data_short;
+    long long data_longlong;
+    
+    int data_count, data_size, data_print = 0;
+    
+    pc.printf("Data Encoding [Binary -> Text].");
+    
+    while(1){
+        for(data_count = 0; data_count < format_length_n; data_count ++){
+            switch(format_length[data_count]){
+                case DATA_INT:
+                data_size = fread(&data_int, sizeof(int), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%d\t", data_int);
+                }
+                break;
+                
+                case DATA_FLOAT:
+                data_size = fread(&data_float, sizeof(float), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%f\t", data_float);
+                }
+                break;
+                
+                case DATA_DOUBLE:
+                data_size = fread(&data_double, sizeof(double), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%lf\t", data_double);
+                }
+                break;
+                
+                case DATA_BOOL:
+                data_size = fread(&data_bool, sizeof(bool), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%d\t", data_bool);
+                }
+                break;
+                
+                case DATA_CHAR:
+                data_size = fread(&data_char, sizeof(char), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%c\t", data_char);
+                }
+                break;
+                
+                case DATA_SHORT:
+                data_size = fread(&data_short, sizeof(short), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%hd\t", data_short);
+                }
+                break;
+                
+                case DATA_LONGLONG:
+                data_size = fread(&data_longlong, sizeof(long long), 1, file_bin);
+                if(data_size != 0){
+                    fprintf(file_out, "%lld\t", data_longlong);
+                }
+                break;
+            }
+        }
+        
+        if(data_print ++ == 1000){
+            pc.printf(".");
+            data_print = 0;
+        }
+        
+        fprintf(file_out, "\r\n");
+        if(data_size == 0){
+            break;
+        }
+    }
+    
+    pc.printf("Complete!!\r\n");
+    
+    
+    //終了
+    fclose(file_bin);
+    fclose(file_out);
+    
+    pc.printf("Program Finish!!\r\n");
+    
+    while(1) {
+    }
+}
diff -r 000000000000 -r 16243fbc2c6e mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Feb 12 15:55:25 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/3a7713b1edbc
\ No newline at end of file