Forum: Mikrocontroller und Digitale Elektronik FX2LP: C2-Start mit RENUM=0


von Frank H. (gowi)


Lesenswert?

Hallo,
ich habe einen Cypress FX2LP. Die Firmware habe ich in einem externem 
EEPROM gespeichert. Beim Starten wird dann ja automatisch das RENUM-Bit 
auf 1 gesetzt und die Firmware muss sich dann um die USB Requests 
kümmern.

Das Technical Reference Manual sagt im Abschnitt 3.6:

"The Default USB Device is established at power-on to set up a USB 
device capable of downloading firmware into the EZ-USB’s RAM. Another 
useful feature of the Default USB Device is that EZ-USB code can be 
written to support the already-configured generic USB device.
Before bringing the CPU out of reset, the EZ-USB automatically enables 
certain endpoints and reports them to the host via descriptors. By 
utilizing the Default USB Device (i.e., by keeping RENUM=0), the 
firmware can, with very little code, perform meaningful USB transfers 
that use these pre-configured endpoints. This accelerates the USB 
learning curve."

Genau dies möchte ich machen. Aber wie kann ich das RENUM-Bit auf 0 
halten? Es wird doch automatisch auf 1 gesetzt??

von Christian R. (supachris)


Lesenswert?

Wozu willst du das machen? Wenn du die Firmware im externen EEPROM hast, 
wozu brauchst du dann die Default-Firmware noch? Irgendwie versteh ich 
den Sinn dahinter nicht. Wenn überhaupt, dann geht das über die 
Spezial-Bits am Anfang des EEPROM Files. Da wo auch das C2 drin 
ist....schau mal in der Doku. Es gibt da ja auch das Bit für Umschalten 
auf 400kHz I2C Speed...dort müsste es dann irgendwo dabei sein.

von Frank H. (gowi)


Lesenswert?

Der Sinn ist, die Funktionen des "generic USB Device" zu nutzen, ohne 
eigene USB-spezielle Funktionen in der Firmware zu implementieren (wie 
es der Ausschnitt aus der Doku sagt).

Du meinst das Configuration Byte? Da scheint es keine entsprechende 
Option zu geben.

von Christian R. (supachris)


Lesenswert?

Um die Option zu nutzen, reicht es aus, einen C0 Load mit den 16 Byte 
für VID/PID usw zu machen. Dann übernimmt die Standard-Config.
hab eben nochma im TRM geschaut, da ist wirklich nur DISCON und 400KHz 
drin im Config-Word. Einen C2 Load machst du doch nur, wenn du die 
Firmware aus dem EEPROM laden willst. Du brauchst einen C0 Load.

von Frank H. (gowi)


Lesenswert?

Ich will ja meine Firmware aus dem EEPROM laden - daher muss es ein 
C2-Start sein. Allerdings soll (wie einem C0-Start) das Generic USB 
Device genutzt werden. Das heißt, die FX2LP-Hardware kümmert sich um 
alle USB-Anfragen, meine Firmware wird aber aus dem EEPROM gelesen.

von Christian R. (supachris)


Lesenswert?

Öhm, ja das erscheint mir zwar recht sinnbefreit, aber da kann ich dir 
leider nicht helfen. Ich bediene die EP aus der Firmware des EEPROMs, 
das ist minimaler Aufwand, weil es ja massig Beispiele gibt, und daher 
hab ich den MischMasch nocht nicht probiert. Außer in diesem Satz findet 
sich auch nirgendwo in der Doku, dass das klappen soll. Du willst also 
eine FW reinladen, die nix mit dem USB macht, sondern irgendwelche 
anderen Funktionen? Das Problem dürfte sein, dass der FX2 bei einem C2 
Load die interne Firmware gar nicht benutzt, also der Load muss ja auch 
abgeschlossen sein, bevor der Host die Kommunikation startet (daher auch 
die 400kHz bei C2 Load). Also kommt man gar nicht dazu, da das Default 
Zeugs zu nutzen.

von Frank H. (gowi)


Lesenswert?

Hab jetzt rausgefunden, wie es funktioniert:
1
USBCS &= ~bmRENUM;
2
EZUSB_Discon(FALSE);

Die erste Zeile setzt das RENUM-Bit auf 0 und mit der zweiten wird eine 
ReEnumeration durchgeführt.

von Christian R. (supachris)


Lesenswert?

Achso, dann enumeriert der zuerst mit den Daten aus der Firmware und 
dann nochmal mit den Standard-Daten? Hmm..naja, wenn´s klappt.

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.