Hi @ all Ich erzeuge mit meinem FPGA 2000 mal 12 Bit Daten, die in den Block-Rams zwischengespeichert sind. Alle 2 ms liegen neue Daten an (also wieder 2000 mal 12 Bit)Diese möchte ich über USB an den PC senden. Für die Übertragung werde ich einen Cypress High_Speed USB-Baustein nehmen. Die Daten sollen vom FPGA zum USB-IC nicht seriell, sondern parallel übertragen werden. Meine Fragen zur Umsetzung: 1. Welcher übertragungsmodus ist dafür besonders geignet. (Ich möchte keinen Treiber für den PC schreiben kann ich nicht den Maustreiber dafür mißbrauchen?) 2. Muss ich erst alle Daten in den USB-IC schreiben und dann die Übertragung starten? 3. Muss ich die Übertragung im IC selber programmieren, oder gibt es die schon fertig. 4. Auf was muss ich bei der Umsetzung alles achten? Grüsse Michael
Das wären also 500*2000*12Bit pro Sekunde. also 12MBit/sek netto, dazu kommen vermutlich noch Verwaltungsdaten, d.h. die 12 MBt des USB1.1 reichen nicht aus ?
Auf keinsten. 12Mbit entspricht der Bruttodatenrate bei USB1.1 Full-Speed. Dazu kommt noch das USB-Protokoll Fehlersicherung u.s.w. 1. Übertragungsmodus Bulk-Transfer ist am einfachsten zu implementieren und erzeugt auch locker die Nutzdatenrate die du benötigst. Treiber gibt es als Generic-USB Treiber z.B. Libusb oder vom Hersteller auch als Generic Treiber, mit denen du alles machen kannst um Daten zu schaufeln. 2. Ja so ist es. Die Übertragung wird dann gestartet wenn der PC (Treiber) die Daten anfordert. Vorher sollten sich die Daten schon in dem USB-Controller befinden. Da viele USB-Controller mehrere Puffer-Speicher integriert haben in der die Daten zwischengespeichert werden, kannst du während der Datenübertragung schon die wieder leeren Pufferspeicher mit Daten füllen. Es kann sich also bei geeigneter Implementierung ein kontinuierlicher Datenstrom von deiner Peripherie zum PC ergeben. 3. Je nachdem um welchen USB-IC es sich handelt gibt es welche die nur rein die Physikalische Verbindung mit dem USB herstellen oder USB-Controller mit integriertem Mikrocontroller. Für die zweite Art musst du eine Software für den Controller schreiben, um die USB-Schnittstelle einzustellen, die virtuellen Datenkanäle einrichten und auf die USB-Requests reagieren. Für die erste Variante müßtest du das selbe auf dem FPGA implementieren mittels Zustandsmaschine oder Soft-Prozessor und Schreib und Lesezugriffe auf Register die auf dem USB-IC integriert sind durchführen. Dann gibt es noch USB-IC die schon einen großen Teil des USB-Protokolls implementiert haben wo du nur noch die Descriptoren reinschreiben musst und die Datenkanäle einzurichten hast. Schau dir mal den CY7C68001 von Cypress an. 4. Wähle den richtigen Baustein, der für dich am leichtesten zu handhaben ist. Ich habe für meine Diplomarbeit den CY7C68013A vorgesetzt bekommen, und bin mit dem sehr gut klargekommen. Kann mir vorstellen das die anderen USB-Controller ähnlich leicht zu handhaben sind. Von Cypress gibt es für die USB-Controller hervorragende Development Kits als Software mit Unmengen an Beispielen und hervorragender Dokumentation. Nicht zu vergessen wird der Treiber gleich mitgeliefert und funktioniert sehr gut! Wenn du weitere Fragen hast ruhig stellen. Tobias O.
Oh schon mal vielen Dank für Deine Mühe. An den CY7C68013A hatte ich auch schon gedacht. Die Beispiele die ich gefunden hatte waren alle in C. Ich persönlich komme mit Assmebler besser zurecht. Fragen zum Treiber: 1. Gibt es eine Setup für die automatische Installation? 2. Kann ich den in Labview einbinden? 3. Eignet sich der Treiber auch für den Verkauft des fertigen Produkts oder besitzt der Treiber noch Fehler? 4. Ich würde gerne einen USB-IC nehmen, bei dem das Prgramm schon fertig ist. Ist der CY7C68013A solch ein USB-Controller? 5. Wenn ich die Daten vom FPGA zum CY7C68013A sende (übern parallelen Port) schreibt der USB-Controller die Daten von alleine in eine freie Speicherzelle, oder muss ich die Adresse extern an den IC anlegen? 6. Wie weiß ich ob der Speicher schon voll ist? Könntest Du mir Deine Diplomarbeit per zukommen lassen? Grüsse Michael
#5. Wenn ich die Daten vom FPGA zum CY7C68013A sende (übern parallelen #Port) schreibt der USB-Controller die Daten von alleine in eine freie #Speicherzelle, oder muss ich die Adresse extern an den IC anlegen? Also parallele port meint wohl das Slave Fifo Interface. Du hast 4 fifos, die du über die beiden fifoadr leitungen auswählst. 3 signale geben dir den Füllstand an (Full,empty,user defined threshold). Da fifos musst du keine speicheradresse extra angegen. Die Fifos sind hinsichtlich Größe/Richtung/Endpunkt konfigurierbar. (Wir hätten doch hier vor ein paar Monaten eine thread über Cy7 an FPGA, schau mal dort nach.
> Ich persönlich komme mit Assmebler besser zurecht. C ist doch leichter zu lernen und einfacher zu debuggen 1. Der Treiber wird mit einer .inf Datei und mit einer sys Datei ausgeliefert. Wenn das USB-Gerät mit dem PC verbunden wird fragt Windows automatisch nach einem Treiber der sich dann meinetwegen auf der Installations-CD befindet. Der Treiber wird dann automatisch installiert. Die .inf Datei musst du an die Vendor-ID und die Produkt-ID die du in der Software des USB-Controllers angegeben hast anpassen. Den USB-Treiber und die .inf kannst du nach belieben umbenennen so das nicht mehr erkennbar ist, dass der Treiber von Cypress stammt. Den Treiber darfst du auch in kommerziellen Produkten verwenden wenn du einen USB-Controller von Cypress einsetzt. 2. Mit Labview habe ich noch nicht gearbeitet deshalb erkundige dich lieber noch mal bei einem der mit Labview schon gearbeitet hat, und wie sich C/C++ Bibliotheken bzw. Funktionen einbinden lassen. 3. Der Treiber arbeitet einwandfrei und hat meineswissens keine Fehler. 3.1 Der Nachteil des Treibers ist, dass er nicht besonders gut auf Geschwindigkeit optimiert ist. Sprich 40MByte/s schafft der nicht, aber 15MByte/s ist locker drin. 3.2 Isochronen Transfer konnte ich mit dem Treiber leider nicht realisieren, dass könnte aber auch an der Software des USB-Controllers gelegen haben, aber wenn du Bulk-Transfer einsetzt ist das ja kein Problem 4. Der CY7C68013A/LP besitzt zwar schon eine default-Firmware die als Bootloader benutzt werden kann, aber eine eigene Software müsstest du dir schon noch selbst schreiben. Dafür läßt sich der Controller sehr flexibel einsetzen. Wenn du keine eigene Firmware schreiben willst schau dir mal den CY7C68001 an. Die Konfiguration des USB-Controllers müßtest du dann vom FPGA aus erledigen. Ich kann nicht beurteilen wie gut du in VHDL oder Verilog bist, oder ob das einfacher ist als eine mitgeliefertes Beispiel-Firmware von Cypress anzupassen, zumal diese sehr gut sind und funktionieren. Ich habe damals nur eine einzige Funktion anpassen müssen und die Deskriptoren modifiziert. Die Entscheidung bleibt aber letztendlich dir überlassen. 5. Die Daten werden ähnlich wie FIFO's in den USB-Controller geschrieben. Wenn ein FIFO voll ist, wandert der zur USB-Schnittstelle des Controllers und kann dann vom PC ausgelesen werden. Also eine extra Adresse brauchst du dafür nicht anzugeben. 6. Flags teilen dir den Zustand der FIFO's mit. >Könntest Du mir Deine Diplomarbeit per zukommen lassen? Kein Problem, schicke mir deine E-Mail Adresse und ich lasse dir die zukommmen. Ist das was du machst eine Diplomarbeit, Projektarbeit oder in welchem Rahmen sollst du dieses Projekt verwirklicht werden ? MFG Tobias O.
Diplomarbeit habe ich seit 6 Monaten hinter mir. Bis jetzt ist es noch privates Interesse, deshalb kann ich auch nur ab und zu Zeit investieren. joedoe1979@lycos.de Grüsse Michael
@tobias also das mit dem cypress controller hört sich ja echt gut an. mich täte es auch interessieren größere datenmengen vom fpga/uc zum pc bzw. umgekehrt zu schaufeln ohne den ftdi nutzen zu müssen (zumal der ja nur bis 115kBaud geht). hast du infos darüber wo man diese cypress-tierchen als privatperson ordern kann ? gibt es noch weiterführende infos ? (speziell apps mit schaltplan usw, damit ich mir einen überblick über den nötigen sw/hw aufwand machen kann) ich würde dann auch den usb-treiber nehmen den cypress anbietet (da mich bis jetzt bei usb immer die treiber-programmierung abgeschreckt hat) gruß rene
Alle meine Informationen stammen aus den Datenblättern und Quellen die in dem Developerkit von Cypress mitgeliefert werden. Einfach mal auf http://www.cypress.com gehen und im "Suchen" Feld CY3684 eingeben. In dem Developerkit wird alles mitgeliefert (Software,Treiber,C-Compiler, Schaltpläne,Tools,....) die für eigene Entwicklungen notwendig sind. Mehr ist wirklich nicht notwendig und es ist mehr als irgend ein anderer Hersteller an Support für seine Produkte anbietet. Es gibt außerdem diverse Webseiten mit Projekten die von anderen Personen mit diesen Tierchen verwirklicht wurden inklusive den Schaltplänen. Die einzige mir bekannte Quelle für diese Tierchen ist Segor. Da diese Käfer aber sehr verbreitet sind gibt es sicher noch andere Bezugsquellen. Als generic-Treiber läßt sich außer dem mitgelieferten Treiber auch der http://libusb.sourceforge.net/ verwenden, mit dem sich von der Performanceseite her bessere Ergebnisse erzielen lassen (mein Rekord 29MByte/s) . Oder aber Generic-Treiber die von anderen Herstellern für ihre USB-Controller angeboten werden. MFG Tobias O.
hallo tobias, erstmal danke für die infos. habe auch schonmal etwas gesucht und bin bei csd-electronics fündig geworden. die haben den cy7c64613 da. also 29mb/sek ist schon verdammt viel. also das reicht mehr als genug. ich hatte daran gedacht audio-daten (evtl. mehrkanal) damit von meinem fpga zum pc und umgekehrt schaufeln zu können. aber bei soviel brandbeite lässt sich sicherlich auch ein logic-analyser bzw. speicher-scope damit realisieren. könnte interessant werden. eine frage habe ich noch. und zwar kann man die starter-kits von cypress auch als privat-person direkt bei cypress bestellen oder gibt es einen privat-person-freundlichen distributor der die kits vertreibt ? gruß rene
keine Ahnung, ich habe kein Starter-Kit benötigt. Allerding für 495 US$ sollte es doch möglich sein, sich die Teile selber zu beschaffen und sich eine Platine nach den Herstellerschaltplänen von einer Firma als Einzelanfertigung herstellen zu lassen. Ich denke bei den Preisen wird wohl Cypress die Teile auch an Privatpersonen verkaufen (mit sattem Gewinn). Der CY3684 ist ein full-speed Device, mit dem wirst du im bestenfalls knapp unter 1MB/sec erreichen. (Hände weg) Alle Teile die von Cypress als USB-FX Device bezeichnet werden, sind nur full-speed fähig. Nur die USB-FX2 Controller sind die richtig schnellen. >- Certified complient with USB Specifications 1.1 und 2.0 (full-speed >device) gruß Tobias
Schon mal vielen Dank für die ganzen Tips. Nachdem ich alles durchgelesen habe, (dauert immer eine Zeit, denn nach Feierabend ist man ganz schön fertig :-) ) sind einige Fragen aufgekommen. Aber zuerst ein paar Worte zu meine Konfiguration: 1. Ich werde den USB-IC im Slavemodus betreiben. Zudem wird die Datenübertragung durch einen externen Takt (erzeugt vom FPGA) gesteuert. Die Datenbusbreite wird 16 Bit getragen. Momentan möchte ich nur Daten vom FPGA zum PC übertragen, deshalb setze ich die ENDPIONTS alle auf IN. Ich möchte Datenpakete übertragen die 4096Bytes groß sind. Falls alle Daten übertragen wurden, aber das Datenpaket noch nicht voll ist, möchte ich durch "Pktend" die Übertragung starten Nun zu meinen Fragen: 1. Wenn ich das Bit "Wordwide" auf "1" setze dann ist der Datenbus auf 16Bit konfiguriert. Muss ich auch die Endpoints auf 16Bit Datenbreite umstellen? 2. Wenn ich einen externen Takt vorgebe muss der zwischen 5MHz und 48Mhz sein. Verändere ich dadurch auch den Takt mit dem der IC arbeitet (wird ja durch einen speraten Quarz angesteuert)? 3. Wie schaffe ich es das ein Datenpaket 4096Bit groß ist. Hängt das mit der Größe eines Endpoints zusammen? Habe gelesen, das EP2 512 oder 1024Byte groß sein kann. Dies sind aber keine 4096Byte. Wie kommt man auf diese 4096Byte? 4.Was soll die Angabe der Endpointpufferung, die für einige Endpoints 2x,3x,4x sein kann? 5.Wenn ich einen Endpoint vollgeschrieben habe und weitere Daten zu Übertragung habe, dann muss ich auf einen anderen Endpoint wechseln, indem ich mit dem FPGA eine andere Enpointadresse anlege.(Lange Rede kurzer Sinn) Wie starte ich die Übertragung (USB-IC soll Daten an PC senden)? Muss ich dazu "Pktend" setzen? 6. Wenn ich den an den USB-Port einstecke, dann werden zuerst per "Control" Transfer Informationen ausgetauscht. Stehen diese im sogenannten IC-Firware? 7. Stehen in der Firmware auch die oben erwähnten Konfigurationen z.B. die der Enpoints oder müssen diese im Hauptprogramm angegeben werden? Das waren erst mal die Fragen zum USB-IC. Ich habe mir mal die Software "KKeil uVision2" von www.cypress.com gesaugt und istalliert. Zudem habe ich noch die beiden Treiberdatein "***.sys" und "***.inf" heruntergeladen. Wie ich dise installiere weiß ich schon (muss nur noch auf meine Hardware warten) Habe auf der Cypresshomepage ein Muster-USB-IC angefordet und veruche es auf einer Lochleiterplatte zu löten (wird schwierig aber ist nicht unlösbar). Nachdem ich alles installiert habe, schaute ich mir zuerst die Beispiel von Keil an. Dort habe ich keine Informationen über die Konfiguration gefunden. 8. Wie gehe ich denn am besten vor wenn ich ein Programm für die Datenübertragung schreibe? 9. Hast Du vielleicht ein kleine Testprogramm, dass die Daten, die von der USB-Schnittstelle empfangen werden aussliest? Ich weiß das es sehr viele Fragen sind und das es eine menge Arbeit macht diese zu beantworten. Deshalb möchte ich mich schon mal für die bis jetzt zur Verfügung gestellten Inforamtionen bedanken. Ich werde mich noch weiter belesen. Vielleicht schaffe ich es ja mal Viele Grüsse Michael
#3. Wie schaffe ich es das ein Datenpaket 4096Bit groß ist. Hängt das #mit der Größe eines Endpoints zusammen? Habe gelesen, das EP2 512 oder #1024Byte groß sein kann. Dies sind aber keine 4096Byte. Wie kommt man #auf diese 4096Byte? z.B. senden zum USB: -testen ob EP-Fifo leer ist -> nein EP deselektieren (CS oder FA wechseln) -Daten in Fifo reinstopfen bis diese voll (entweder FullFlag testen oder daten mitzählen), also i.d.R 512 byte - oberen beide Punkte wiederholen bis 4096Byte transferiert, jetzt PKTEND für diese Fifo aktivieren -> fertig. Hinweis PKTEND wird nicht angenohmen wenn FIFO voll ist. #6. Wenn ich den an den USB-Port einstecke, dann werden zuerst per #"Control" Transfer Informationen ausgetauscht. Stehen diese im #sogenannten IC-Firware? Du meinst sicherlich die Konfiguration per EP0, also das anmelden am usb-Host das macht der Cy-IC für dich, da brauchst du nix schreiben. #9. Hast Du vielleicht ein kleine Testprogramm, dass die Daten, die von #der USB-Schnittstelle empfangen werden aussliest? Schau mal bei: http://www.thesycon.de/ Die haben demos für ihre Kauf-Software. Damit kannst du Daten und Konfiguration eines Cycpress USB Gerätes auslesen.
Hi, ich habe nur einen Kommentar zu der Aussage von Tobias O., dass das Evaluation-Board CY3684 kein USB2.0 High-Speed könne. Zumindest auf der Cypress-Seite wird dies Board als High-Speed beworben. Es trägt auch die von dir erwähnte FX2 bezeichnung, die nach deinen Aussagen ebenfalls für High-Speed steht. Somit sollte das Board sehr wohl für Michaels Anforderungen geeignet sein (falls er noch dabei ist). Viele Grüße Hendrik
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.