Forum: Mikrocontroller und Digitale Elektronik Datenübertragung: USB <--> cy7c67300


von dj9nmh (Gast)


Lesenswert?

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

von dj9nmh (Gast)


Lesenswert?

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)

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.