mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CMD24 - Datenblock auf SD-Karte schreiben


Autor: Moritz Greif (moritz-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
ICh bin gerade dabei, mit (Atmega8, asm, 8Mhz) eine SD-Karte zu 
beschreiben.
Nach der erfolgreichen Initalisierung (SPI-Mode) , habe ich die 
Blocklänge mit CMD16 auf 512 gelegt, und will jetzt erstmal 512 
Testweise Daten an die Karte schicken. Als Antwort sollte ich ja bei 
Nullsetzten der obersten drei bits 0x05 bekommen (Data Response TOKEN). 
Ich krieg abe immer andere Werte, manchmal 0x01, manchmal 0x40, 
manchmal 0x08 ,...

Woran kann das ligen?

hier ein Code-Ausschnitt (ich weiss, nicht besonders elegant, soll ja 
uch erstmal nur funktionieren...
ldi Datum1, 0x58
ldi Datum2, 0x00
ldi Datum3, 0x01
ldi Datum4, 0xE1
ldi Datum5, 0x39       ;ab position 123193, hab ich mit Tiny Hexer als ersten block rausgefunden, der nur 0xFF hatte...

rcall Kommando
;warten n bissl
ldi temp2, 15
clr temp3
lp10:  
    ldi  temp1,  0xFF
  rcall  sende
  dec  temp2
  brne  lp10
clr temp2

  ;//Sendet Start Byte an MMC/SD-Karte
ldi temp1, 0xFE
rcall sende

st0:
ldi temp1, 'M'   ;als Testdatn mal 512 M's
rcall sende
inc temp2
cpi temp2, 255
breq st1
rjmp st0

st1:
clr temp2
inc temp3
cpi temp3, 2
breq st2
rjmp st0

st2:
ldi temp1, 'M'
rcall sende
rcall sende
;jetzt sinds 512 bytes
ldi temp1, 0x00
rcall sende
ldi temp1, 0x00
rcall sende
;die beiden CRC's
;und ende

EMPFANG:

  ldi  temp1,  0xFF
  rcall  sende         ;//Wartet auf ein gültige Antwort von der MMC/SD-Karte
  in  temp1,  SPDR 
    cpi temp1, 0xFF
  breq empfang
  cpi temp1, 0x00
  breq empfang
  rcall lcd_number_hex   ; hier ist die Anzeige, sihe oben im Text
  
;////////////////////////////////////////////////////////////////////////////////////////////////////////
lp9:
rjmp lp9

Autor: Moritz Greif (moritz-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier im Forum schreibt jemand:

"Nachdem ich Clock nun direkt (also mit 5V) an die Karte
gelegt habe, sind alle Antworten protokoll-getreu wie erwartet. Laut
MMC-Spec muss die CLK-Flankensteilheit <10ns sein."

Könnte es daran liegen? Ich habe einen Spannungsteiler --1kOhm --- 
<1kOhm-

Die direkten 5V an die Karte sollen der nix ausmachen. Gegenhypothesen?

Viele Grüsse,
Moritz

Autor: Rudolph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, also ich habe SCLK und DataIn über einen Spannungsteiler von 
4k7/6k8 an die SD-Karte gelegt welche ich auf 3,0V bei 2 MHz SPI von 
einem ATMega32 aus betreibe.
Data-Out und CS habe ich über einen Level-Shifter mit einem BSN20 FET 
angeschlossen.

Nun ja, die Widerstände sind in Bauform 0805 und die Länge der 
Leiterbahnen beträgt jeweils weniger als 2 cm.

Eine pauschale Antwort ist also nicht wirklich sinnvoll.

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.