Hallo Forum, ich komme mit einer Anfängerfrage, bin aber um jeden Link für weitere Infos dankbar. In meinem Projekt sollen Vidoesignale von einer speziellen Kamera aufgezeichnet werden. Sie kommen über eine eigene Hardware und werden in dual ported RAM auf einem lokalen Bus angeboten. Auf der anderen Seite sollen sie auf einer SATA SSD gespeichert werden. Alles weitere Processing ist offline. Die Datenrate der Quelle ist 100Hz * 1 MB. Momentan ist vorgesehen, dazwischen ein PowerPC Board zu nutzen. Mir erscheint es aber recht heftig, einen PowerPC in C oder Assembler für so eine einfache Aufgabe zu programmieren. Im Umfeld eines SATA Controllers sollte man doch das geringe Processing unterbringen können, um die Daten abzuholen und blockweise abzuspeichern? Welche einfachen Lösungswege gibt es hier? Vielen Dank Wolfgang R.
Es gibt diverse IDE IP-Cores, wo man Festplatten oder CF-Karten dranhängen kann (zumindest bei Altera). Es gibt auch ein Paar S-ATA zu IDE Converter (Chips) z.B. JM20330 http://www.jmicron.com/Product_JM20330.htm Man schmeiße alles zusammen, umrühren und mit etwas Magie kommt dabei vielleicht etwas Brauchbares raus ;-) Grüße, Kest
Ja Danke, geht in die richtige Richtung. Gruß Wolfgang R.
Ich denke, daß die Hauptaufgabe dieses Projektes nicht darin besteht, die Kamera und die SATA SSD miteinander zu verbinden. Was spricht also dagegen, für diesen Teil des Gesamtprojektes eine solide, einfache, primitive Lösung zu wählen, nämlich das PowerPC Board! Andere Lösungen - speziell FPGA-Lösungen, wie sie in diesem Forum diskutiert werden - erfordern einen erheblich höheren Entwicklungsaufwand (Zeit, Risiko, ...). Im übrigen liegt eine Datenrate von 100 MB / sec durchaus in dem Bereich, in dem man einen PPC einsetzen kann. Bernhard
Ich hab auch ein PPC Evaluierungsboard und beginne gerade mich einzuarbeiten. Wenn es den Durchsatz schafft, ist das auch ok. Hatte nur vorab das Gefühl, der Durchsatz ist kritisch. Werde ich aber auf jeden Fall testen. Gruß Wolfgang R.
Eine SSD garantiert aber nicht unbedingt immer 100 MB/s. Eine Moeglichkeit ware ein spezieller flash controller. Wenn es nicht auf Stromverbrauch/Groessen ankommt, dann waere es vielleicht am einfachsten einen PC/Laptop zum Speichern zu benutzen. Einfach die Kamera mit PCIe anbinden, dann hat man gleich ganz bequem einen 4 oder 8 GB buffer. (falls die SSD mal pause macht oder man kann sogar einfach 2 HDDs benutzen)
Hallo Christian, wachse mit jedem Tag etwas mehr in das Thema rein. In meinem ersten Post war ein kleiner Typo. Es geht genauer um 200Hz * 0,65 MB ;) Damit habe ich dann einen geforderten minimalen Durchsatz von 131 MB/s in Richtung Festplatte(n). Ein paar erste Tests mit standard Linux auf einem PowerPC Board (MPC8377) habe ich gestern gemacht. Zwei Barracuda Drives sind über SATA II angeschlossen. Mit zwei Jobs cat /dev/zero > file komme ich auf 2 * 60 MB/s. Der top zeigt aber 2 * 40% Last für die CPU. Damit ist ein einfaches high Level Programmieren in dieser Umgebung nicht möglich. Embedded PowerPC Boards wg. dem Umfeld sind die erste Wahl. Ich beschäftige mich nun näher mit der Leistungsfähigkeit des Boards weiter low Level. Es muß doch etwas im Umfeld der SATA Controller geben? Hier hatte ich mal die Idee etwas ausführlicher beschrieben. Gruß Wolfgang R. ------------------------ Our information source is a video converter providing frame data within a dual-port-RAM. Three banks of about 1 MB will be available. It will be written round-robin and should finally be stored on an SATA/SSD drive, readable by Linux. All formatting and other stuff could be done offline by the Linux machine. The missing piece in between should shuffle 1h of input data sequentially to the SATA drives. Each bank will be organized by two status cells first and all the rest is raw data 0x000000 WRITE_STATUS 0x000002 READ_STATUS 0x000004 Pixel_1 .... 0xffffff Pixel_ffffff The pseudo code for the driver looks like loop forever if WRITE_STATUS == END close disk exit loop else if WRITE_STATUS == DATA_UNDER_UPDATE || IDLE continue else if WRITE_STATUS == DATA_READY READ_STATUS = READING_DATA shuffle all raw data to SATA disk READ_STATUS = DATA_READ_FINISHED end if end loop
Wenns auf geschwindigkeit ankommt schalte doch einfach mehrere Festplatten als RAID parrallel.
Ich befürchte der Processor/Board mit dem Linux Stack schafft den Durchsatz nicht ... (s.o.) cat /dev/zero > file komme ich auf 2 * 60 MB/s. Der top zeigt aber 2 * 40% Last für die CPU. ... Wenn der top für die CPU 100% anzeigt, wäre ich hochgerechnt bei 130 MB/s output. Ich gehe mal davon aus, dass dieser cat sehr effizient implementiert ist. Meine geschriebenen Tests mit fwrite() waren wesentlich langsamer (~20MB/s). Bin aber erst ganz am Anfang von dem Optimierungsthema in Linux. Gruß Wolfgang R.
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.