Datenübertragung: USB <--> cy7c67300

Gast #945715
Hallo zusammen,

seit kurzem befasse ich mich mit dem oben genannten µC und bin nun auf 
ein Problem gestoßen, bei welchem ich nicht wirklich weiter komme. Ich 
versuche zunächst einmal den Fehler zu beschreiben und danach zu sagen, 
was der source code macht.

Ich empfange seriell daten über die HSS, des Controllers. Diese kommen 
alle korrekt an. Nun schicke ich diese in 64KB Blöcken weiter an den PC. 
Der PC liest mittels polling die Daten des µC. Je nachdem wie kurz die 
zykluszeit ist, sind die übertragenen Daten mehr oder weniger 
Fehlerhaft. Es fehlen entweder Zeichen oder es kommen welche doppelt.

Und nun versuche ich nochmal die wichtigsten punkte meines quellcodes in 
worten zu fassen. Auf dem µC läuft eine IDLE-Schleife. Pro Zyklus lese 
ich die Daten über den Endpoint 1 aus und sende über Endpoint 2. Das 
Tatsächliche Senden geschieht dann letztlich über ein Interrupt, welches 
über eine C-Funktion des Frameworks zur Verfügung gestellt wird. Hierbei 
übergebe ich mittels einer Struktur unter anderem, die Pufferlänge, 
einen Buffer auf den Buffer und ich übergebe eine Handler-Routine, 
welche aufgerufen wird, wenn die Daten am PC ausgelesen wurden. Beim 
Debuggen stellte sich heraus, dass sowohl vor dem schreiben auf EP2, als 
auch nach dem Lesen im Buffer des µC immer die richtigen Daten standen. 
Es fiel aber auf, dass nach einem fehlerhaftem Lesen, der µC nicht mehr 
in die Handler-Routine sprang.

Nun meine generellen Überlegungen zu dem Problem: Ich benutze den 
Bulktransfer bei full-speed. das müsste bedeuten ich müsste eine 
Übertragungsgeschwindigkeit von 12 Mbit/s realisieren können. 
Zykluszeiten beim Polling waren bisher so 100-1000 ms. Pro Lesevorgang 
werden immer 64KByte übertragen. Eigentlich müsste das ja ohne Probleme 
machbar sein. Daher denke ich, dass ich evtl die SIE1 (USB-Schnittstelle 
für Kommunikation zum PC) nicht richtig konfiguriert habe oder sonst 
irgend ein generelles Problem besteht.

Falls es nötig ist mein Problem an einem bestimmten Punkt detailierter 
zu beschreiben, lasst es mich wissen. Oder evtl. kann mir jemand 
allgemeine Tips zur Vorgehensweise bei der Fehlersuche zur 
µC-Programmierung geben. Eigentlich wäre ich für jede Form der Hilfe 
dankbar, da ich bisher noch sehr Wenig Erfahrung auf diesem Gebiet 
gesammelt habe und dies mein erster Controller ist :D

Danke schonmal für Antworten,

Stefan
Gast
Habe leider keine Bearbeiten-Funktion gefunden, deshalb jetzt noch ein 
zweiter Post. Kurz noch die Initialisierung meiner USB-Schnittstelle:

- Update der Bios Deskriptor Pointer
- Initialisierung Endpoint Control Register (EP0, EP1, EP2)
- USB EP (EP0, EP1 und EP2) Status Register Initialisierung
- Initialisierung EP1 Count Result Register (64KByte pro Block)
- SIE1 initialisieren (Full-Speed)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.