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
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.
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
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.
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
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