www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte gibt immer nur 0x01 zurück, CMD0 und SPI geht


Autor: µluxx .. (uluxx) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche jetzt schon seit 1 1/2 Wochen eine SD Karte mit dem 
MSP430F2013 anzusteuern. CMD0 funktioniert, Karten antworten, nur eine 
1GB Sandisk macht Probleme, weiß nicht warum, alle 3 anderen 
funktionieren, und jetzt versuche ich schon ewig, mal mit CMD1 mal mit 
CMD55+ACMD41 die karten zu initialisieren.
Nur irgendwie wird das nichts. Die Karten antworten zwar mit R1, aber 
sie werden nie fertig. Ich bekomme immer 0x01.
Mein Hardwareaufbau: SD Karte an 3,3V, genauso wie MSP, beide einzeln 
mit 100nF, SPI Leitungen mit 33K Pullup(MOSI,MISO,CLK), CS PushPull, 
ungenutzte IOs mit 50K auf Vcc.

Hier mal mein Code, ich weiß nicht an was es noch liegen könnte, ich 
habe schon diverse experimente mit Dummies vor bzw. nach Commands 
gemacht, mal mit CS high, mal mit low, manchmal delay zwischen die 
Abfragen, Nichts ging, bzw. NIE antwortete die Karte mal mit 0x00...
        MOV.W #1, R4       ; Nach erfolgreichen CMD0 noch 1Dummy mit CS low
        CALL #SD_Dummy_CSH
        
        MOV.W #200, R4     ; Noch 200 Dummies mit CS high
        CALL #SD_Dummy 
        
        ; CMD55 rausgeben
SD_CMD55:        
        MOV.B #0x77, R5     ;CMD laden
        MOV #0x0000, R6
        MOV #0x0000, R7
        CALL #SD_CMD_R1     ; CMD rauslassen
        PUSH R5
        MOV.B #0x01, R4
        CALL #SD_Dummy_CSH   ; 1 dummy bei CS low hinterher
        MOV.B #0x02, R4
        CALL #SD_Dummy       ; 2 dummy bei CS high hinterher
        POP R5
        CMP.B #0x00, R5
        JEQ SD_ACMD41       ; Antwort prüfen
        CMP.B #0x01, R5
        JNE SD_Init_Error
        
SD_ACMD41:
        
        MOV.B #0x69, R5     ;CMD laden
        MOV #0x0000, R6
        MOV #0x0000, R7
        CALL #SD_CMD_R1     ; CMD rauslassen
        
        PUSH R5
        MOV.B #0x01, R4
        CALL #SD_Dummy_CSH   ; 1 dummy bei CS low hinterher
        MOV.B #0x02, R4
        CALL #SD_Dummy       ; 2 dummy bei CS high hinterher
        POP R5
        CMP.B #0x00, R5
        JEQ SD_ACMD41_       ; Antwort prüfen
        CMP.B #0x01, R5
        JNE SD_Init_Error
        
        JMP SD_CMD55
         
        
SD_ACMD41_: 
        
        ;StatusLED flackern lassen ; Karte kommt hier nie an
        BIS.B #00000010b, &P1SEL
        MOV.W #07A1h, &TACCR0   ; 250ms Intervall
        BIS.W #MC1+MC0, &TACTL  ; Timer aktivieren(Up/Down)
        
        
        JMP $

SD_CMD_R1:
        MOV.B R5, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
SD_CMD_R1a:        
        BIT.B #USIIFG, &USICTL1    ; Fertig?
        JZ SD_CMD_R1a
        
        SWPB R6
        MOV.B R6, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
SD_CMD_R1b:        
        BIT.B #USIIFG, &USICTL1    ; Fertig?
        JZ SD_CMD_R1b
        
        SWPB R6
        MOV.B R6, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
SD_CMD_R1c:        
        BIT.B #USIIFG, &USICTL1    ; Fertig?
        JZ SD_CMD_R1c
        
        SWPB R7
        MOV.B R6, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
SD_CMD_R1d:        
        BIT.B #USIIFG, &USICTL1    ; Fertig?
        JZ SD_CMD_R1d
        
        SWPB R7
        MOV.B R6, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
SD_CMD_R1e:        
        BIT.B #USIIFG, &USICTL1    ; Fertig?
        JZ SD_CMD_R1e

SD_CMD_R1g:        
        MOV.B #0x00, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
SD_CMD_R1f:        
        BIT.B #USIIFG, &USICTL1    ; Fertig?
        JZ SD_CMD_R1f
        MOV.B &USISRL, R5
        CMP.B #0xFF, R5
        JEQ SD_CMD_R1g
        
        RET
        
        
        




        
SD_Init_Error:
        BIS.B #00000010b, &P1SEL       
        MOV.W #0x02FF, &TACCR0
        BIS.W #MC1+MC0, &TACTL  ; Timer aktivieren(Up/Down)
      
SD_Init_Error_:        
        JMP SD_Init_Error_
        
             
Wait_Timeout:
        BIC.B #00000010b, &P1SEL
        BIS.B #00000010b, &P1OUT
        
        JMP $
    
        
SD_Dummy:
        BIS.B #00010000b, &P1OUT  ; CS loslassen
        NOP
        NOP 
SD_Dummy_CSH:
        CMP #0, R4
        JEQ SD_Dummy_
        
        MOV.B #0FFh, &USISRL
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start        
SD_Dummy_Wait:
        BIT.B #USIIFG, &USICTL1 ; Ist das modul schon fertig?
        JZ SD_Dummy_Wait
        MOV.B &USISRL, R5      
        
        DEC R4
        JMP SD_Dummy_CSH
SD_Dummy_:
        BIC.B #00010000b, &P1OUT  ; CS nehmen
        NOP
        RET

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass mal beim senden mehrerer cmd41 die select leitung auf low, also die 
karte aktiviert

Autor: µluxx .. (uluxx) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meinst du ich soll mehrmals CMD55+ACMD41 senden, und dazwischen CS low 
lassen, kann ich machen, meisnt du ich soll nach jedem Kommand ein paar 
Dummies (auch bei CS low) mitschicken, und wenn ja, wieviele?

Autor: µluxx .. (uluxx) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, also auch das CS Leitung auf Low lassen bringt nichts, ich habe auch 
versucht mal keine Dummies nach dem Befehl zu senden, mal 8, mal 
1....bringt alles nichts...woran kann das nur liegen?? Ich kapiers echt 
nicht!

Autor: Sebastian H. (baddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das gleiche Problem wie du. Vor den Ferien konnte ich 
einwandfrei schreiben und lesen und nun geht fast gar nix mehr. Gestern 
hat nochmal ein Schreibvorgang geklappt, aber danach war schon wieder 
Ende im Gelände.

Bei mir ist es so, dass die Karte entweder 0x01 zurück gibt oder sich 
irgendwann mit 0xFF verabschiedet.

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.