Forum: Mikrocontroller und Digitale Elektronik Cypress FX2 - Bulk EPs oder Control EP


von Tom A. (thomas_a)


Lesenswert?

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

von Tom A. (thomas_a)


Lesenswert?

push ;)

von Christian R. (supachris)


Lesenswert?

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.

von Tom A. (thomas_a)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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.

von Tom A. (thomas_a)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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?

von Tom A. (thomas_a)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Tom A. (thomas_a)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Tom A. (thomas_a)


Lesenswert?

Hi,
das beruhigt mich jetzt aber ungemein :)

Vielen Dank Chris, dann kann ich jetzt ganz beruhigt meine Präsentation 
vorbereiten ;)

Grüße,
Thomas

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
Noch kein Account? Hier anmelden.