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.
1
charSDdata[512];
2
Mmc_Read_Sector(0,SDdata);
3
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
>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.
>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."
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??
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.
Ja,in Ordnung hast ja recht hätte ich das gleich rein geschrieben dann
wären wir vieleicht schon weiter.
Aber,
1
charSDdata[512];
2
inti;
3
Mmc_Read_Sector(0,SDdata);
4
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???
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."
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.
> 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
>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."
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 ?
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:
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.
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.
>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).