Announcement

Collapse
No announcement yet.

Fragen zur SD-Card Library

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fragen zur SD-Card Library

    Hi,

    ich hätte ein paar Fragen zur SD-Card Library:

    .) Man kann ja sowohl die vorkompilierte Library, als auch den Sourcecode downloaden. Unterscheiden sich die beiden in ihrer Funktion? Ich frage deshalb, weil in der Spezifikation steht: "The library handles the chip-select signals of the SPI access and before it accesses the card, it checks if it is really inserted." Wenn ich jedoch in der Funktion sdcardReadBlock() nachsehe, dann finde ich die Überprüfung, ob die Karte tatsächlich eingelegt ist, nicht...Oder überseh ich da was?

    .) Kann es sein, dass die Funktion
    Code:
    bool sdcardAvailable() {
        return ((SDCARD_PIN & SDCARD_CD) == 0) ? false : true;
    }
    falsch ist? Ich bin zwar gerade nicht im Labor, und kann das daher nur mit dem Connector, welcher direkt am bigAVR verbaut ist, testen - doch da liefert die Funktion falsche Werte.

    Sollte das nicht eher so lauten:
    Code:
    bool sdcardAvailable() {
        return ((SDCARD_PIN & (1<<SDCARD_CD))) ? false : true;
    }
    ?

  • #2
    Originally posted by bbernhard1 View Post
    Unterscheiden sich die beiden in ihrer Funktion? ... "The library handles the chip-select signals of the SPI access and before it accesses the card, it checks if it is really inserted."
    Die Sourcen und die kompilierten packages unterscheiden sich nicht. Da weicht die Implementierung von der Spec ab...

    Originally posted by bbernhard1 View Post
    Kann es sein, dass die Funktion
    Code:
    bool sdcardAvailable() {
        return ((SDCARD_PIN & SDCARD_CD) == 0) ? false : true;
    }
    falsch ist? ...
    Sollte das nicht eher so lauten:
    Code:
    bool sdcardAvailable() {
        return ((SDCARD_PIN & (1<<SDCARD_CD))) ? false : true;
    }
    ?
    Ja, das ist ein Fehler und wird ausgebessert (nach Ostern). Danke!

    Comment


    • #3
      Hats schon jemand geschaft mit dem sdcardlibary oder mit dem Quellcode etwas zu machen? Ich bekomm bei beiden folgende Meldung:
      /usr/lib/gcc/avr/4.3.5/../../../avr/lib/avr51/crtm1280.o: In function `__bad_interrupt':
      ../../../../crt1/gcrt1.S:193: undefined reference to `main'
      make: *** [sdcard.elf] Error 1

      Comment


      • #4
        Die Library beinhaltet keine main() Funktion. Du musst selbst noch eine Applikation schreiben, die die Funktionen in der lib verwendet.

        Comment


        • #5
          Hat von euch schon jemand die SD-Card Library erfolgreich zum Laufen bekommen? Irgendwie klappt das bei mir mit dem Lesen von der SD-Karte nicht so ganz. Wenn ich das Debugging aktiviere, dann bekomm ich die Fehlermeldung "wait on data failed". An den SPI Funktionen kanns ja nicht liegen, sonst würd der ja schon bei Ausführung der sdcardInit() schreien, oder? Da beim MP3 Modul die Ausgabe des Sinustestsignal funktioniert, muss ja theoretisch zumindest spiInit() und spiSend() richtig implementiert sein. Mein spiReceive() sieht übrigens so aus, dass ich ein Dummy-Byte (0xFF) sende und dann etwas vom SPI Bus lese.

          Hat jemand nen Tipp, was da bei mir schief läuft?

          Comment


          • #6
            Originally posted by bbernhard1 View Post
            Hat von euch schon jemand die SD-Card Library erfolgreich zum Laufen bekommen? Irgendwie klappt das bei mir mit dem Lesen von der SD-Karte nicht so ganz. Wenn ich das Debugging aktiviere, dann bekomm ich die Fehlermeldung "wait on data failed". An den SPI Funktionen kanns ja nicht liegen, sonst würd der ja schon bei Ausführung der sdcardInit() schreien, oder? Da beim MP3 Modul die Ausgabe des Sinustestsignal funktioniert, muss ja theoretisch zumindest spiInit() und spiSend() richtig implementiert sein. Mein spiReceive() sieht übrigens so aus, dass ich ein Dummy-Byte (0xFF) sende und dann etwas vom SPI Bus lese.

            Hat jemand nen Tipp, was da bei mir schief läuft?
            Ich hab leider keinen Tipp, aber krieg beim initialisieren und auch beim lesen ein E_TIMEOUT. Bin derzeit auf einer (bis jetzt erfolglosen) Fehlersuche.

            Comment


            • #7
              Originally posted by maciej View Post
              Ich hab leider keinen Tipp, aber krieg beim initialisieren und auch beim lesen ein E_TIMEOUT. Bin derzeit auf einer (bis jetzt erfolglosen) Fehlersuche.
              Ok, dann bin ich wenigstens nicht alleine. Hast du schon mal bei eingeschaltetem Debugging geschaut, wo er genau bei dir hängt?

              Comment


              • #8
                Originally posted by bbernhard1 View Post
                wo er genau bei dir hängt?
                Bei mir hings bei sdcardInit, weil meine im spInit gesetzten Werte am PortB(SDCARD_DDR) von diesen wieder ueberschrieben wurden, hab daher das in spiSend nochmal eingabaut, jetzt haengst beim ersten spiRecive (SPIF wird wohl nie gesetzt ) in sdcardReadBlock bei waitOnNot. Hab ich ueber Leds rausgefunden. Wie funktioniert debug ?
                Last edited by zool; 10-04-2012, 18:35.

                Comment


                • #9
                  Originally posted by bbernhard1 View Post
                  Ok, dann bin ich wenigstens nicht alleine. Hast du schon mal bei eingeschaltetem Debugging geschaut, wo er genau bei dir hängt?
                  Wenn ich den Debug output am bildschirm ausgebe sagt er mir "app failed". Gibts irgendwo das datasheet für das ansprechen der sd-karte?
                  Last edited by maciej; 10-04-2012, 20:03. Reason: frage nach falschem datasheet

                  Comment


                  • #10
                    Originally posted by maciej View Post
                    Wenn ich den Debug output am bildschirm ausgebe sagt er mir "app failed". Gibts irgendwo das datasheet für das ansprechen der sd-karte?
                    Hmm, komisch - bei mir schreit er da noch nicht. Verwendest du deine eigene SD-Karte zum Testen, oder die aus dem Labor?

                    Datenblatt hab ich keines, aber hier[1] steht viel interessantes.

                    @zool: Ich weiß nicht, ob das mit der vorkompilierten Library auch geht, aber bei den Sourcen aktivierst du mit #define DEBUG den Debugmodus (im sdcard.c File). Damit das funktioniert, musst du aber noch einen der beiden UARTs (UART1 oder UART2) initialisieren und stdout entsprechend umleiten.

                    [1] http://elm-chan.org/docs/mmc/mmc_e.html

                    edit: Statt der SD-Karte vom Labor, hab ich jetzt testweise mal meine eigene SD Karte verwendet. Wenn ich nun sdcardReadBlock() ausführe, dann bekomme ich zumindest mal keine Fehlermeldung. Doch die Daten, die ich lese, stimmen irgenwie nicht mit denen überein, die ich erwarte. Wenn ich die SD-Karte mit nem Hex-Editor öffne, dann kann ich mir ja ansehen was in den einzelnen Sektoren steht. Wenn ich das nun mit dem vergleiche, was ich lese, dann stimmt das nicht überein...
                    Last edited by bbernhard1; 10-04-2012, 22:06.

                    Comment


                    • #11
                      Originally posted by bbernhard1 View Post
                      aber bei den Sourcen aktivierst du mit #define DEBUG den Debugmodus (im sdcard.c File). Damit das funktioniert, musst du aber noch einen der beiden UARTs (UART1 oder UART2) initialisieren und stdout entsprechend umleiten.
                      Fuer Uart hab ich den Code von der HTL ausgegraben, der Teil ist kein Problem aber, wie leit ich den stdout zum uart um ? Oder geht da nur Stueck fuer Stueck selbst schreiben. (hab eigentlich an Linux gedacht, wo das ja mit einem Befehl geht)

                      Comment


                      • #12
                        Originally posted by zool View Post
                        Fuer Uart hab ich den Code von der HTL ausgegraben, der Teil ist kein Problem aber, wie leit ich den stdout zum uart um ? Oder geht da nur Stueck fuer Stueck selbst schreiben. (hab eigentlich an Linux gedacht, wo das ja mit einem Befehl geht)
                        Das kannst du auch mit einem Befehl machen. Wie das genau funktioniert, steht im ersten Example-Code auf dieser[1] Seite.

                        [1] http://www.nongnu.org/avr-libc/user-...vr__stdio.html

                        Comment


                        • #13
                          Sooo, ich hab mir jetzt mal aus dem Internet ne SD-Library gesucht und diese für den AVR angepasst. Doch auch damit funktioniert's nicht...Die gelesenen Daten stimmen einfach nicht mit den erwarteten Daten überein. Komisch ist auch: Wenn ich mehrmals hintereinander von der gleichen Adresse lese, dann bekomm ich immer unterschiedliche Daten und das, obwohl laut Return-Wert kein Fehler beim Lesevorgang aufgetreten ist....
                          Meine SD-Karte (vom Hersteller "Traveler") hab ich auch schon mal neu formatiert, doch das änderte auch nichts dran. Morgen werd ich zum Testen noch ne andere SD-Karte verwenden. Aber langsam gehn mir echt die Ideen aus...

                          Comment


                          • #14
                            for the record: bei mir war der fehler das ich beim empfangen über spi als dummy byte 0x00 genommen habe. mit einem dummy byte von 0xFF funktioniert es klaglos.

                            Comment


                            • #15
                              Originally posted by maciej View Post
                              for the record: bei mir war der fehler das ich beim empfangen über spi als dummy byte 0x00 genommen habe. mit einem dummy byte von 0xFF funktioniert es klaglos.
                              Hmm, das hätte ich eigentlich eh. Komisch..

                              edit: Jetzt funktionierts bei mir auch. Hab aber eigentlich nichts geändert

                              Egal, Hauptsache es funktioniert
                              Last edited by bbernhard1; 12-04-2012, 00:07.

                              Comment

                              Working...
                              X