Hallo Experten, haben Probleme auf eine CF Card (Tran..., 16GB, 400x)Daten mit 10MB/s mittels FPGA zu schreiben. Bisher werden ca. 4 MB/s erreicht. Die CF Card wird im Memory Mode mit 8 bit Datenbus betrieben. Eine Erweiterung auf einen 16 bit Datenbus wird vermutlich auch nicht die gewünsche Geschwindigkeit bringen. Wenn die Zykluszeiten im IDE Mode betrachtet werden, scheint es auch nicht schneller zu gehen. Die Karte ist mit 60 MB/s read und 30 MB/s write spezifiziert. Am PC wird eine 100 MB große Datei in 6 s geschrieben, d.h. diese genannte CF Card wird mit ca. 16 MB/s beschreiben. Wo liegt der Fehler, kann jemand helfen? Danke hric
@ hric (Gast) >haben Probleme auf eine CF Card (Tran..., 16GB, 400x)Daten mit 10MB/s >mittels FPGA zu schreiben. Klingt nicht zu schwierig. >Bisher werden ca. 4 MB/s erreicht. Hmm. Mal gemessen, wie lange es dauert, 1 Byte übertragn 1 Block a 512 Byte zu Übertragen 2048 Blöck = 1 MiB zu Übertragen? Ich wette, dort sind zeitliche Lücken, was darauf schließen lässt, dass die FAT-Adressierung oder änhnliches zu langsam ist. > Die CF >Card wird im Memory Mode mit 8 bit Datenbus betrieben. Eine Erweiterung >auf einen 16 bit Datenbus wird vermutlich auch nicht die gewünsche >Geschwindigkeit bringen. Ach so? Also sind 16 Bit sinnlos? Warum wurden sie dann erfunden und eingebaut? Leute gibts. > Wenn die Zykluszeiten im IDE Mode betrachtet >werden, scheint es auch nicht schneller zu gehen. >Die Karte ist mit 60 MB/s read und 30 MB/s write spezifiziert. >Am PC wird eine 100 MB große Datei in 6 s geschrieben, d.h. diese >genannte CF Card wird mit ca. 16 MB/s beschreiben. Immer noch knapp Faktor 2 langsamer als in der Spec, aber viermal schneller als dein Schreibzugriff. Wollen wir wetten, dass der PC mit 16 Bit arbeitet? >Wo liegt der Fehler, kann jemand helfen? Lies mal was über Netiquette.
Hast Du schon mal was von den verschiedenen IDE-Übertragungsmodi wie PIO0-PIO4, MWDMA oder UDMA2-UDMA6 gehört? Nur mit den UDMA-Modi erreichst Du die volle Übertragungsgeschwindigkeit. Näheres liest Du unter http://www.t13.org/ nach. fchk
Hallo Frank Brunner und Falk K. danke erstmal. Habe mal einen Oszibild angehängt. Strahl 1 stellt das READY Signal und Strahl 2 das WE(WriteEnable Signal) dar. Das ca. 56µs lange Paket ist der Schreibvorgang für einen 512 byte Sektor in 8 byte Datenbreite. Das schmale Paket nach ca. 16 µs ist der Schreibvorgang für die Taskregister (RegSecCount, RegLBA_low, ..._mid, ...high, RegHead, RegCommand). Hier ist nur der Betrieb für einen Sektor schreiben, danach neue LBA Adresse einstellen dargestellt. Getaktet wird mit 80 MHz und realisiert wurde folgendes: TaskRegister schreiben: Adresse setzen 3 Takte, danach für 13 Takte WE auf low und gleichzeitig Daten anlegen, für weitere 3 Takte Daten halten -->237,5 ns Zeit für ein Schreibvorgang je Register MemoryWrite: WE auf low und Daten anlegen für 5 Takte, 1 Takt Daten noch halten ---> 75 ns für ein Byte (dürften nur 38,4 µs statt 56 µs sein ?) Die vorstehenden Zeiten sind gemäß CF Card Spezifikation realisiert und hoffentlich ok. Kann mir die relativ langen Pausen, in denen READY low ist, zwischen Ende Sektorwrite bis Taskregisterwrite und danach wieder bis Beginn Sektorwrite nicht erklären. Im Oszibild sieht man eine zusätzliche Pause, die alle 54 ms für ca. 1,3 ms anfällt leider nicht. Sind jetzt dabei zu testen welche Geschwindigkeitssteigerung durch vorhergehendes Sektorlöschen (Command c0h) und Write Sectors w/o erase (Command 38h) mit RegSecCount >1 erreichbar ist. Der Schreibvorgang für einen Sektor wird sich bei 16 bit Datenbreite hoffentlich halbieren lassen, dazu muss aber erst mal die hardware geändert werden. @ Frank K. Ist eine reine private Nutzung, so dass ich die Gebühren nicht aufbringen kann. gruß hric
@ hric (Gast) >Getaktet wird mit 80 MHz und realisiert wurde folgendes: >TaskRegister schreiben: Adresse setzen 3 Takte, danach für 13 Takte WE >auf low und gleichzeitig Daten anlegen, für weitere 3 Takte Daten halten >-->237,5 ns Zeit für ein Schreibvorgang je Register Klingt OK. >MemoryWrite: WE auf low und Daten anlegen für 5 Takte, 1 Takt Daten noch >halten ---> 75 ns für ein Byte (dürften nur 38,4 µs statt 56 µs sein ?) Klingt auch OK, aber das sind nur 8 Bit. Macht bis zu 13,3MiB/s >Kann mir die relativ langen Pausen, in denen READY low ist, zwischen >Ende Sektorwrite bis Taskregisterwrite und danach wieder bis Beginn >Sektorwrite nicht erklären. Wer macht denn die High Level Steuerung? Eine State Machine im FPGA, ein Softcore oder ein "echter" Prozessor, der über den FPGA auf den CF zugreift? Dort muss man suchen. >Der Schreibvorgang für einen Sektor wird sich bei 16 bit Datenbreite >hoffentlich halbieren lassen, dazu muss aber erst mal die hardware >geändert werden. Erstmal müssen die Gedenkpausen weg. Mach das erstmal mit 8 Bit schnell mit minimalen Lücken. >Ist eine reine private Nutzung, so dass ich die Gebühren nicht >aufbringen kann. Infos gibt es auch an anderen Stellen im Netz, man braucht nicht die offizielle Spec.
hric schrieb: > @ Frank K. > Ist eine reine private Nutzung, so dass ich die Gebühren nicht > aufbringen kann. Lies das hier http://www.t10.org/t13/project/d1321r3-ATA-ATAPI-5.pdf Das ist eine alte Version, aber die sollte fürs erste reichen. Da schaust Du Dir das UltraDMA Feature Set an. Interessant sind auch die Teile, wo es um die für UltraDMA erforderliche Serienterminierung und Transceiver etc geht. Wie gesagt: ohne UltraDMA erreichst Du nicht die volle Geschwindigkeit. Deine CF-Karte sollte mindestens UDMA2 können. Was sie tatsächlich kann, sagt sie Dir im IDENTIFY DEVICE Command. Während der UDMA-Transfers haben die IDE-Signale andere Bedeutungen als in den PIO-Modi. Wie gesagt, dieses PDF sollte das Thema erschöpfend behandeln. fchk
@ Falk Brunner danke nochmal für Deine Hilfe. Die komplette Steuerung macht nur der FPGA. Das READY Signal kommt von der CF Card und der FPGA wartet mit seinen Aktivitäten, bis das Signal high ist. So vermute ich, dass die "Gedenkpausen" durch die CF Card begründet sind, aber habe bisher noch keine Erklärung dafür gefunden. D.h. Spezifikation der Karte zum wiederholten Male lesen und weitersuchen. Gruß hric
@ Frank K. Danke für den link. Mache mich sofort ran. Gruß hric
hric schrieb: > vermute ich, dass die "Gedenkpausen" durch die CF Card begründet sind Hast du ein Oszi? Damit könnte man aus Vermutung Gewissheit werden lassen. Und: probier mal eine andere Karte mit einem anderen Controller und anderer Software...
@ Lothar Miller (lkmiller) (Moderator) Benutzerseite >Hast du ein Oszi? Damit könnte man aus Vermutung Gewissheit werden >lassen. Sieht wohl so aus. > Und: probier mal eine andere Karte mit einem anderen Controller > und anderer Software... Hat er, am PC.
@ Frank K. Der link ist sehr hilfreich. Habe natürlich viel zu lesen, immerhin sind es ca. 400 Seiten, sobald ich glaube alles Wichtige gefunden und verstanden zu haben, werde ich mich hier nochmals melden. Entweder mit Vollzug (hoffentlich) oder weitergehenden Fragen. hric
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.