LPC936, SPI, microSD ansprechen

Gast #2929859
Lesenswert?

Hallo liebe LPC-Freunde,

für eine Schulprojekt möchte ich mit einem LPC936 eine microSD 
Speicherkarte ansprechen. Leider bekomm ich beim senden des ersten 
Befehls eine Verzögerte Rückmeldung das heißt ich lese zwischen 2 zu 
sendenden ASCII-Zeichen ein. Um es besser zu verstehen einfach das Bild 
im Anhang ansehen. Etwas schwer zu erkennen zwischen drin ist eine etwas 
größere lücke die eine Pause zum nächsten Sendevorgang darstellt.

Ich hab auch schon den MISO auf high (3,3V) und low gelegt um mein SPI 
auszutesten. Das Oszilloskop zeigt aber deutlich das die Information 
zwischen zwei sendvorgängen empfangen wird und ich hab keine Ahnung wie 
das sein kann. Vll. weiß jemand von euch rat?

Der Code zum Einlesen:

unsigned char send_command(unsigned char *CMD)  //Es wird ein CMD-Befehl 
versendet
{
  unsigned int i;
  unsigned char answer = 0xff;

  for(i=0; i<6; i++)
  {
    SS = 0;
    SPDAT = CMD[i];
    while((SPSTAT & 0x80) == 0x00);
    if(i==5)
      answer = SPDAT;
    SPSTAT = 0xff;
    SS = 1;
  }

  return answer;
}

Für jeden Hinweis bin ich dankbar.
Angehängte Dateien:
Gast #2930204
Lesenswert?

Hans D. schrieb:
> DSC00070.JPG
> 7,3 MB, 49 Downloads

Hans D. schrieb:
> Ich hab auch schon den MISO auf high (3,3V) und low gelegt um mein SPI
> auszutesten. ... Vll. weiß jemand von euch rat?

Ich glaube du hast ein ganz anderes Problem. Guck mal in das Datenblatt 
von deinem TEK und vergleich die Pixelanzahl mit deinem Screen Shot. 
Fällt dir etwas auf?
Gast #2930271
Lesenswert?

Michael H. schrieb:
> Hans D. schrieb:
>>     SS = 0;
> ...
>>     SS = 1;
> Sicher dass das das tut, was du bezweckst?

Der Port P2.4 ist im SFR (Special function register) Headerdatei 
<REG936.h> als SS deklariert somit kann ich den Slave Select Port auf 
low ziehen um die Speicherkarte anzusprechen. Das sollte also soweit 
richtig sein.


>>     SPSTAT = 0xff;
> Wird nie verändert.

Das Flag SPIF welches beim senden/empfangen gesetzt wird, wird mit 
SPSTAT 0xff zurückgesetzt und nicht wie es wohl manche vermuten mit 0x00 
also da weiß ich das es funktioniert.

> Generell ist dein Code nicht wirklich sauber geschrieben - überall
> Konstanten ohne sinngebende Namen und viel zu allgemein gehaltene
> Funktions- und Variablennamen.
> Ich vemute, du verhaspelst dich da noch irgendwo außerhalb.

Das Problem ist ja nicht das senden von einem Befehl das funktioniert 
einwandfrei (Das sehe ich an meinem Oszilloskop). Das Problem ist bei 
mir das ich es nicht korrekt empfange. Ich den das ich Irgendwas 
übersehen habe z.b. eine Zeitliche verzögerung oder so.
Gast #2930296
Lesenswert?

Fox Mulder schrieb:
> Ich habe selber mal für den LPC936 ein Testprogramm geschrieben gehabt,
> mit welchem ich SD und SDHC Karten ansprechen kann. Eventuell hilft es
> dir etwas. Du findest die Dateien dazu unter [1].
> Aber grundsätzlich ist deine Schleife schon richtig aufgebaut. :)
>
> Ciao,
>      Rainer
>
> [1] https://quakeman.homelinux.net/viewvc/uVision/trun...

Herzlichen Dank, ich denk das könnte mir noch von Nutzen sein. =)

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