-
        

Ergebnis 1 bis 7 von 7

Thema: AVR an SD (libfat?)

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523

    AVR an SD (libfat?)

    Anzeige

    Versuche jetzt schon seit einiger zeit eine SD am AVR zum laufen zu bringen, leider klappt das überhaupt nicht. Könnte mir jemand einen schaltplan und ein beispiel (C/C++) schicken wie es bei ihm funktioniert?? Und weis jemand wie man libfat (devktitpro) in das projekt einbindet um die lib zu nutzen?? Mein compiler meckert bis jetzt nur.

    Bin über jede hilfe dankbar!

    mfg

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    http://www.ulrichradig.de/home/index.php/avr/mmc-sd

    für die beschaltung und

    http://de.wikipedia.org/wiki/FAT16#FAT16

    fürs dateisystem

    die befehle fürs ansteuern der karte selber hab cih aufm arbeitsrechner liegen und hier finde ich gerade die seite nciht mehr

    EDIT: gefunden ^^

    http://www.maxim-ic.com/appnotes.cfm/an_pk/3969

    ich hab mich bis zum verzeichnis durchgearbeitet ... hänge im moment daran LFN-verzeichniseinträge über mehrere sektorgrenzen hin EFFEKTIV auszulesen

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Die beschaltung und die befehle sind nicht schlecht, aber mit der lib geht es bei mir nicht, die MBR signatur oder so wird nicht gefunden, und das bei jeder karte die ich verwende(vom PC werden sie einwandfrei erkannt).
    Und teils kann ich gar keine verbindung zur karte herstellen.

    mfg

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    dann ist entweder n wurm in der lib, oder etwas stimmt an deiner beschaltung nicht .... leiderleider hab ich mein programm auf arbeit gelassen ... sonst würd ich es gern mit dir teilen

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Habe jetzt die komplette schaltung auf 3,3V umgelegt und jetzt geht es.

    nur noch ne kleine Frage:
    Und zwar muss ich den dateinamen so angeben:
    Code:
    char datei[12]="Test    txt";
    und dann diese funktion aufrufen:
    Code:
    fat_str(datei);
    Quelltext zu fat_str:
    Code:
    char * fat_str(char *str){
    
      unsigned char i;
      unsigned char j = 0;
      unsigned char c;
      char tmp[12];					// tmp string zum einfacheren umwandeln
      
      strcpy(tmp,str);
    
      for(i = 0;i < 11;i++) str[i]=' ';	// als vorbereitung alles mit leerzeichen füllen
      str[11]='\0';
    
      i=0;
    
      do{
    	c=toupper(tmp[j]);
    	if(c=='\0')return str;
    	if(c!='.')str[i]=c;
    	else i=7;
    	i++;
    	j++;
    	}while(i<12);
    
      return str;
      
    }
    Ich würde das aber gern in der Form "Test.txt" schreiben, und ordner in "Ordner/Test.txt" usw. Weiß jemand wie das geht??

    Ach ja, wie funktioniert SoftPWM? OC1 und 2 werden ja durch die karte schon belegt.

    mfg

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    du müsstest theoretisch nur eine schleife schreiben, die bis zum '.' oder zum 8ten zeichen deines übergebenen String (hier "Test.txt") durchzählt

    DANN

    prüfen ob denn ÜBERHAUPT ein punkt da ist (bei verzeichnissen gilt die 8_3 regel nicht) ... ist kein punkt da, bis zum 11ten zeichen ab der 8ten position weiterkopieren oder mit leerzeichen auffüllen (wenn am ende des strings eine 0 '\0') steht (achtung, den eingabestring nicht weiter absuchen, alles was danach kommt iss nur müll)

    ist ein punkt da, die ersten 8 bytes mit leerzeichen auffüllen, wenn noch nicht 8 zeichen eingelesen wurden, ODER wenn 8 zeichen da sind, die 3 zeichen HINTER dem punkt an die position 8 9 und 10 schreiben ...

    abschliessend die 0 an position 11 nicht vergessen (die positionen fangen bei 0 an, desweghen 0-11 = 12 zeichen

    versuch das in einen übersetzbaren code umzusetzen dann haste deine methode TXTtoFilename(char* Str, char &Name[12]); (geht das so überhaupt? naja ist nur der deutlichkeit wegen)

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Also müsste ich über eine stringfunktion(mir fällt die bezeichnung grad nicht ein...) alles bis zum punkt lesen und das in das array schreiben und den rest mit leerzeichen auffüllen, dann die 3 zeichen nach den punkt in 8, 9, 10 schreiben und ne 0 bei 11?

    mfg

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •