mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EZ USB Interrupt Probleme


Autor: MarcoH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

wer hat schon mit dem EZ-USB von Cyp... Erfahrungen.
ich habe mir EP4 als INTERUP OUT Enpoint konfiguriert mit 512 double 
Buffer. Weiter habe ich mir eine kleine Console geschrieben die mit der 
Thesycon-API arbeitet. Ich schreibe also nun Daten runter was beliebig 
oft funktioniert. Beende ich die Console und starte sie neu (Firmware 
läuft weiter) geht was beim ersten schreiben schief. Der Schreibbefehl 
klappt und die Daten gehen auch runter (laut Sniffer) nur in der 
Firmware kommt kein EP4inout Interrupt. Erst beim zweiten Schreibbefehl 
kommt der Interrupt wieder. Das kuriose ist, dass dieses Verhalten nur 
Auftritt wenn ich im ersten Consolen-lauf eine ungerade Anzahl an 
Schreibbefehlen gemacht habe. Ich Vermute, dass es irgendwie mit den 
double Buffer zu tun hat, nur der Interrupt muss doch kommen oder?

Wer hat eine Idee und kann mir helfen.

Danke im Voraus

Autor: MarcoH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner eine Idee?

Autor: MarcoH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal eine Ergänzung. Nicht nur der Int, kommt nicht, sondern das 
EP2468STAT Register meldet auch keine neuen Daten

MfG

Autor: Mike J. (emjey)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frag in dem (es gibt nur eins) PSoC Forum:
http://www.psocdeveloper.com/forums/viewforum.php?f=3

Autor: Potter68 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo MarcoH,

Endpunkt-Größen von 512 Bytes sind für HID Full Speed Geräte laut 
Spezifikation nicht zulässig (max 64 Bytes).

Gruß Potter

Autor: MarcoH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Potter,

ich habe ja auch kein HID fullspeed gerät. Ich arbeite mit dem EZ USB im 
Highspeed und habe ein USB_DEVICE_CLASS_VENDOR_SPECIFIC.

Gruß Marco

Autor: Potter68 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo MarcoH,

ich habe mich vertippt. Das muss heissen: Die Puffer-Größe bei 
Interrupt-Transfers ist auf 64 Bytes beschränkt für Full-Speed. Was 
aber, da du High-Speed nutzt, auch nicht das Problem sein kann.

Im Übrigen hatte ich dann sowieso aufgehört zu lesen^^. Mit dem EZ-USB 
habe ich auch noch nicht gearbeitet. Aber das mit dem Double-Buffer 
lässt sich testen, indem Du das Double-Buffering mal ausschaltest.

Der Interrupt kommt nur, wenn Dein Empfangspuffer mit neuen Daten 
gefüllt wurde. D.h., falls beim letzten Auslesen irgendwelche Flags 
nicht richtig zurückgesetzt wurden bzw. Du garnicht gelesen hast, dann 
kommt auch kein Interrupt. Aber: dann erhält Dein Host auch kein ACK 
sondern ein NAK als Antwort auf das Daten-Paket. Was sagt denn Dein 
Sniffer?

Gruß Potter

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die genannten Probleme hängen typischerweise damit zusammen, dass für 
den jeweiligen Endpoint die falsche DATA0/1-Phase gewählt wurde. Es ist 
wichtig, dass nach einer Enumeration und einigen anderen Requests, z.B. 
Set Configuration, der USB-Controller wieder auf DATA0 eingestellt wird. 
Nach einer ungeraden Zahl von Paketen steht er jedoch auf DATA1, wodurch 
er die Pakete des Hosts, die ja einer DATA0-Kennung besitzen, nicht 
erkennt.

Autor: MarcoH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, also der Interrupt wird wieder zurückgesetzt, da ich ja auch 
n-mal lesen kann pro Applikationslauf, nur eben beim zweiten 
Applikationslauf (nach unconfigure und configure Device) nicht mehr. mit 
den Data0 und Data1 könnte fast sein. Nur müsste doch mein Schreibbefehl 
fehlschlagen, oder? Was auch komisch ist, dass beim ersten schreiben 
keine Daten kommen aber beim zweiten Versuch. Auserdem dachte ich immer, 
das Data0, Data1 toggelt nur, wenn mehrer Datenpackete pro Transaktion 
kommen. Da ich aber immer nur paar Byte sende(kleiner FIFO-Size), also 
ein Paket pro Transaktion, endert sich doch Data nicht oder ? Aber ich 
schau mal nach.

 Trotzdem erstmal Danke
Marco Hempel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.