SD Karte gibt immer nur 0x01 zurück, CMD0 und SPI geht

OP Persönliche Seite #752122
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...
1
        MOV.W #1, R4       ; Nach erfolgreichen CMD0 noch 1Dummy mit CS low
2
        CALL #SD_Dummy_CSH
3
        
4
        MOV.W #200, R4     ; Noch 200 Dummies mit CS high
5
        CALL #SD_Dummy 
6
        
7
        ; CMD55 rausgeben
8
SD_CMD55:        
9
        MOV.B #0x77, R5     ;CMD laden
10
        MOV #0x0000, R6
11
        MOV #0x0000, R7
12
        CALL #SD_CMD_R1     ; CMD rauslassen
13
        PUSH R5
14
        MOV.B #0x01, R4
15
        CALL #SD_Dummy_CSH   ; 1 dummy bei CS low hinterher
16
        MOV.B #0x02, R4
17
        CALL #SD_Dummy       ; 2 dummy bei CS high hinterher
18
        POP R5
19
        CMP.B #0x00, R5
20
        JEQ SD_ACMD41       ; Antwort prüfen
21
        CMP.B #0x01, R5
22
        JNE SD_Init_Error
23
        
24
SD_ACMD41:
25
        
26
        MOV.B #0x69, R5     ;CMD laden
27
        MOV #0x0000, R6
28
        MOV #0x0000, R7
29
        CALL #SD_CMD_R1     ; CMD rauslassen
30
        
31
        PUSH R5
32
        MOV.B #0x01, R4
33
        CALL #SD_Dummy_CSH   ; 1 dummy bei CS low hinterher
34
        MOV.B #0x02, R4
35
        CALL #SD_Dummy       ; 2 dummy bei CS high hinterher
36
        POP R5
37
        CMP.B #0x00, R5
38
        JEQ SD_ACMD41_       ; Antwort prüfen
39
        CMP.B #0x01, R5
40
        JNE SD_Init_Error
41
        
42
        JMP SD_CMD55
43
         
44
        
45
SD_ACMD41_: 
46
        
47
        ;StatusLED flackern lassen ; Karte kommt hier nie an
48
        BIS.B #00000010b, &P1SEL
49
        MOV.W #07A1h, &TACCR0   ; 250ms Intervall
50
        BIS.W #MC1+MC0, &TACTL  ; Timer aktivieren(Up/Down)
51
        
52
        
53
        JMP $
54

55
SD_CMD_R1:
56
        MOV.B R5, &USISRL
57
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
58
SD_CMD_R1a:        
59
        BIT.B #USIIFG, &USICTL1    ; Fertig?
60
        JZ SD_CMD_R1a
61
        
62
        SWPB R6
63
        MOV.B R6, &USISRL
64
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
65
SD_CMD_R1b:        
66
        BIT.B #USIIFG, &USICTL1    ; Fertig?
67
        JZ SD_CMD_R1b
68
        
69
        SWPB R6
70
        MOV.B R6, &USISRL
71
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
72
SD_CMD_R1c:        
73
        BIT.B #USIIFG, &USICTL1    ; Fertig?
74
        JZ SD_CMD_R1c
75
        
76
        SWPB R7
77
        MOV.B R6, &USISRL
78
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
79
SD_CMD_R1d:        
80
        BIT.B #USIIFG, &USICTL1    ; Fertig?
81
        JZ SD_CMD_R1d
82
        
83
        SWPB R7
84
        MOV.B R6, &USISRL
85
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
86
SD_CMD_R1e:        
87
        BIT.B #USIIFG, &USICTL1    ; Fertig?
88
        JZ SD_CMD_R1e
89

90
SD_CMD_R1g:        
91
        MOV.B #0x00, &USISRL
92
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start
93
SD_CMD_R1f:        
94
        BIT.B #USIIFG, &USICTL1    ; Fertig?
95
        JZ SD_CMD_R1f
96
        MOV.B &USISRL, R5
97
        CMP.B #0xFF, R5
98
        JEQ SD_CMD_R1g
99
        
100
        RET
101
        
102
        
103
        
104

105

106

107

108
        
109
SD_Init_Error:
110
        BIS.B #00000010b, &P1SEL       
111
        MOV.W #0x02FF, &TACCR0
112
        BIS.W #MC1+MC0, &TACTL  ; Timer aktivieren(Up/Down)
113
      
114
SD_Init_Error_:        
115
        JMP SD_Init_Error_
116
        
117
             
118
Wait_Timeout:
119
        BIC.B #00000010b, &P1SEL
120
        BIS.B #00000010b, &P1OUT
121
        
122
        JMP $
123
    
124
        
125
SD_Dummy:
126
        BIS.B #00010000b, &P1OUT  ; CS loslassen
127
        NOP
128
        NOP 
129
SD_Dummy_CSH:
130
        CMP #0, R4
131
        JEQ SD_Dummy_
132
        
133
        MOV.B #0FFh, &USISRL
134
        MOV.B #00001000b, &USICNT  ; 8-Bit Transfer > Start        
135
SD_Dummy_Wait:
136
        BIT.B #USIIFG, &USICTL1 ; Ist das modul schon fertig?
137
        JZ SD_Dummy_Wait
138
        MOV.B &USISRL, R5      
139
        
140
        DEC R4
141
        JMP SD_Dummy_CSH
142
SD_Dummy_:
143
        BIC.B #00010000b, &P1OUT  ; CS nehmen
144
        NOP
145
        RET
#760817
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren