Forum: Mikrocontroller und Digitale Elektronik Wer hat Erfahrungen mit Wiz820io und SD-Karte?


von Dominik V. (Gast)


Lesenswert?

Hallo zusammen,
habe mir ein Paar der o.g. Module bestellt und bereite mich gerade mit
dem User Manual 1.0 etwas vor, was mich irritiert ist folgender Ablauf:
1
1. Configure Input/Output direction on SPI Master Device pins. 
2
2. Configure nSCS as ‘High’ on inactive 
3
3. Write target address for transmission on SPDR register (SPI Data Register). 
4
4. Write OP code and data length for transmission on SPDR register. 
5
5. Write desired data for transmission on SPDR register. 
6
6. Configure nSCS as ‘Low’ (data transfer start) 
7
7. Wait for reception complete 
8
8. If all data transmission ends, configure nSCS as ‘High’

Frage 1)
Wie jetzt, erst Daten schicken und dann Chip select? Dann würde das 
Modul ja alles auf dem SPI-Bus mitbekommen und im schlimmsten Fall für 
32772 Bytes nicht mehr ansprechbar sein?
Weiter im Manual:
1
3.2 Read processing 
2
(3.3 Write processing)
3
 
4
The READ processing is entered by driving nSS low, followed by the Address, the 
5
OP code, the Data Length and the Data byte on MOSI. The OP code (OP) is 
6
defined type of the READ OP and WIRTE OP. On OP = 0, the read operation is 
7
selected. Otherwise, On OP = 1, the write operation is selected.

Letzteres klingt viel vernünftiger und ist bei anderen SPI-Modulen ja 
ähnlich, ich darf davon ausgehen, dass es so gemacht wird?

Frage 2)
Wie zuverlässig und gut funktionieren diese Module? Ich habe Sie 
deswegen bestellt weil ich mit der LAN->USART Anbindung nicht über 57,6k 
wiederhol sicher erreiche...

Frage 3)
Welche Methode würdet Ihr wählen um Daten vom Steuerrechner auf der 
SD-Karte am gleichen SPI-Bus abzulegen.
a) Daten mit µC von Wiz820io holen, puffern, CRC prüfen und auf SD-Karte 
ablegen.
b) Daten vom Wiz820io direkt an die SD-Karte schicken, dazu müsste dann 
nach meinen bisherigen Überlegungen der µC eigentlich nur die 
Initialisierung der beiden SPI-Module übernehmen und dann den Takt 
generieren, nachdem mit 74HC126 o.ä. die MISO/MOSI Leitung an der 
SD-Karte gekreuzt wurde - oder? Der µC könnte ja trotzdem für die 
CRC-Prüfung "mitlauschen". Irgendeinen 74HC muss ich für die 
Levelanpassung ja eh auf die Platine bringen. Hat jemand so eine oder 
ähnliche Lösung am Laufen, geht das wohl problemlos?

Gruß Dominik

von Max H. (hartl192)


Lesenswert?

Dominik V. schrieb:
> Frage 1)
> Wie jetzt, erst Daten schicken und dann Chip select?
/CS low --> Daten --> /CS high.

> Irgendeinen 74HC muss ich für die
> Levelanpassung ja eh auf die Platine bringen.
Wozu? Wiz820io und SD-Karte arbeiten mit 3.3V.

Dominik V. schrieb:
> die MISO/MOSI Leitung an der
> SD-Karte gekreuzt wurde
Dann kannst du sie mit dem µC nicht ansprechen, und du musst ja ab und 
zu Befehle von µC an die SD-Karte senden.

von Dominik V. (Gast)


Lesenswert?

Hallo Max

Max H. schrieb:
> Wozu? Wiz820io und SD-Karte arbeiten mit 3.3V.

Ich vergaß den uC zu nennen, ATMega bei 5V, Level high m.E. lt.
Datenblatt 3V, das ist mir zu heikel bei knapp 10MHz SPI

Max H. schrieb:
> Dann kannst du sie mit dem µC nicht ansprechen, und du musst ja ab und
> zu Befehle von µC an die SD-Karte senden.

Ich hatte gedacht erst alle Steuerkommandos an den WIZ und die SD,
hierzu müsste ich auch schon die MOSI-Leitung zwischen beiden umschalten
, da ich ja den CS-Status nicht mehr ändern darf. Dann im Anschluss 
würde ich die MOSI-Leitung bei der SD-Karte belassen, aber die Quelle 
auf den MISO des WIZ umschalten. Danach könnte ich die Daten dann ja mit 
der Hardware-SPI des ATMega vom WIZ in die SD tackten und zusätzlich 
entweder die Daten oder die Rückmeldungen der SD zum µC leiten.
Ein 74HCT126 und/oder 125 (Quad-Bus-Puffer) o.ä. erschien mit hier als 
geeignet, wobei ich die genaue Schaltlogik noch nicht zu Ende gedacht 
habe.
Die Frage, die ich mir stelle ist, ob ich irgendwo einen Denkfehler habe 
oder sich praktische Probleme ergeben?
Sinn der Angelegenheit ist ja klar, der Datendurchsatz bei Lösung b ist 
mindestens doppelt so hoch wie bei a und ich könnte jede Sekunde 
brauchen ;-)

