www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S128 und USB Problem.


Autor: Manuel Sahm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo;

wie kann man das Bit TXPKTREADY wieder zurücksetzen ?

Das Problem ist folgendes; ich sende Daten zum Device[BULK], diese 
werden angenommen und verarbeitet; nun beginnt meine Firmware zu 
arbeiten. Die Daten liegen zum senden an den PC bereit und sind in den 
EP geschrieben worden, sowie das Flag TXPKTREADY wurde gesetzt. Beim 
nächsten IN token vom Host werden die Daten ach gesendet.

Falls aber nun kein IN Token vom Host kommt (möglicherweise, weil die 
USB Timeout zu Ende ist) sind die Daten im FIFO und das Bit TXPKTREADY 
ist gesetzt.


Nun schickt der Host eine neues Protokoll, was entgegengenommen wird, 
und direkt danach beginnt der HOST mit dem senden von IN Tokens, da er 
auf dieses Protokoll eine Antwort haben will...jetzt bekomme ich aber 
die alten Daten, die noch im FIFO stehen ?!?!?!?!?!?!?



Deshalb, wie kann ich das TXPKTREADY Bit resetten ????

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TXPKTRDY kann man nicht zurücksetzen.

Aus Deinem Text meine ich aber herlauszulesen dass Du versuchst einen 
Bulk-Endpoint bidirektional zu benutzen. Das ist nicht möglich. Nur 
Control-Endpoints sind bidirektional.

Autor: SO ist es (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


das Problem kenn ich. Soweit ich das jetzt noch in Erinnerung habe gibt 
es kein FIFO-Reset o.ä. . Da hilft dir nur ein sauberes Protokoll.


So ist es ...

Autor: Manuel Sahm (ela1983)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt einen BULK endpoint für IN und einen separaten für OUT 
Transfers.....


Das Problem ist; ich kann keine IN Token detektieren, und somit weiß ich 
nie ob der Host welche sendet oder nicht...

Meine EP Fifo ist jedoch gefüllt und "scharf" gemacht (TXPKTREADY" ist 
gesetzt)...wenn ich jetzt eine neues Protokoll empfange (OUT transfer) 
will ich gerne den IN Endpoint resetten, da ansonsten die alten Daten 
beim nächsten IN Token zurückgesendet werden...

Was ist die Lösung ??

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die alten Daten empfangen und im Host verwerfen. Darum musst du dich 
aber selbst kümmern. Im Host z.B. solange Daten abfragen, bis nichts 
mehr zurückkommt.

Autor: Sperrfeuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

warum benutzt du nicht die 3 UARTs vom SAM ? Dann kannst du aus allen 
Rohren feuern bis deinem PC schwarz vor Augen wird.

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal ein Endpoint-Reset (Datenblatt Seite 472).

Ist vielleicht ein Isochronous-Endpoint besser für Dein Vorhaben 
geeignet?

Autor: Sperrfeuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... It also resets the data toggle to DATA0.

Das ist immer sehr spannend beim SAM.

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.