Forum: Mikrocontroller und Digitale Elektronik Sd Karte Timing zwischen Commands


von Christian F. (christianf)


Lesenswert?

Moin !

Ich mache hier mal einen neuen Thread auf, weil mein alter Thread ( 
Beitrag "SD Karte Initialisieren -> Error" ) schon gelöste 
Probleme enthält (danke dir Mark an dieser Stelle :) ) und etwas 
unübersicht ist.

Ich wollte euch Fragen wie das Timing auszusehen hat zwischen einzelnen 
Commands.

Ich habe gestern die Karte zum laufen bekommen und möchte nun gerne 
wissen ob das zufällig funktioniert, oder funktioniert weil es 
funktioniert :D.

Um folgendes geht es:

Mit diesen Ablauf initialisiert sich die SD V2.0 2GB Karte :
1
~ CS -> LOW
2
3
~ send_cmd_0
4
5
 { ~ spi_send_cmd
6
7
  ~ spi_send_argument
8
9
  ~ spi_send_crc
10
11
  ~ spi_read_byte
12
13
   { ~ 0xFF send -> response?
14
15
    ~ solange bis response != 0xFF
16
   }
17
  ~ >>>>> spi_send_0xFF <<<<< (darum geht es)
18
  
19
  ~ CS -> HIGH
20
 }
21
~ send_cmd8
22
23
  ... gleicher Ablauf usw.

nehme ich "spi_send_0xFF heraus, funktioniert es nicht.

Die karte "möchte" also zwischen jedem command 1x 8 Clocks haben.

Ist das normal, oder hier Zufall?

Einige schicken nach dem CS -> HIGH nochmal 1x 8 Clocks.

Ist es prinzipiell egal wo ?


Gruss !

von Mark L. (Firma: TH Köln) (m2k10) Benutzerseite


Lesenswert?

Moin.
Hat mich auch interessiert, wo aus den Specs ist das her hatte, es war 
in Kapitel 4.4 (gilt aber auch für SPI):

It is an obvious requirement that the clock shall be running for the 
card to output data or response tokens. After the last SD Memory Card 
bus transaction, the host is required, to provide 8 (eight) clock cycles 
for the card to complete the operation before shutting down the clock. 
Following is a list of the various bus transactions:
•A command with no response. 8 clocks after the host command end bit.
•A command with response. 8 clocks after the card response end bit.
•A read data transaction. 8 clocks after the end bit of the last data 
block.
•A write data transaction. 8 clocks after the CRC status token.

Mark

von Ulf (Gast)


Lesenswert?

Das A und O am Elektronikbasteln ist Datenblätter lesen.

von Christian F. (christianf)


Lesenswert?

Habe ich ja Ulf, allerdings habe ich nicht in dem SD Mode nachgeschaut 
weil ich die Karte im SPI Mode betreiben will und da ist (sofern ich es 
nicht übersehen habe) kein Verweis auf das Kapitel 4.4 und dem 
Clockhandling.

Naja ok. Also nach jedem Command Frame und Antwort der Karte 1x 8 
Clockbit senden :)

Gruss

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Christian F. schrieb:
> Die karte "möchte" also zwischen jedem command 1x 8 Clocks haben.
>
> Ist das normal, oder hier Zufall?

Ist so spezifiziert.

Christian F. schrieb:
> Einige schicken nach dem CS -> HIGH nochmal 1x 8 Clocks.
>
> Ist es prinzipiell egal wo ?

Nein, immer bei nichtaktivem CS. Manche Kommandos (Read) erfordern 
zusätzliche Clocks innerhalb des aktiven CS-Rahmens. Nach dem Abwählen 
des CS sind immer noch weitere 8 Clocks notwendig.

von sadsad (Gast)


Lesenswert?

Ulf schrieb:
> Das A und O am Elektronikbasteln ist Datenblätter lesen.

Schon richtig, aber das allein reicht manchmal auch nicht aus leider. So 
ziemlich jede Spezifikation wird in der Praxis mehr oder minder oft und 
auf ehm... kreative Art und Weise von Herstellern und Entwicklern auf 
allen Seiten verletzt. Das schwierige ist dann (nach Studium der entspr. 
Datenblätter und Spezifikationen) die Bugs und Workarounds und 
Verletzungen der Spezifikation in der Praxis zu kennen und richtig 
damit umgehen zu können, was leider nicht trivial ist.

von Christian F. (christianf)


Lesenswert?

Knut Ballhause schrieb:
> Christian F. schrieb:
>> Die karte "möchte" also zwischen jedem command 1x 8 Clocks haben.
>>
>> Ist das normal, oder hier Zufall?
>
> Ist so spezifiziert.
>
> Christian F. schrieb:
>> Einige schicken nach dem CS -> HIGH nochmal 1x 8 Clocks.
>>
>> Ist es prinzipiell egal wo ?
>
> Nein, immer bei nichtaktivem CS. Manche Kommandos (Read) erfordern
> zusätzliche Clocks innerhalb des aktiven CS-Rahmens. Nach dem Abwählen
> des CS sind immer noch weitere 8 Clocks notwendig.

Hi Knut,

also ich schicke nun vor jedem Command mit CS-> High 1x 8 Clocks.

Ob ich nun hinter dem letzten Frame oder vor dem nächsten CMD 1x 8 
Clocks schicke ist ja prinzipiell egal es geht ja nun darum, dass 
zwischen einer Transaktion 8 x Dummyclocks liegen.

Quasi:

1. [0xFF] [1.Command 6 bytes] [Antwort][0xFF] [2.Command 6 bytes] 
[Antwort]..


oder

2. [1.Command 6 bytes] [Antwort][0xFF][2.Command 6 bytes] [Antwort]..

Bei Fall 2 habe ich das Problem, das ich dann das erste byte vom R7 
wegwerfen, denn ich warte auf 0x01 vom CMD8 und sofern das R1 da ist, 
werte ich step by step die anderen 4 bytes aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.