mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit FAT16


Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin gerade dabei mit mit FAT auseinander zu setzen.
Ich wollte nun die ersten 512 byte per USART ausgeben und mit dem 
HexEditor vegleichen, jedoch kommen nur Nullen zur Anzeige.
char SDdata[512];
Mmc_Read_Sector(0,SDdata);
for(i=0,i<512;i++) Usart_Write(SDdata[i]);
Kann mir jemand sagen was ich falsch mache.

PS: arbeite mit Mikroc Compiler for PIC

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>for(i=0,i<512;i++) Usart_Write(SDdata[i]);

for(i=0; i<512; i++) Usart_Write(SDdata[i]);

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Komma ist ein versehen das ist nicht das Problem.

Danke

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>das Komma ist ein versehen das ist nicht das Problem.

Dann ist das auch nicht der Code den du benutzt.
Antworten überflüssig weil der Fehler in Zeile 42 ist.

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist  der richtige Code.
Was willst du mit "Antworten überflüssig weil der Fehler in Zeile 42 
ist."

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der richtige Code wäre compilierbar. Da der obige Code nicht 
compilierbar ist, ist es nicht der richtige Code.

Beitrag ""Hilfe", "funktioniert nicht", funktioniert nicht."

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich benutze den Mikroc Compiler und da funktioniert der Code.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich benutze den Mikroc Compiler und da funktioniert der Code.
Wie auch immer:

1. Der Code kann so nicht funktionieren, weil er unvollständig ist. Es 
fehlt z.B eine main-funktion oder die Deklaration von i.

2. Die Hinweise unter dem genannten Link werden Dir helfen bessere 
Antworten zu bekommen. Beitrag ""Hilfe", "funktioniert nicht", funktioniert nicht."

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
es ist ein Ausschnitt und nicht der ganze Code.
Und sorry das ich dachte das klar ist wie man i deklariert (int), sorry.

Wie kann ich mir den Inhalt von SDdata noch ansehen??

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es tut mir leid, aber da Du konstant die Hinweise ignorierst, sehe ich 
keinen Grund mehr weiter auf Dich einzugehen.

Insbesondere finde ich:
>Und sorry das ich dachte das klar ist wie man i deklariert (int), sorry.
unsinnig, denn Du fragst ja hier und weisst etwas nicht und gehst 
davon aus, das wir Dein Problem erkennen. Wir können nicht wissen ob Du 
weisst, das man i deklarieren muss. Die beste Art dies zu zeigen, wäre, 
einfach den Code zu posten.

Aber gut, das hat sich ja sowieso erledigt.

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja,in Ordnung hast ja recht hätte ich das gleich rein geschrieben dann 
wären wir vieleicht schon weiter.

Aber,
char SDdata[512];
int i;
Mmc_Read_Sector(0,SDdata);
for(i=0; i<512; i++) Usart_Write(SDdata[i]);

Das ist der einzig relevante Code.
Mmc_Read_Sector() und Usart_Write(), sind im Compiler schon fertige 
Funktionen.

Kann mir jetzt bitte jemand helfen???

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weisst nicht wo der Fehler ist und fragst uns, weisst aber ganz genau 
das der Fehler in dem Codeabschnitt liegt; wir wissen aber auch nicht, 
warum Du das vermutest oder wie wir darauf kommen sollen, das das so 
stimmt.

Lies bitte: Beitrag ""Hilfe", "funktioniert nicht", funktioniert nicht."

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
picprogger schrieb:

> Das ist der einzig relevante Code.

Nein, ist es nicht, denn an diesem Code kann man nicht sehen, warum du 
nur Nullen bekommst. Nicht zu sehen ist z.B. wie die beteiligten 
Funktionen deklariert sind. Selbst wenn die beiden Funktionen 
einwandfrei funktionieren und von dir auch richtig verwendet werden, 
gibt es noch diverse andere Möglichkeiten wo es haken könnte.
Funktioniert z.B die UART-Übertragung überhaupt?
Funktioniert die Verbindung zur MMC-Karte?
etc ...

> Kann mir jetzt bitte jemand helfen???

Hast du dir überhaupt mal den von Ahem geposteten Link angesehen?
Kurzfassung: mit den mickrigen von dir gelieferten Informationen ist 
keine Fehleranalyse möglich.

Autor: Uwe Berger (boerge) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was willst du mit "Antworten überflüssig weil der Fehler in Zeile 42
> ist."
>
http://de.wikipedia.org/wiki/42_(Antwort)

wollte ich schon immer mal posten, für alle die, die den Klassiker nicht 
kennen... ;-)

Uwe

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber,
>
>char SDdata[512];
>int i;
>Mmc_Read_Sector(0,SDdata);
>for(i=0; i<512; i++) Usart_Write(SDdata[i]);
>
>Das ist der einzig relevante Code.
>Mmc_Read_Sector() und Usart_Write(), sind im Compiler schon fertige
>Funktionen.

