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??
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.
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.
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.
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.
Ö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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.