test µSD

Dependencies:   SD_DISCO_F469NI BSP_DISCO_F469NI BD_SD_DISCO_F469NI USBHOST

Committer:
bouaziz
Date:
Wed Feb 20 09:31:24 2019 +0000
Revision:
6:f3337d7c598a
Parent:
5:5c29a3f6600b
test

Who changed what in which revision?

UserRevisionLine numberNew 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 }