Also bei meinen SD Programmen wird erst mal ne SD-Init
durchlaufen. Wenn die nicht klappt braucht man gar nicht
erst weiter zu machen. Kommt nur noch Schrott bei raus.
Wo ist deine SD-Init? Kommt dein Programm da durch?

Vieleicht hast du deine Karte ja auch nicht richtig
angeschlossen? Wo ist dein Schaltplan?

Über welchen PIC reden wir eigentlich?

>Kann mir jetzt bitte jemand helfen???

Nö.

Lies bitte: Beitrag ""Hilfe", "funktioniert nicht", funktioniert nicht."

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo picprogger (Gast)


Ich habe hier nur das MikroBasic im Einsatz, aber das ist quasi das 
gleiche.

In der Erklärung der Funktion MMC_READ_SECTOR() wird erklärt, daß die 
MMC vorher initialisiert werden muß (MMC_Init).
Dann ist es eine Funktion, die einen Rückgabewert gibt, den man 
auswerten kann.

In Deinem Code finde ich nichts davon. Ist die Hilfe in Deinem Compiler 
defekt oder willst Du uns hier etwas narren ?

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also,

ich arbeite mit dem EasyPic5 und passendem SD Interface darauf der PIC 
18F458

Die ferigen Funktionen sind unsigned char deklariert.
dazu gehören Mmc_Init(unsigned short *port, unsigned short 
pin),Mmc_Read_Sector(unsigned long sector, char *buffer), void 
Usart_Write(unsigned short data).
Mein ganzer Code:
void Usart_Write_Text(char *ostr){
  int i;
  i=0;
  while(ostr[i]){
    Usart_Write(ostr[i++]);
  }
  Usart_Write(13);
  Usart_Write(10);
}
char SDdata[512];
int i;

void main(){

Usart_Init(9600);
Delay_100ms();

Usart_Write_Text("Initializing MMC");
while(Mmc_Init(&PORTC, 2));
  if(!Mmc_Read_Sector(0, SDdata))
  {
    for(i=0; i<512; i++) Usart_Write(SDdata[i]);
  }
}

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja. Das geht doch schon mal in die richtige Richtung.
Was ist mit den anderen Punkten aus dem Link?

Ist die Karte formatiert? Sind da Dateien drauf?
Wie sieht der Schaltplan aus?
Was hast Du schon probiert? Was waren die Ergebnisse?

Also erstmal könntest Du Deine Kommunikation testen.
Setze das Array auf einen oder mehrere konstante Werte und gib die aus.

Dann könntest Du einfach mal einen anderen Sektor lesen.

Ausserdem könntest Du, mal den Sektor mit 0xA5 oder ähnlichem 
beschreiben und danach auslesen, falls die Daten darauf zerstört werden 
dürfen.

Autor: picprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Karte(32MB) ist FAT16 formatiert.
Keine Dateien drauf.
Schaltplan gibts nicht da fertig aufgebautes Bord.

Array ausgabe hat hervorragen geklappt.

Wenn ich einen anderen Sektor beschreibe und dann wieder auslese passt 
alles prima.
Nur den MBR, Sektor 0 bekomme ich nicht, aber am Ende steht das der MBR 
zu ende ist also 0x55 0xAA.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn ich einen anderen Sektor beschreibe und dann wieder auslese passt
>alles prima.
Na, das sieht doch schon mal nicht schlecht aus. Also geht Deine 
Initialisierung und das Lesen und Schreiben.

>Nur den MBR, Sektor 0 bekomme ich nicht, aber am Ende steht das der MBR
>zu ende ist also 0x55 0xAA.

Das ist bei SD-Karten normal. Da man von ihnen normalerweise nicht 
bootet, enthalten sie keinen Bootloader und oft (wie anscheinend bei 
Dir) nicht mal eine Partitionstabelle. Im Gegenteil kann das 
Vorhandensein der MBR-Kennung (0x55 0xAA) schon als Schmankerl angesehen 
werden.

Suche mal bei Google nach "leerer MBR SD-KArte". Du wirst finden, das da 
jeder Hersteller seine eigenen Ansichten hat und dazu noch je nach Weg 
der Formatierung verschiedenes geschrieben oder eben nicht geschrieben 
wird. Zum Teil sind die Auslassungen auch logisch, da es z.B. unter 
Windows nicht nötig ist eine Partitionstabelle oder einen Bootloader auf 
einer SD-Karte zu haben. Siehe unter: 
http://de.wikipedia.org/wiki/Partitionstabelle und 
http://de.wikipedia.org/wiki/Master_Boot_Record
Andererseits kann man mittels eigenem Bootsektor usw. SD-Karten bootbar 
machen.

Ist das für Dich so ausreichend? Wenn nicht frag einfach weiter. (Da das 
Problem mit dem Lesen ja erledigt ist, am besten in einem neuen Thread).

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt auch partitionslose und damit auch MBR-lose Formate für 
Wechseldatenträger, das Stichwort ist hier "Superfloppy".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.