closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

SD Card auslesen



TheBeginner offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 63
Posts: 486
Registered: 06 / 2013
Private message
Subject: SD Card auslesen  -  Posted: 30.05.2020 - 17:26   -  
ich versuche gerade eine SD Card auszulesen.

und bekomme das zurück
11555660
21554016
36

Das sind die Daten meiner Card
64kb belegt
14,8GB frei
14,8GB Speichergröße

Muss ich da noch etwas berechnen ?


Code

SizeMB  : longword;

Procedure get_MMC_size;
var count : byte;
Begin
  if F16_CheckDisk then                             // we check for an existing FAT16 system
    SizeMB:= F16_GetDiskSize;
    str20:= longToStr(SizeMB);
    count:= length(str20);
    TxBlock(@str20, word(count));
    
    SizeMB:= F16_GetDiskFree;
    str20:= longToStr(SizeMB);
    count:= length(str20);
    TxBlock(@str20, word(count));

    SizeMB:= F16_GetDiskUsed;
    str20:= longToStr(SizeMB);
    count:= length(str20);
    TxBlock(@str20, word(count));
  else
    TXchar('?');
  endif;
end;
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1656
Registered: 03 / 2003
Private message
Subject: Re: SD Card auslesen  -  Posted: 31.05.2020 - 08:12   -  
Hi Frank,

ich verwende nur GetDiskFree und das funktioniert problemlos:
Code

SDFree:=F16_GetDiskFree;
gDrawString(21,-2,1,1,TxtRot0,LongToStr(SDFree div 1024:5:'0')+'MB');


Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
TheBeginner offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 63
Posts: 486
Registered: 06 / 2013
Private message
Subject: Re: SD Card auslesen  -  Posted: 31.05.2020 - 10:15   -  
Danke Harry
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1656
Registered: 03 / 2003
Private message
Subject: Re: SD Card auslesen  -  Posted: 31.05.2020 - 11:15   -  
Hi Frank,

geht es jetzt? Woran lag es?

Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
TheBeginner offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 63
Posts: 486
Registered: 06 / 2013
Private message
Subject: Re: SD Card auslesen  -  Posted: 31.05.2020 - 17:16   -  
Hallo Harry, ne ne es geht noch nicht, in mein Code habe ich ja F16_GetDiskFree;
drin und bekomme diesen Wert zurück 21554016

21554016 div 1024 =
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1656
Registered: 03 / 2003
Private message
Subject: Re: SD Card auslesen  -  Posted: 31.05.2020 - 17:58   -  
Und wie ist die Karte formatiert? FAT16 oder FAT32?

Wenn ich mich nicht irre sind das dann 20.55 GByte in FAT32 oder 20.55 MByte in FAT16.

Quote
Function F16_GetDiskFree : LongWord; Gibt den noch freien Speicherplatz in Bytes des aktuellen Mediums zurück. Beim FAT32 Treiber in kBytes. Diese Funktion erzeugt einen grossen Disk Verkehr braucht deshalb relativ viel Zeit.
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 2-times. Last edit: 31.05.2020 - 18:04 by Harry.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 49
Posts: 1108
Registered: 02 / 2009
Homepage Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 09:40   -  
Hallo Frank,

ich tippe auf eine Falsche Formatierung!
Hast Du das
1. F16_DiskInit
2. F16_DiskReset
3. F16_CheckDisk

vorher gemacht? Ich habe nur das F16_CheckDisk gesehen.
Hier mal ein Codeausschnitt aus meinem Process, dieser macht beim ersten Start den kompletten Check und alle 12h. Vielleicht hilft da was am Denkansatz.

Code
//-------------------------------------------------------------- 
// Display Process  Fuss und LOGs speichern; 
//-------------------------------------------------------------- 
process LCD_DisplBott(180, 384 : iData; 5);  {Stacksize = 256 bytes, Framesize = 512 bytes, 5 Systicks} 
begin
// FirstStart InitSD hier im Status-Process, damit die anderen Tasks der Steuerung nicht verzögert werden. 
// 
  
  if not bSDFirstStart then 
    bSDFirstStart:= true; // erster Start und alle 12h 1x
    
    sdAktive();// Timer für SD Anzeige LCD setzen 
    bMMCok:= F16_DiskInit;// always the very fist step 
    if not bMMCok then 
    DebugOut('SD init fail!'); 
    endif; 
    
    WDTrig;// WD Triggern wenn eingeschaltet 
    
    if bMMCok then 
      sdAktive();// Timer für SD Anzeige LCD setzen 
      bMMCok:= F16_DiskReset;                         // SD Disk Reset 
      if not bMMCok then  
       DebugOut('SD Reset fail!'); 
      endif; 
    endif; 
    
    WDTrig;// WD TRriggern wenn eingeschaltet 
    
    if bMMCok then 
      sdAktive();// Timer für SD Anzeige LCD setzen 
      if F16_CheckDisk then                         // ist ein gültiges FAT16 vorhanden, 
        SizeMBsd:= F16_GetDiskSize;                 // dann die Daten holen 
        SizeMBsdFree:= F16_GetDiskFree; 
        SizeMBsdUsed:= F16_GetDiskUsed; 
        
        WDTrig;// WD TRriggern wenn eingeschaltet 
        if not bMMCok then 
         DebugOut('SD CheckDisk fail!'); 
        endif; 
        
        WDTrig;// WD TRriggern wenn eingeschaltet 
        
      // Prüfe ob BOOT.CFG vorhanden und identisch ist 
        if CheckBootCfg then 
          DebugOut('CheckBoot  SD<>EEPR'); 
          BCfgUnterschied:= true; 
        else 
          BCfgUnterschied:= false; 
          BCfgFrage:= false; 
        endif; 
        
      endif; 
    endif; 
    
  endif;// bSDFirstStart 
  
