non-volatile memory ab 100MB und schnell
Hallo,
ich bin für einen Datenlogger auf der Suche nach einem nicht flüchtigen Speicher, so um die 100MB aufwärts.
Wichtig wäre mir dabei, dass ich den Speicher sehr schnell mit einem AVR (AT90USB1287) beschreiben und lesen kann.
Ich habe schon Experimente mit einer MicroSD-Karte mit ISP-Anbindung gemacht. Als Quarz für den AVR wurden 8MHz eingesetzt. Mehr geht leider laut Datenblatt nicht, da die Versorgungsspannung 3,3V beträgt. (Wegen komptibilität zur SD-Karte und noch anderen Bauteilen)
Die Schreibleistung ist dabei gerade so ausreichend, aber nur mit sehr viel Optimierung. Aber die Lese-Leistung ist einfach zu dürftig.
Beim AVR sind fast keine IO's genutzt, deshalb habe ich mir überlegt die Karte irgenwie parallel mithilfe von Schieberegistern anzubinden, die dann über eine extra (und höhere) Taktquelle getaktet werden, um eine hohe Zugriffsgeschwindigkeit, bei möglichst geringem Software- und Warte-Aufwand im AVR zu realisieren. Aber irgendwie kommt mir das alles viel zu kompliziert vor.
Gibt es vielleicht einen nicht flüchtigen Speicher in der Größenordnung 100MB, der auch parallelen Zugriff erlaubt? SMD löten ist überhaupt kein Problem, den AT90USB1287 habe ich auch geschafft. :-)
Viele Grüße
Andreas
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mal angefangen das Thema SD-Karten-Ansteuerung über Schiebe-Register durchzudenken und muss sagen, dass es für mich sehr interessant ist. Deshalb möchte ich versuchen das umzusetzen. Ich habe mir dazu folgende Schaltung überlegt:
Anhang 18862
Hier meine Gedanken dazu, wie das ganze funktionieren soll:
Zur Initialsierung wird bei A4 an Pin S0 / S1 der Modus parallels laden eingestellt und mit einem Clock-Impuls von A1:PE4 der Wert binär 1000 ins Schieberegister geladen. Dann wird der Modus an S0 / S1 von A4 auf schieben umgestellt.
Jetzt wird A1:PE1 auf high gelegt, und mit 4 Clock-Impulsen von A1:PE4 ein Clock für das Schieberegister A6 erzeugt, und dieses so mit dem Wert binär 10000000 gefüllt.
A1:PE1 geht wieder auf low. Die Initialisierung ist damit abgeschlossen.
Das Schieberegister A4 erzeugt den Takt für einen Zyklus, der wie folgt aussieht:
Zuerst wird das Schieberegister A3 getaktet, damit der Wert an MOSI für die SD-Karte passt. Dann wird die SD-Karte getaktet, um das Bit an MOSI zu übernehmen und an MISO ein neues bereitszustellen. Dann wird A2: getaktet, um dieses Bit zu übernehmen. Als letzten Schritt wird A6 weiter geschoben. Dieses Register zählt dann die 8 zu übertragenden Bits.
A7:A schaltet den Takt frei für die Übertragung frei. Dieses Gater wird über das Flip-Flop A8:1 freigegeben. Eine 1 im Flip-Flop schaltet den Takt frei.
Die Übertragung eines Byte wird mithilfe eines Clock-Impulses an A1:PE5 gestartet. Durch diesen Impuls werden beide Flip-Flops in A8 auf 1 gesetzt. Die Freigabe des Taktes in A8:1 ist dann so lange aktiv, bis das letzte Bit im Schieberegister A6 erreicht ist. Mit diesem Bit wird A8:1 per Reset zurückgesetzt.
Die 1 im Flip-Flop A8:2 schaltet das MOSI-Schieberegister A3 auf paralleles laden, um das Byte vom AVR beim ersten Clock im Zyklus zu übernehmen. Dadurch steht auch gleich das erste Bit an MOSI der SD-Karte bereit. Im Zweiten "Zustand" des Zyklus wird das Flip-Flop A8:2 wieder durch einen Reset gelöscht, wodurch das MOSI-Schieberegister A3 auf schieben gestellt wird, um bei den nächsten Zyklus-Durchläufen die anderen Bits an MOSI durchzusschieben.
Nun läuft der Zyklus 8x durch, bis alle Bits ind und aus der SD-Karte geschoben wurden.
Durch löschen der Takt-Freigabe in A8:1 wird dem AVR über A1:PE6 signalisiert, dass die Übertragung abgeschlossen ist und das MISO-Byte der SD-Karte vom Schieberegister A2 einlesen werden kann.
Wer kann das vielleicht auch mal durchdenken. Bei folgenden Fragen bin ich mir noch unschlüssig bin:
1) kann das Ganze grundsätzlich so funktionieren?
2) Wie schnell kann der Takt maximal werden, was vertragen die Logik-Bausteine, die ich ausgesucht habe? Ich werde leider aus den Werten in den Datenblättern nicht ganz schlau, was maximal möglich ist. Die Versorgungsspannung soll 3,3V betragen.
3) ist das Schieberegister A6 nach einem Byte wieder im richtigen Anfangs-Status für das nächste Byte?
4) wird die Rückstellung der Flip-Flops mit den Transistoren BC847 so funktionieren, oder sind diese eventuell zu träge? Anonsten müsste ich hier wohl noch einen IC mit 2 NOT-Gattern benutzten.
5) wie erzeuge ich den Takt für das Ganze am besten? Soweit ich mich erinnere, muss eine SD-Karte erst mal mit einem langsamen Takt initialisiert werden, und dann kann man schneller werden. Theoretisch kann ich den Initilisierungs-Takt per A1:PE4 erzeugen, aber ich würde gerne trotzdem noch verschiede Geschwindigkeiten nutzen können, da ich nie weiß welche Karte eingesetzt wird. Die Schaltung sollte dann versuchen die maximal mögliche Geschwindigkeit der KArte herauszufinden und diese dann nutzen.
6) Eine Idee von mir zur Takterzeuzung wäre der Quarz des AVR. Ich betreibe den AT90USB1287 an 3,3V. Die maximal mögliche Taktfrequenz laut Datenblatt beträgt bei dieser Spannung 8MHz. Kann ich eventuell einen 64MHz-Quarz einsetzen und im AVR dann intern via Fuse um den Faktor 8 runterteilen? Wird das so funktionieren? Da der AVR im TQFP64-Gehäuse ist, ist Programmierung nur nach einlöten via ISP möglich. Wie wäre dass mit so einem Quarz beim ersten flashen. Bekomme ich hier eventuell Probleme? Und wie "zapfe" ich dann das 64MHz-Signal an, um es für die Schaltung oben zu nutzen?
Viele Grüße
Andreas