Forum: PC-Programmierung SD/MMC SPI-Zugriff mit PC


von Vaillant S. (Gast)


Lesenswert?

Hallo Mikrocontroller Community,

bin dabei eine SD/MMC-Karte im SPI-Modus über RS232 auszulesen
(irgendwann auch zu beschreiben ;-) ).

Habe den Beispielkode von cc5x.de (für borland C++ und WinXP)angepasst
und mir ein paar Routinen zum setzen/abfragen der RS23 Pins
geschrieben.

Soweit dass Vorspiel !

Mein Problem:
Ich bekomme die SD/MMC-Karte nur sporadisch in den SPI-Modus und
erhalte häufig die Antwort 3 ("in idle state" & "erase reset") von
der Karte (sowohl bei Init als auch während der Abfrage).

Hat sowas schon mal erlebt/versucht/erfolgreich beendet ?
Könnt ihr mir mal ein Paar Tipps geben ?


DAnke im Vorraus

von Vaillant S. (Gast)


Lesenswert?

RS23 sollte eigentlich RS232 heißen ;-)
TxD -> CS Chipselect
DTR -> Do Dataout
DTR -> Clk Clock
DSR -> DI DataIn

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hmm. Mir scheint das eine der weniger geeigneten Schnittstellen für ein
derartiges Unterfangen zu sein.
Ist das ein "proof-of-concept", daß sich die serielle Schnittstelle
zu jedem Kram ver...biegen lässt oder worin besteht der tiefere Sinn?

Wenn schon überhaupt eine Schnittstelle zum "bit-banging" verwendet
werden muss, dann sollte es doch die parallele sein - ja, mit
entsprechender Treiberunterstützung lässt sich die auch unter den
ernstgemeinten Windows-Versionen ansprechen.

von Hans (Gast)


Lesenswert?

das ist 1. arsch langsam und 2. nicht gerade elegant.. du darfst nämlich
entweder einen  schönen triber mit der ddk schreiben oder aber sowas wie
giveio verwenden...

gut das mit der ddk wäre schon ok in meinen augen nur 1. hast du die
ddk und 2. hast du ahnung von driver schreiben ??? ich nicht drum würde
ich empfehlen einen kleinen uC nehmen der einen uart hat und einfach
eine rs232<=>spi bridge damit zu machen... damit sollte es viel
einfacher und schneller gehen als im polling betrieb unter
windows...benötigt aber extra hardware...


gut soviel zu meinen einwänden g


wie hast du die bösen rs232 leitungen an die karte gegeben ?? ich hoffe
nicht direkt...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

@Hans:
Wenn sich Dein Beitrag auf meinen Hinweis beziehen sollte:

Glaubst Du allen Ernstes, daß "bit-banging" an der seriellen
Schnittstelle eines PCs auch nur annähernd so schnell funktioniert wie
"bit-banging" an der parallelen Schnittstelle?
Das ist nochmal deutlich langsamer.

Eine sinnvolle Lösung (mal von einem der tausenden fertigen
SD-Card-Lesegeräten abgesehen) wäre der FT2232C, der nämlich eine frei
programmierbare Multiprotokollschnittstelle namens "MPSSE", mit der
sich vorzüglich auch SPI realisieren lässt.

von Hans (Gast)


Lesenswert?

offensichtlich hab ich mehr als 4min gebraucht um zu tippsen ;)

und ich meinte nicht bitbangen sonder byte an den avr über rs232 und
der schiebts weiter... und das in beiden richtungen.. also nur eine
dumme rs232<=>spi bridge...

aber der ft wäre natürlich ideal... wusste garnicht das es sowas gibt
;)

der könnte eigentilch beim logic analyzer projekt sehr nützlich sein..
mal gucken ;)

73

von Vaillant S. (Gast)


Lesenswert?

mit rs232 klappts soweit ganz gut
Langsam: OK

Hatte nen unsauberen Pegel auf CS
1k pulldown und die welt ist in Ordnung

Zugriff auf die Pinns hab ich mittels
DTR/RTS EscapeCommFunction(hFlie,SET/CLRpin)
Txd EscapeCommFunction(hFlie,SET/CLRBREAK)

Funktioniert tadellos

Proof-Of-Concept Stimmt
soll ne SW zum Laufen bringen und wollte mir das Eval-kit sparen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nachtrag:
giveio und dergleichen sollte auf gar keinen Fall dazu verwendet
werden, direkt mit der seriellen Schnittstelle zu kommunizieren. Das
Problem liegt in den nicht behandelbaren Interrupts, die die
Schnittstelle auslöst und obendrein im Devicetreiber der seriellen
Schnittstelle, der damit nicht glücklich ist, wenn im "unter'm
Arsch" an der Hardware 'rumgefummelt wird.

von Vaillant S. (Gast)


Lesenswert?

unsigned char SPI(unsigned char sndbyt)
{
 unsigned char ret=0;
 DWORD dwCommModemStatus;

 for (unsigned char i=8;i>=1;i--)
 {
  if (sndbyt & ex(i-1))EscapeCommFunction(hFile,CLRDTR);//out
  else EscapeCommFunction(hFile,SETDTR);

  EscapeCommFunction(hFile,CLRRTS);                     //Clk _--
  for (int sl=0;sl<250000;sl++);

  GetCommModemStatus(hFile,&dwCommModemStatus);         //in
  if (!(dwCommModemStatus & MS_DSR_ON)) ret+=ex(i-1);

  EscapeCommFunction(hFile,SETRTS);                     //Clk --_
 }
 return ret;
}

von didi (Gast)


Lesenswert?

ich muss MSP430 programmieren mit dem software IAR/C, ich weiss ehrlich
gesagt nicht wie ich anfane.
kann mir jemand beispiele geben oder kurse dafür wie man die pins
definiert usw

von no_one (Gast)


Lesenswert?

Ich glaub du bist hier im falschen Thread.  ;-)
Der is seit 26.7. quasi tot.

Mach doch am Besten nen neuen auf.

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.