//------------------------------ 
  
  WDTrig;// WD TRriggern wenn eingeschaltet 
  DispBottom; // Statuszeile mit Uhr, Zustand usw. 
  Save_LogPipe;     // Prüfen ob Meldungen in der Pipe liegen, dann auf SD ablegen 
  
  Schedule;       // Rechenzeit nach 1. Durchlauf sofort freigeben 
  
end LCD_DisplBott; 


Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
TheBeginner offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 63
Posts: 486
Registered: 06 / 2013
Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 10:23   -  
Guten Morgen Thorsten,

ich habe sie gerade mit dem Computer neu Formatiert Fat32,
habe genauso alles gemacht wie du

1. F16_DiskInit
2. F16_DiskReset
3. F16_CheckDisk


SizeMBsd:= F16_GetDiskSize;
SizeMBsdFree:= F16_GetDiskFree;
SizeMBsdUsed:= F16_GetDiskUsed;


und bekomme das zurück
11555660
21554016
36

Das sind die Daten meiner Card
64kb belegt
14,8GB frei
14,8GB Speichergröße


Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
This post has been edited 1-times. Last edit: 01.06.2020 - 10:24 by TheBeginner.
go down go up
TheBeginner offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 63
Posts: 486
Registered: 06 / 2013
Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 11:21   -  
Ich mache mal kein neues Topic auf und schreibe hier.
Ich möchte eine file of text auslesen und habe das Programmiert.

Code


Procedure MMC_Datei_Read;
var len : byte;
Begin
  SendStr:= '';
  if F16_CheckDisk = true then
   F16_FileSeek (f,0);
   while not F16_EndOfFile(f) do
        Readln(f, SendStr);
        TxBlock(@SendStr, word(len));
    endwhile;
  endif;

in der file steht zum testen
123456789012345678901234567890

Wenn ich mir jetzt den RxBuff unter Delphi anschaue
RxBuff[0] hier steht lo byte von count
RxBuff[1] hier steht hi byte von count
RxBuff[2] und ab hier sollte das erste Byte oder Zeichen stehen also eine 1
aber hier steht die länge des strings drin.
RxBuff[3] und hier steht dann die 1
RxBuff[4] = 2
u.s.w.

Warum wird denn mit TxBlock(@SendStr, word(len)); auch SendStr[0] kopiert ?

Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 55
Posts: 1656
Registered: 03 / 2003
Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 17:09   -  
Hi Frank,

was ist denn, wenn du die serielle mal über ein Terminalprogramm abhörst? Was kommt da an? Ich hab (leider?) kein Delphi, aber vielleicht wird damit automatisch auch die Länge einer Übertragung zur Verfügung gestellt?

Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 49
Posts: 1108
Registered: 02 / 2009
Homepage Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 17:21   -  
Hallo Frank,

wenn Du einen String verarbeitest, dann ist es ein String. Dieser hat im AVRCO immer die Längenangabe unter [0], Du sagst dem Compiler ja sogar, das er diesen mitkopieren soll:

Code
TxBlock(@SendStr, word(len));


Der Pointer auf dem String liegt immer ab Adresse "[0]", wenn Du das nicht möchtest, musst Du es wie folgt anpassen:

Code
TxBlock(@SendStr+1, word(len));


Dann ist die Längenausgabe nicht dabei.

Du kannst aber auch im Delphi einfach diese "Alten", PascalString verwenden und verarbeiten. Diese nennen sich (ab Delphi 2007) dann Typ "ShortString"

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 1-times. Last edit: 01.06.2020 - 17:22 by pvs-deck.
go down go up
TheBeginner offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 63
Posts: 486
Registered: 06 / 2013
Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 17:31   -  
Danke Thorsten das war es. Jetzt gehts super danke!

TxBlock(@SendStr+1, word(len));
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5504
Registered: 03 / 2002
Homepage Private message
Subject: Re: SD Card auslesen  -  Posted: 01.06.2020 - 19:05   -  
In Pascal gehört das längenbyte @$0 immer zum string dazu !!!!
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 11.07.2020 - 23:49