test µSD
Dependencies: SD_DISCO_F469NI BSP_DISCO_F469NI BD_SD_DISCO_F469NI USBHOST
main.cpp@6:f3337d7c598a, 2019-02-20 (annotated)
- Committer:
- bouaziz
- Date:
- Wed Feb 20 09:31:24 2019 +0000
- Revision:
- 6:f3337d7c598a
- Parent:
- 5:5c29a3f6600b
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 4:0f7797c2d3fe | 1 | /* |
kenjiArai | 4:0f7797c2d3fe | 2 | * Mbed Application program |
kenjiArai | 4:0f7797c2d3fe | 3 | * SD Card file control function with FatFs on Mbed-os5 |
roykrikke | 3:7f991a3d4e71 | 4 | * |
kenjiArai | 4:0f7797c2d3fe | 5 | * Copyright (c) 2018 Kenji Arai / JH1PJL |
kenjiArai | 4:0f7797c2d3fe | 6 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 4:0f7797c2d3fe | 7 | * https://os.mbed.com/users/kenjiArai/ |
kenjiArai | 4:0f7797c2d3fe | 8 | * Created: April 7th, 2018 |
kenjiArai | 5:5c29a3f6600b | 9 | * Revised: April 30th, 2018 |
roykrikke | 1:ffacc9d0b308 | 10 | */ |
roykrikke | 1:ffacc9d0b308 | 11 | |
kenjiArai | 4:0f7797c2d3fe | 12 | // Include -------------------------------------------------------------------- |
kenjiArai | 4:0f7797c2d3fe | 13 | #include "mbed.h" |
bouaziz | 6:f3337d7c598a | 14 | //#include "USBHostMSD.h" |
kenjiArai | 4:0f7797c2d3fe | 15 | #include "FATFileSystem.h" |
kenjiArai | 5:5c29a3f6600b | 16 | #include "SDBlockDeviceDISCOF469NI.h" |
bouaziz | 6:f3337d7c598a | 17 | //#include "mon.h" |
kenjiArai | 4:0f7797c2d3fe | 18 | #include <stdlib.h> |
kenjiArai | 4:0f7797c2d3fe | 19 | #include <stdio.h> |
kenjiArai | 4:0f7797c2d3fe | 20 | #include <errno.h> |
roykrikke | 0:4cdf28a602a8 | 21 | |
kenjiArai | 4:0f7797c2d3fe | 22 | // Definition ----------------------------------------------------------------- |
kenjiArai | 4:0f7797c2d3fe | 23 | #define USER_SW_ON 1 |
roykrikke | 0:4cdf28a602a8 | 24 | |
kenjiArai | 4:0f7797c2d3fe | 25 | // Constructor ---------------------------------------------------------------- |
kenjiArai | 4:0f7797c2d3fe | 26 | DigitalOut led(LED1); |
bouaziz | 6:f3337d7c598a | 27 | DigitalOut led_orange(LED2); |
bouaziz | 6:f3337d7c598a | 28 | DigitalOut led_red(LED3); |
bouaziz | 6:f3337d7c598a | 29 | DigitalOut led_blue(LED4); |
kenjiArai | 4:0f7797c2d3fe | 30 | DigitalIn user_sw(USER_BUTTON); |
bouaziz | 6:f3337d7c598a | 31 | Serial uart(USBTX, USBRX); |
kenjiArai | 5:5c29a3f6600b | 32 | // Instantiate the Block Device for sd card on DISCO-F469NI |
kenjiArai | 5:5c29a3f6600b | 33 | SDBlockDeviceDISCOF469NI bd; |
bouaziz | 6:f3337d7c598a | 34 | //USBHostMSD msd; |
kenjiArai | 4:0f7797c2d3fe | 35 | FATFileSystem fs("fs"); |
bouaziz | 6:f3337d7c598a | 36 | Timer tic; |
roykrikke | 2:993735af824b | 37 | |
kenjiArai | 4:0f7797c2d3fe | 38 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 4:0f7797c2d3fe | 39 | |
kenjiArai | 4:0f7797c2d3fe | 40 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 4:0f7797c2d3fe | 41 | char *const opening_msg0 = "microSD Card test program"; |
kenjiArai | 4:0f7797c2d3fe | 42 | char *const opening_msg1 = " -> run on Mbed OS-5\r\n"; |
roykrikke | 2:993735af824b | 43 | |
kenjiArai | 4:0f7797c2d3fe | 44 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 4:0f7797c2d3fe | 45 | void return_error (int ret_val); |
kenjiArai | 4:0f7797c2d3fe | 46 | void errno_error (void* ret_val); |
roykrikke | 0:4cdf28a602a8 | 47 | |
kenjiArai | 4:0f7797c2d3fe | 48 | //------------------------------------------------------------------------------ |
kenjiArai | 4:0f7797c2d3fe | 49 | // Control Program |
kenjiArai | 4:0f7797c2d3fe | 50 | //------------------------------------------------------------------------------ |
bouaziz | 6:f3337d7c598a | 51 | /*int main() |
roykrikke | 3:7f991a3d4e71 | 52 | { |
kenjiArai | 4:0f7797c2d3fe | 53 | time_t seconds; |
kenjiArai | 4:0f7797c2d3fe | 54 | uint32_t data0 = 10000U; |
roykrikke | 0:4cdf28a602a8 | 55 | |
kenjiArai | 4:0f7797c2d3fe | 56 | if (user_sw == USER_SW_ON) { |
bouaziz | 6:f3337d7c598a | 57 | // mon(); |
bouaziz | 6:f3337d7c598a | 58 | uart.printf("Start BUTTON ON\r\n"); |
bouaziz | 6:f3337d7c598a | 59 | |
kenjiArai | 4:0f7797c2d3fe | 60 | } |
kenjiArai | 4:0f7797c2d3fe | 61 | //pc.printf("line:%d\r\n", __LINE__); |
bouaziz | 6:f3337d7c598a | 62 | uart.printf("\r\nStart\r\n"); |
roykrikke | 3:7f991a3d4e71 | 63 | int error = 0; |
roykrikke | 3:7f991a3d4e71 | 64 | error = fs.mount(&bd); |
roykrikke | 3:7f991a3d4e71 | 65 | return_error(error); |
bouaziz | 6:f3337d7c598a | 66 | /* |
bouaziz | 6:f3337d7c598a | 67 | FILE* fp = fopen("/fs/test.txt", "w"); |
kenjiArai | 4:0f7797c2d3fe | 68 | errno_error(fp); |
kenjiArai | 4:0f7797c2d3fe | 69 | if (fp != 0) { |
bouaziz | 6:f3337d7c598a | 70 | pc.printf("OPEN : %s%s", opening_msg0, opening_msg1); |
bouaziz | 6:f3337d7c598a | 71 | fprintf(fp,"OPEN : %s%s", opening_msg0, opening_msg1); |
kenjiArai | 4:0f7797c2d3fe | 72 | } else { |
kenjiArai | 4:0f7797c2d3fe | 73 | pc.printf("ERROR\r\n"); |
roykrikke | 3:7f991a3d4e71 | 74 | } |
kenjiArai | 4:0f7797c2d3fe | 75 | fclose(fp); |
bouaziz | 6:f3337d7c598a | 76 | */ |
bouaziz | 6:f3337d7c598a | 77 | |
bouaziz | 6:f3337d7c598a | 78 | // uint32_t size = get_disk_freespace(); |
bouaziz | 6:f3337d7c598a | 79 | // seconds = time(NULL); |
bouaziz | 6:f3337d7c598a | 80 | // strftime(tmp, 64, "DATE %H:%M:%S,%Y/%m/%d,", localtime(&seconds)); |
bouaziz | 6:f3337d7c598a | 81 | /* while(true) { |
kenjiArai | 4:0f7797c2d3fe | 82 | mon(); |
kenjiArai | 4:0f7797c2d3fe | 83 | NVIC_SystemReset(); |
bouaziz | 6:f3337d7c598a | 84 | }*/ |
bouaziz | 6:f3337d7c598a | 85 | /* pc.printf("terminé\r\n"); |
bouaziz | 6:f3337d7c598a | 86 | while(1); |
bouaziz | 6:f3337d7c598a | 87 | }*/ |
kenjiArai | 4:0f7797c2d3fe | 88 | |
kenjiArai | 4:0f7797c2d3fe | 89 | void return_error (int ret_val) |
kenjiArai | 4:0f7797c2d3fe | 90 | { |
kenjiArai | 4:0f7797c2d3fe | 91 | if (ret_val) { |
bouaziz | 6:f3337d7c598a | 92 | uart.printf("retrun error/Failure. %d\r\n", ret_val); |
kenjiArai | 4:0f7797c2d3fe | 93 | } |
kenjiArai | 4:0f7797c2d3fe | 94 | } |
kenjiArai | 4:0f7797c2d3fe | 95 | |
kenjiArai | 4:0f7797c2d3fe | 96 | void errno_error (void* ret_val) |
kenjiArai | 4:0f7797c2d3fe | 97 | { |
kenjiArai | 4:0f7797c2d3fe | 98 | if (ret_val == NULL) { |
bouaziz | 6:f3337d7c598a | 99 | uart.printf("error #/Failure. %d \r\n", errno); |
kenjiArai | 4:0f7797c2d3fe | 100 | } |
kenjiArai | 4:0f7797c2d3fe | 101 | } |
bouaziz | 6:f3337d7c598a | 102 | |
bouaziz | 6:f3337d7c598a | 103 | |
bouaziz | 6:f3337d7c598a | 104 | unsigned int count=0,val1,val2; |
bouaziz | 6:f3337d7c598a | 105 | char tmess[]="/fs/test1.txt"; |
bouaziz | 6:f3337d7c598a | 106 | unsigned int index; |
bouaziz | 6:f3337d7c598a | 107 | #define TAILLEMAX (4096*4) |
bouaziz | 6:f3337d7c598a | 108 | #define ITER 50000 |
bouaziz | 6:f3337d7c598a | 109 | unsigned flag; |
bouaziz | 6:f3337d7c598a | 110 | unsigned char tabf[TAILLEMAX+1]; |
bouaziz | 6:f3337d7c598a | 111 | |
bouaziz | 6:f3337d7c598a | 112 | unsigned int tstat[20000]; |
bouaziz | 6:f3337d7c598a | 113 | unsigned int cal1,cal2; |
bouaziz | 6:f3337d7c598a | 114 | double ff; |
bouaziz | 6:f3337d7c598a | 115 | unsigned long vdebut,vfin; |
bouaziz | 6:f3337d7c598a | 116 | int main(){ |
bouaziz | 6:f3337d7c598a | 117 | unsigned int max=0,min=200000000; |
bouaziz | 6:f3337d7c598a | 118 | int retour; |
bouaziz | 6:f3337d7c598a | 119 | led=1; |
bouaziz | 6:f3337d7c598a | 120 | led_orange=1; |
bouaziz | 6:f3337d7c598a | 121 | led_red=1; |
bouaziz | 6:f3337d7c598a | 122 | led_blue=1; |
bouaziz | 6:f3337d7c598a | 123 | int error = 0; |
bouaziz | 6:f3337d7c598a | 124 | //led4=1; |
bouaziz | 6:f3337d7c598a | 125 | uart.printf("TEST\r\n"); |
bouaziz | 6:f3337d7c598a | 126 | led_red=0; |
bouaziz | 6:f3337d7c598a | 127 | wait(0.1); |
bouaziz | 6:f3337d7c598a | 128 | /* while(!msd.connect()) { |
bouaziz | 6:f3337d7c598a | 129 | wait(0.500); |
bouaziz | 6:f3337d7c598a | 130 | }*/ |
bouaziz | 6:f3337d7c598a | 131 | led_red=1; |
bouaziz | 6:f3337d7c598a | 132 | error = fs.mount(&bd);//bd); |
bouaziz | 6:f3337d7c598a | 133 | return_error(error); |
bouaziz | 6:f3337d7c598a | 134 | wait(0.1); |
bouaziz | 6:f3337d7c598a | 135 | FILE *fp = fopen(tmess, "w"); |
bouaziz | 6:f3337d7c598a | 136 | errno_error(fp); |
bouaziz | 6:f3337d7c598a | 137 | if(fp==0){ |
bouaziz | 6:f3337d7c598a | 138 | // led1=1; |
bouaziz | 6:f3337d7c598a | 139 | // led2=1; |
bouaziz | 6:f3337d7c598a | 140 | // led4=0; |
bouaziz | 6:f3337d7c598a | 141 | uart.printf("erreur ouverture fichier\r\n"); |
bouaziz | 6:f3337d7c598a | 142 | while(1); |
bouaziz | 6:f3337d7c598a | 143 | } |
bouaziz | 6:f3337d7c598a | 144 | uart.printf("DEBUT TEST\r\n"); |
bouaziz | 6:f3337d7c598a | 145 | tic.reset(); |
bouaziz | 6:f3337d7c598a | 146 | tic.start(); |
bouaziz | 6:f3337d7c598a | 147 | // tc1.attach(&per,0.001); |
bouaziz | 6:f3337d7c598a | 148 | vdebut=tic.read_us(); |
bouaziz | 6:f3337d7c598a | 149 | while(count<ITER){ |
bouaziz | 6:f3337d7c598a | 150 | // if(flag>0){ |
bouaziz | 6:f3337d7c598a | 151 | led=0; |
bouaziz | 6:f3337d7c598a | 152 | // flag--; |
bouaziz | 6:f3337d7c598a | 153 | val1= tic.read_us(); |
bouaziz | 6:f3337d7c598a | 154 | *((unsigned int*)tabf)=val1; |
bouaziz | 6:f3337d7c598a | 155 | *((unsigned int*)(tabf+12))=0; |
bouaziz | 6:f3337d7c598a | 156 | fwrite(tabf,1,TAILLEMAX,fp); |
bouaziz | 6:f3337d7c598a | 157 | *((unsigned int*)(tabf+16))=0; |
bouaziz | 6:f3337d7c598a | 158 | val2=tic.read_us(); |
bouaziz | 6:f3337d7c598a | 159 | cal1=val2-val1; |
bouaziz | 6:f3337d7c598a | 160 | *((unsigned int*)(tabf+4))=val2; |
bouaziz | 6:f3337d7c598a | 161 | *((unsigned int*)(tabf+8))=cal1; |
bouaziz | 6:f3337d7c598a | 162 | //uart.printf("max = %u min=%u flag=%u\n",max,min,flag); |
bouaziz | 6:f3337d7c598a | 163 | if(cal1>max){ |
bouaziz | 6:f3337d7c598a | 164 | max=cal1; |
bouaziz | 6:f3337d7c598a | 165 | } |
bouaziz | 6:f3337d7c598a | 166 | if(cal1<min){ |
bouaziz | 6:f3337d7c598a | 167 | min=cal1; |
bouaziz | 6:f3337d7c598a | 168 | } |
bouaziz | 6:f3337d7c598a | 169 | cal1 = (cal1+50)/100; |
bouaziz | 6:f3337d7c598a | 170 | if(cal1>19999) cal1=19999; |
bouaziz | 6:f3337d7c598a | 171 | tstat[cal1]=tstat[cal1]+1; |
bouaziz | 6:f3337d7c598a | 172 | count++; |
bouaziz | 6:f3337d7c598a | 173 | led=1; |
bouaziz | 6:f3337d7c598a | 174 | wait(0.003); |
bouaziz | 6:f3337d7c598a | 175 | //led3=0; |
bouaziz | 6:f3337d7c598a | 176 | //} |
bouaziz | 6:f3337d7c598a | 177 | } |
bouaziz | 6:f3337d7c598a | 178 | vfin=tic.read_us(); |
bouaziz | 6:f3337d7c598a | 179 | fclose(fp); |
bouaziz | 6:f3337d7c598a | 180 | fp=fopen("/fs/fin.txt","w"); |
bouaziz | 6:f3337d7c598a | 181 | if(fp==0){ |
bouaziz | 6:f3337d7c598a | 182 | // led1=1; |
bouaziz | 6:f3337d7c598a | 183 | // led2=1; |
bouaziz | 6:f3337d7c598a | 184 | // led4=0; |
bouaziz | 6:f3337d7c598a | 185 | uart.printf("erreur ouverture fichier STAT\r\n"); |
bouaziz | 6:f3337d7c598a | 186 | while(1); |
bouaziz | 6:f3337d7c598a | 187 | } |
bouaziz | 6:f3337d7c598a | 188 | for(cal2=0;cal2<20000;cal2++){ |
bouaziz | 6:f3337d7c598a | 189 | if(tstat[cal2]!=0){ |
bouaziz | 6:f3337d7c598a | 190 | ff=ff+ (cal2/10.)*(tstat[cal2]/(double)ITER); |
bouaziz | 6:f3337d7c598a | 191 | fprintf(fp,"%u\t%u\r\n",cal2,tstat[cal2]); |
bouaziz | 6:f3337d7c598a | 192 | } |
bouaziz | 6:f3337d7c598a | 193 | } |
bouaziz | 6:f3337d7c598a | 194 | |
bouaziz | 6:f3337d7c598a | 195 | |
bouaziz | 6:f3337d7c598a | 196 | fprintf(fp,"max = %u min=%u moyenne=%u tempstotal(ms)=%u\r\n",max,min,(unsigned)(ff*1000),(vfin-vdebut)/1000); |
bouaziz | 6:f3337d7c598a | 197 | fclose(fp); |
bouaziz | 6:f3337d7c598a | 198 | // led4=1; |
bouaziz | 6:f3337d7c598a | 199 | uart.printf("max = %u min=%u moyenne=%u tempsmanip(H)=%f\r\n",max,min,(unsigned)(ff*1000),(((vfin-vdebut)/1000000.)+1)/3600.); |
bouaziz | 6:f3337d7c598a | 200 | while(1); |
bouaziz | 6:f3337d7c598a | 201 | } |