Gruß Dominik

von Max H. (hartl192)


Lesenswert?

Spricht was dagegen den µC mit 3.3V zu betreiben? 5V sind eigentlich so 
gut wie tot und 3.3V sparen den Aufwand mit den Pegelwandlern.

von Dominik V. (Firma: TBV) (d190979v)


Lesenswert?

Max H. schrieb:
> Spricht was dagegen den µC mit 3.3V zu betreiben? 5V sind eigentlich so
> gut wie tot und 3.3V sparen den Aufwand mit den Pegelwandlern.

Bei 3,3 ist die Frequenz zu niedrig und ich müsste zudem die 8 
ausgangssignale auf 5v wandeln, ausgangsseitig habe ich leider keinen 
Einfluss.

von Dominik V. (Firma: TBV) (d190979v)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
mittlerweile ist der Versuchsaufbau zu 30% fertig, ich habe mich 
zunächst mit der SD-Karte beschäftigt. Hat etwas gedauert, da meine 
Karte wohl etwas "speziell" ist. (microSD 1GB von Nokia mal irgendwann 
mitgeliefert). Die Karte spricht entgegen den üblichen Anleitungen auf 
CMD1 an, zudem muss auf bestimmte Responses mehrfach - nicht einfach - 
geprüft werden und stattdessen sind die üblichen Clock-Sequenzen 
zwischen bestimmten Kommandos und Daten scheinbar überflüssig. Das ganze 
läuft zwar jetzt, aber mittlerweile bin ich geneigt die Experimente 
durch Erfahrungsaustausch zu ersetzen, da ich gerne Zeit und 
Schnittstellen übrig behalten würde...
Eckdaten:
1.) Das Projekt läuft auf einem ATMega1284P mit 18,432 Mhz.
2.) Von den 2 USARTS benötige ich einen unbedingt und hätte den 2. gerne 
als Debug-Schnittstelle frei, insbesondere da der Max dann auch voll 
genutzt werden kann. Habe Ihn jedoch derzeit im Master-SPI-Modus für die 
SD-Karte laufen.
3.) Der Wiz820io soll an die "normale" SPI-Schnittstelle an Port B.
4.) Oberste Priorität ist die Übertragung von so vielen Daten wie 
möglich per LAN auf die SD in kürzester Zeit.
5.) Port C ist komplett belegt, I2C scheidet hier als Debug-Ersatz aus 
(Frage am Rande, klappt I2C auch via USART?)

Nun zu meinem Problem: Die OSZI-Screenshots im Anhang zeigen das 
Clock-Siganl (gelb) und einen Index-Pin, der Anzeigt wenn der AVR taktet 
um auf das Ende eines Sektor-Schreibbefehles (512 Byte) zu prüfen. In 
Zahlen schafft der ATMega fast die rechnerisch möglichen 1,2 MB/sec im 
Lesemodus (keine Anlage), im Schreibmodus jedoch nur knapp 0,12 MB/sec 
(die blauen High-Level im Signal sind Wartezeiten bis die Karte den 
jweiligen Sektor fertig geschrieben hat). Auf dem Bus ist also 
theoretisch mehr als genug Platz um in der Zwischenzeit die nächsten 
Daten via LAN abzuholen. Im Moment muss ich jedoch den Signalpegel MISO 
überwachen und SS aktiviert lassen oder gibt es eine Möglichkeit die 
Karte während die noch schreibt abzuwählen und den Bus anders zu nutzen? 
Ein kurze Trennung scheint zumindest bei meiner Karte zu funktionieren, 
aber ist dies reproduzierbar?


Gruß Dominik

: Bearbeitet durch User
von Dominik V. (Firma: TBV) (d190979v)


Angehängte Dateien:

Lesenswert?

Nachtrag:
Für meine Karte scheint die Vermutung zu gelten, ich kann diese abwählen 
und beim Wiederanwählen ist auch das MISO-Signal wieder da, kann jemand 
bestätigen, dass dies dem Standard entspricht?
Nettes Zubrot an der Lösung ist, dass der µC auf der Karte schneller 
speichert wenn er nicht durch unnötige Abfragen belästigt wird.

Gruß Dominik

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.