]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_fatfs/main.cpp
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / tests / mbed / sd_perf_fatfs / main.cpp
1 #include "mbed.h"
2 #include "SDFileSystem.h"
3 #include "test_env.h"
4 #include <algorithm>
5 #include <stdlib.h>
6
7 #if defined(TARGET_KL25Z)
8 SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd");
9
10 #elif defined(TARGET_KL46Z)
11 SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd");
12
13 #elif defined(TARGET_K64F)
14 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
15
16 #elif defined(TARGET_K22F)
17 SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd");
18
19 #elif defined(TARGET_K20D50M)
20 SDFileSystem sd(PTD2, PTD3, PTD1, PTC2, "sd");
21
22 #elif defined(TARGET_nRF51822)
23 SDFileSystem sd(p12, p13, p15, p14, "sd");
24
25 #elif defined(TARGET_NUCLEO_F030R8) || \
26       defined(TARGET_NUCLEO_F070RB) || \
27       defined(TARGET_NUCLEO_F072RB) || \
28       defined(TARGET_NUCLEO_F091RC) || \
29       defined(TARGET_NUCLEO_F103RB) || \
30       defined(TARGET_NUCLEO_F302R8) || \
31       defined(TARGET_NUCLEO_F303RE) || \
32       defined(TARGET_NUCLEO_F334R8) || \
33       defined(TARGET_NUCLEO_F401RE) || \
34       defined(TARGET_NUCLEO_F411RE) || \
35       defined(TARGET_NUCLEO_L053R8) || \
36       defined(TARGET_NUCLEO_L073RZ) || \
37       defined(TARGET_NUCLEO_L152RE)
38 SDFileSystem sd(D11, D12, D13, D10, "sd");
39
40 #elif defined(TARGET_DISCO_F051R8)
41 SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
42
43 #elif defined(TARGET_LPC2368)
44 SDFileSystem sd(p11, p12, p13, p14, "sd");
45
46 #elif defined(TARGET_LPC11U68)
47 SDFileSystem sd(D11, D12, D13, D10, "sd");
48
49 #elif defined(TARGET_LPC1549)
50 SDFileSystem sd(D11, D12, D13, D10, "sd");
51
52 #elif defined(TARGET_LPC11U37H_401)
53 SDFileSystem sd(SDMOSI, SDMISO, SDSCLK, SDSSEL, "sd");
54
55 #else
56 SDFileSystem sd(p11, p12, p13, p14, "sd");
57 #endif
58
59 namespace {
60 char buffer[1024];
61 const int KIB_RW = 128;
62 Timer timer;
63 const char *bin_filename = "0:testfile.bin";
64 }
65
66 bool test_sf_file_write_fatfs(const char *filename, const int kib_rw) {
67     FIL file;
68     bool result = true;
69     FRESULT res = f_open(&file, filename, FA_WRITE | FA_CREATE_ALWAYS);
70     if (res == FR_OK) {
71         int byte_write = 0;
72         unsigned int bytes = 0;
73         timer.start();
74         for (int i = 0; i < kib_rw; i++) {
75             if (f_write(&file, buffer, sizeof(buffer), &bytes) != FR_OK) {
76                 result = false;
77                 f_close(&file);
78                 printf("Write error!\r\n");
79                 break;
80             } else {
81                 byte_write++;
82             }
83         }
84         timer.stop();
85         f_close(&file);
86         double test_time_sec = timer.read_us() / 1000000.0;
87         double speed = kib_rw / test_time_sec;
88         printf("%d KiB write in %.3f sec with speed of %.4f KiB/s\r\n", byte_write, test_time_sec, speed);
89         notify_performance_coefficient("write_kibps", speed);
90     } else {
91         printf("File '%s' not opened\r\n", filename);
92         result = false;
93     }
94     timer.reset();
95     return result;
96 }
97
98 bool test_sf_file_read_fatfs(const char *filename, const int kib_rw) {
99     FIL file;
100     bool result = true;
101     FRESULT res = f_open(&file, filename, FA_READ | FA_OPEN_EXISTING);
102     if (res == FR_OK) {
103         timer.start();
104         int byte_read = 0;
105         unsigned int bytes = 0;
106         do {
107             res = f_read(&file, buffer, sizeof(buffer), &bytes);
108             byte_read++;
109         } while (res == FR_OK && bytes == sizeof(buffer));
110         timer.stop();
111         f_close(&file);
112         double test_time_sec = timer.read_us() / 1000000.0;
113         double speed = kib_rw / test_time_sec;
114         printf("%d KiB read in %.3f sec with speed of %.4f KiB/s\r\n", byte_read, test_time_sec, speed);
115         notify_performance_coefficient("fs_read_kibps", speed);
116     } else {
117         printf("File '%s' not opened\r\n", filename);
118         result = false;
119     }
120     timer.reset();
121     return result;
122 }
123
124 char RandomChar() {
125     return rand() % 100;
126 }
127
128 int main() {
129     MBED_HOSTTEST_TIMEOUT(15);
130     MBED_HOSTTEST_SELECT(default_auto);
131     MBED_HOSTTEST_DESCRIPTION(SD FatFS RW Speed);
132     MBED_HOSTTEST_START("PERF_3");
133
134     // Test header
135     printf("\r\n");
136     printf("SD Card FatFS Performance Test\r\n");
137     printf("File name: %s\r\n", bin_filename);
138     printf("Buffer size: %d KiB\r\n", (KIB_RW * sizeof(buffer)) / 1024);
139
140     // Initialize buffer
141     srand(testenv_randseed());
142     char *buffer_end = buffer + sizeof(buffer);
143     std::generate (buffer, buffer_end, RandomChar);
144
145     bool result = true;
146     for (;;) {
147         printf("Write test...\r\n");
148         if (test_sf_file_write_fatfs(bin_filename, KIB_RW) == false) {
149             result = false;
150             break;
151         }
152
153         printf("Read test...\r\n");
154         if (test_sf_file_read_fatfs(bin_filename, KIB_RW) == false) {
155             result = false;
156             break;
157         }
158         break;
159     }
160     MBED_HOSTTEST_RESULT(result);
161 }