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