Hallo,
ich habe mir die bulkloop FW für meine Zwecke umgeschrieben und alles
funktioniert super.
Ich habe zwei EPs (EP2 und EP6).
Ich sende nun Befehle an mein USB device lege diesen in EP2 ab.
Wenn EP6 "leer" ist und EP2 "voll", dann wird der Befehl ausgeführt und
in EP6 die dazugehörigen Daten abgelegt.
Sollten ich für solche Befehle ehr einen Control EP verwenden oder kann
ich das ruhig so lassen?
Der unterschied zwischen Control und Bluk Transfer ist ja eigentlich
nur, dass bei jedem Control befehl jeweils der Empfänger und der Sender
diesen quitieren. Beim Bulk-Transfer habe ich ja aber auch den CRC und
das dreimalige wiederholen, somit sind meine Daten ja auch gesichert.
Was würdet ihr mir raten bzw. was findet ihr "schöner" und somit auch
korrekter.
Grüße Tom
Normalerweise nimmt man die Control Endpoints für die Steuerung des USB
Devices selber. Siehe auch Set Feature usw.
Kannst es ruhig so lassen, wir arbeiten auch mit 2 BULK Endpoints für
den Datentransfer zum/vom FPGA.
mh... bei dem Control-Transfer hat mich halt abgeschreckt, dass er die
strucktur hat und dann hab ich mir halt quasi meine eigenen Befehle
gemacht ;)
Das ist jetzt eben ungeschickt ;)
Gibt es den eine andere Begründung außer die Flexibilität die für den
bulk transfer spricht?
Die Paketgröße. Der Control EP hat ja nur 64 Byte, bei NULK gehen 512
Byte. Für Steuerbefehle ohne viel Datenaufkommen ist Control OK, aber
für Datenübertragung ineffizient.
mh... meine Pakete sind eigentlich nie größer als 64 kByte.
Im DevKit ist aber leider kein Beispiel zu einer Übertragung mit
control.
Wenn ich nur ein Dev. mit einem EP erstelle, welcher vom typ Control
ist.
Kann ich mit der API nicht mehr auf das Device zugreifen und es kommt
eine fehler meldung.
Es gibt von Cypress kein Beispiel wie man Befehle an den FX2 schickt
oder?
Weil ich hatte damals eigentlich schon vergeblich gesucht, aber nichts
gefunden und es auch nicht zum laufen bekommen.
Hast du das vll. mal gemacht? Oder hast du ein mal Beispiel gesehen?
Tom
Tom A. schrieb:> Wenn ich nur ein Dev. mit einem EP erstelle, welcher vom typ Control> ist.> Kann ich mit der API nicht mehr auf das Device zugreifen und es kommt> eine fehler meldung.
Klar, weil es nur einen Control EP und zwar EP0 geben kann:
1
Endpoint zero is the only CONTROL endpoint supported by the EZ-USB.
Wenn du also unbedingt einen CONTROL EP benutzen willst, dann nur den
EP0. Alles andere muss BULK oder ISO oder INTERRUPT sein.
Ich frage mich, wieso du unbedingt CONTROL Transfers für deine Daten
machen willst. Steckt da ein bestimmter Sinn dahinter?
Ich habe mir halt auf der µC Seite eine State-Machine aufgebaut, welche
das erste Byte auswertet und dann darauf hin den Befehl (mit oder ohne
Argumente, welche hinter dem Befehl kommen) auswertet und ausführt. Bei
machen Befehlen werden dann Daten zurück gesendet und bei anderen eben
nicht.
Die Daten sind aber mit Sicherheit NIEMALS länger als 64 Byte! Hierbei
dreht es sich um die Ansteuerung von ein paar digital Potis und das
auslesen von Temperatursensoren.
Dadruch das die Daten eben so gering sind hätte ich halt dazu tendiert,
den Control zu verwenden. Außerdem sind es Steuerungen=Control und die
Beschreibung vom Control-Transfer trifft halt mehr zu als BLUK, weil ich
einfach keine großen Datenmengen habe.
Allerdings das ganze jetzt noch nachträglich um zubauen könnte einen
größeren Aufwand geben so wie ich das sehe.
Ist bei JEDEM USB-Device NUR EINEN EP0, welcher vom Typ Control ist?
Ich dachte, es ist so, dass es mindestens einen geben muss und das auch
der EP0 sein muss. Oder ist das spezielle bei Cypress der Fall?
Weil es ist ja schon sinnvoll die Daten/Befehle von mir und die ganze
Numeration zu trennen. Also zwei EP zu verwenden.
Vielen Dank für die Infos.
Tom
Ob es immer nur einen Control Endpoint geben darf, weiß ich grade nicht,
müsste man mal in die Spec schauen.
Mach doch einfach, wie du es denkst und wie es funktioniert. Wir haben
auch über den EP0 noch verschiedene Steuerungs-Funktionen implementiert,
um an den BULK Pipes vorbei was machen zu können.
Ja, ich glaube ich werde es jetzt so lassen. Das irgendwas während dem
BULK-Transfer verloren geht ist ja unwahrscheinlich.
Außerdem habe ich auch einfach nicht mehr die Zeit dafür. Leider wird
meine Argumentation, falls ich dazu gefragt werde halt nicht so gut
sein.
Die einzige Begründung ist halt, dass ich gedacht habe gut. So kritisch
ist es nicht, wenn was verloren geht und das ist ja eh unwahrscheinlich.
Danke für die Infos.
Tom
Ist doch vollkommen korrekt. Control EP ist eigentlich für die
Konfiguration, Enumeration des USB Devices an sich da. Nutzdaten werden
durch die anderen EP übertragen. Und da deine Befehle eindeutig
Nutzdaten sind, sehe ich da keinerlei Schwierigkeiten das zu vertreten.
Verloren geht da nix, jedenfalls haben wir das auch im industriellen
Umfeld bisher nicht geschafft.