Hallo, Ich habe mir ein kleines Board mit CY7C68013A drauf gebaut. Wie es aussieht funktioniert es auch (wird im Gerätemanager erkannt). Jetzt versuche ich einen Einstieg in die Programmierung zu finden, was sich leider als sehr kompliziert erweist. Etwas zu meinen Vorkenntnissen: Ich habe ein wenig Erfahrung im programmieren von PICs. Mit USB hatte ich schon mal über ein FTDI Chip zu tun. Unter Windows habe ich etwas Erfahrung mit Visual Basic Programmierung, habe aber auch mal ein klein wenig in C gemacht. Mich da weiter zu vertiefen wäre sicher kein Problem. Nun zu meinen Fragen zum FX2: 1) Kennt jemand ein Tutorial, das wirklich am Anfang anfängt? Am besten wäre es, wenn am Anfang mal festgelegt ist welche Compiler verwendet werden, und welche Sourcen. Also zuerst mal ein wirklich kleines Projekt, z.b. LEDs am Port blinken lassen. Dann in Schritt 2 vielleicht mal ein paar Daten über USB übertragen. Jedenfalls nicht direkt so ein 200 Zeilen Beispiel-Programm, bei dem man "einfach mal was abgucken kann". Ich finde da verliert man einfach nur den Überblick. 2) Ich habe mal irgendwo gelesen, dass es auf der Cypress-Seite einige Tutorials gibt. Aber wo? Ich finde die Seite leider äußerst unübersichtlich. Ob ich jetzt mit SDCC oder Keil Programmiere ist mir eigentlich egal. Alles was ich suche ist ein Startpunkt der einfach mal funktioniert. 3) An verschiedenen stellen habe ich was von unterschiedlichen Treibern für den EZ-USB gelesen. Kann man nicht einfach die Treiber von Cypress nehmen? oder habe ich da was falsch verstanden und von Cypress gibt es gar keine Treiber? Falls doch: Welche Vorteile bieten die Treiber von Drittherstellern? 4) Ich habe auch mal gelesen, dass GNU Radio ein Projekt ist bei dem man sich viel abgucken kann, allerdings finde ich ehr dass es für den Anfang etwas groß und damit unübersichtlich ist. Viele Grüße, Christian
Christian Honisch wrote: > 1) Kennt jemand ein Tutorial, das wirklich am Anfang anfängt? Am besten > wäre es, wenn am Anfang mal festgelegt ist welche Compiler verwendet > werden, und welche Sourcen. Tutorial speziell für den FX2 kenne ich nicht, aber für LED blinken solltest du dir ein 8051 Tutorial suchen, denn der FX2 ist ein fast normaler 8051 mit eben USB noch zusätzlich dran. > 2) Ich habe mal irgendwo gelesen, dass es auf der Cypress-Seite einige > Tutorials gibt. Aber wo? Ich finde die Seite leider äußerst > unübersichtlich. Hier gibts das komplette Entwicklungspaket incl. Beispielen, Quellcodes, Treibern usw.: http://download.cypress.com.edgesuite.net/design_resources/developer_kits/contents/cy3681_ez_usb_fx2_development_kit_15.zip > Ob ich jetzt mit SDCC oder Keil Programmiere ist mir eigentlich egal. > Alles was ich suche ist ein Startpunkt der einfach mal funktioniert. Nimm lieber erst mal den Keil, dafür sind die Beispiele. > 3) An verschiedenen stellen habe ich was von unterschiedlichen Treibern > für den EZ-USB gelesen. Kann man nicht einfach die Treiber von Cypress > nehmen? oder habe ich da was falsch verstanden und von Cypress gibt es > gar keine Treiber? Falls doch: Welche Vorteile bieten die Treiber von > Drittherstellern? Kannst die CyAPI incl. CyUSB Treiber von Cypress nehmen. Genausogut kann man (wie für jedes andere USB Gerät auch) den LibUSB Win32 Treiber incl. Api nehmen. Vorteile gibts da eigentlich keine, außer dass die LibUSB bissl einfacher gestaltet ist. > 4) Ich habe auch mal gelesen, dass GNU Radio ein Projekt ist bei dem man > sich viel abgucken kann, allerdings finde ich ehr dass es für den Anfang > etwas groß und damit unübersichtlich ist. Ja, das GNURadio verwendet den FX2, allerdings halt sehr komplex mit mehreren Endpoints usw. Nix für den Anfang. Schau dir am besten zuerst mal das BulkLoop Demo von Cypress an (ist im Paket oben), das ist sehr simpel und leicht zu kapieren.
> Kannst die CyAPI incl. CyUSB Treiber von Cypress nehmen. Genausogut kann > man (wie für jedes andere USB Gerät auch) den LibUSB Win32 Treiber incl. > Api nehmen. Vorteile gibts da eigentlich keine, außer dass die LibUSB > bissl einfacher gestaltet ist. ...und keinen Isochronous-Mode fahren kann. Der von Christian gepostete Link enthält tatsächlich alles, was man braucht. Im Paket ist auch der freie Keil incl. C51. Den Anfang kann man zum Beispiel mit dem Beispiel bulksrc machen, mir hat das jedenfalls die Augen geöffnet ;-)
Hi, Danke für den Tip, habe es direkt mal versucht. Nachdem ich Keil erklärt habe wo es Installiert ist, und wo es die include files zu suchen hat funktionert das compilieren sogar. Ich hoffe ich muss nicht bei jedem neuen Projekt durch diese Prozedur... Habe die Firmware auf den FX2 geladen und es wird ein neues Gerät gefunden. So, was mache ich jetzt? Hoffentlich muss ich das jetzt nicht mit dem EZ-USB Control Panel bedienen? Im Verzeichnis USBDevstudio habe ich ein Programm gefunden BulkLoop.exe (dessen Quellcode übrigens auch nicht auf anhieb Compiliert, weil eine include Datei fehlt. afxwin.h. Aber die finde ich sicher irgendwo bei google...) Wenn ich das Programm starte sieht es allerdings so aus, als ob es den FX2 nicht findet/nicht öffnen kann. Also die Comboboxen OUT/IN Endpoint sind leer, bei Status steht immer Stopped.
Ok, die ersten kleinen Dinge laufen jetzt. Also die Beispiele von Cypress, eingehende Daten an Port B + D ausgeben. Was ich nicht verstehe, warum wird Endpoint 1 im EZ-USB Control-Panel nicht angezeigt? Der Code im Beispiel bulkloop ist:
1 | // default: all endpoints have their VALID bit set
|
2 | // default: TYPE1 = 1 and TYPE0 = 0 --> BULK
|
3 | // default: EP2 and EP4 DIR bits are 0 (OUT direction)
|
4 | // default: EP6 and EP8 DIR bits are 1 (IN direction)
|
5 | // default: EP2, EP4, EP6, and EP8 are double buffered
|
6 | |
7 | // we are just using the default values, yes this is not necessary...
|
8 | EP1OUTCFG = 0xA0; |
9 | EP1INCFG = 0xA0; |
10 | SYNCDELAY; // see TRM section 15.14 |
11 | EP2CFG = 0xA2; |
12 | SYNCDELAY; // |
13 | EP4CFG = 0xA0; |
14 | SYNCDELAY; // |
15 | EP6CFG = 0xE2; |
16 | SYNCDELAY; // |
17 | EP8CFG = 0xE0; |
In der Software kann ich aber nur mit den Endpunkten 2,4,6,8 sprechen. Warum? Muss ich eine inf Datei auf dem PC anpassen oder so etwas? Ich habe auch mal versucht die Transferart von Bulk nach Isochronous umzustellen. Auch das Funktioniert nicht. (Z.B. für EP4CFG=0x80;) Immer werden alle Pipes nur als Bulk erkannt. Egal was ich an der Entpunkt Konfiguration ändere, es werden immer die default Werte erkannt. Was mache ich Falsch?
Ist die Frage zu einfach oder zu schwer? Ich meine: Will oder kann mir keiner Helfen? Ich will mich wirklich nicht davor drücken mich in das Thema selbst einzuarbeiten, nur widerspricht das, was ich gelesen habe, dem was der Chip tut. Ich bin ratlos. Für Hilfe wäre ich sehr dankbar! Grüße, Christian
Wie sieht denn deine descr.a51 aus? Sind da die Endpunkte eingetragen, die du haben willst?
Hi! Danke für die Antwort! Datei ist im Anhang. Denke nicht, dass die Entpunkte aufgeführt sind. Kann man die Datei automatisch erstellen, gibt es einen Editor? Oder muss ich alles selbst schreiben? Wenn ja, wo finde ich eine Dokumentation dazu? Wofür steht eigentlich a51? Area 51? ;-)
ok, jetzt habe ich es geschafft mehr Endpunkte hinzuzufügen und deren Typ festzulegen. Muss eigentlich die Größe des Endpunktes mit der Größe des Fifos übereinstimmen? Oder hat das nichts miteinander zu tun? Also muss z.B. für Endpoint 1 die Einstellung so sein:
1 | db 40H ;; Maximun packet size (LSB) |
2 | db 00H ;; Max packect size (MSB) |
Mir ist auch noch ein wenig schleierhaft, warum man die Endpunktkonfiguration eigentlich 2 mal schreiben muss. Also einmal den Descriptor, einmal die Firmware des FX2. Das birgt doch ein nicht unerhebliches Fehlerpotential. Oder gibt es einen technischen Hintergrund? Ich verstehe nicht warum sich das eine nicht automatisch aus dem anderen ableiten kann. Was ich auch noch nicht verstanden habe ist, wie die dscr.a51 in das Projekt eingebunden wird. Ich meine: an keiner stelle in den .c Dateien kann ich einen Verweis finden. Wie funktioniert das? Wofür sind die anderen Dateien? Also die Ezusb.lib und die USBJmpTb.OBJ? Viele Grüße, Christian
Die a51 ist eine Assembler-Datei für 8051, daher der Name. Da sind die Device- Interface- und Endpoint Descriptoren drin. Hättest du dich mit USB beschäftigt, wüsstest du, dass die nötig sind, um das Betriebssystem das Gerät enumerieren zu lassen. Da sind noch viele Tücken und details drin, FullSpeed/HighSpeed, Stromaufnahme, Paketgröße usw. In der Firmware gibts du dann halt lediglich an, was du mit den Endpunkten machen willst....Slave FIFO, GPIF, interne verwendung im 8051. Ist halt bissl kompliziert, aber deswegen gibts ja die Beispiele und kompletten Projekte. Daraus sollte man beginnen, die Firmware und Deskriptoren anzupassen. Und das EZ-USB Manual sollte man auch einmal durchgelesen haben und stets griffbereit haben.
Christian R. wrote: > Da sind die > Device- Interface- und Endpoint Descriptoren drin. Hättest du dich mit > USB beschäftigt, wüsstest du, dass die nötig sind, um das Betriebssystem > das Gerät enumerieren zu lassen. Sorry, aber da erzählt einem jeder was anderes. Auf manchen Seiten steht ja sogar, dass man sich überhaupt nicht um das USB Protokoll kümmern soll, da das angeblich ja alles der Chip macht. Wie gesagt, es hätte ja sein können, dass der Chip den Teil des Descriptors, mit den Endpunkten automatisch generiert. Ich glaube auch nicht ernsthaft, dass ich alle 650 Seiten der USB Spezifikation gelesen und verstanden haben muss, damit ich mit dem FX2 etwas Programmieren kann. > Da sind noch viele Tücken und details > drin, FullSpeed/HighSpeed, Stromaufnahme, Paketgröße usw. > > In der Firmware gibts du dann halt lediglich an, was du mit den > Endpunkten machen willst....Slave FIFO, GPIF, interne verwendung im > 8051. Naja, in den Registern die ich oben im stück Code gepostet habe steht ja auch noch drin, ob der Endpoint verwendet wird, wie groß er ist, welche Transferart. Gut, auch sachen die nicht im Descriptor stehen, aber es ist schon teilweise redundant. > Ist halt bissl kompliziert, aber deswegen gibts ja die Beispiele > und kompletten Projekte. Daraus sollte man beginnen, die Firmware und > Deskriptoren anzupassen. Das mache ich, bisher wusste ich halt nicht, dass ich etwas in dieser a.51 Datei anpassen muss. Wenn man in einem Gebiet neu ist, weiß man halt noch nicht was wichtig ist und was nicht. Leider kommt es oft vor, dass Leute die etwas weiter sind, vergessen, dass man so etwas am Anfang halt noch nicht weiß. So finde ich die Dokumentation zum Developer Paket ziemlich knapp. Man ist halt wirklich viel mit ausprobieren beschäftigt. Es befindet sich ja auch ein Powerpoint Tutorial in dem Paket. Leider finde ich das auch ehr kontraproduktiv. Viel zu wenig Text und zu viele Bilder. Irgendwann soll man auch mal versuchen ein erstes Projekt zu erstellen, zu Compilieren und auf das Development Board zu laden. Gut es ist zwar für das Development Board und nicht für einen freien FX2, aber abgucken kann man ja mal wie das geht. Dachte ich. Da steht auch nix von Descriptoren die man anpassen, geschweige denn überhaupt im Projekt haben muss. Also so nahe liegend, dass ich in der Richtung was selbst machen muss fand ich gar nicht. > Und das EZ-USB Manual sollte man auch einmal > durchgelesen haben und stets griffbereit haben. Ich nehme an du meinst das TRM? Oder ist das jetzt wieder was anderes? Problem dabei ist einfach, dass halt auch viele Sachen drin stehen, die zumindest bei den ersten Experimenten nicht wichtig sind. Wenn ich zuerst alles durchlese und erst danach anfange etwas Auszuprobieren habe ich das meiste vom Anfang schon längst wieder vergessen. Ich meine, wenn man Mathematik studiert hört man doch auch nicht zuerst 6 Semester lang nur Vorlesungen und fängt danach erst mal an selbst an ein paar Aufgaben zu lösen... Ich finde einfach auch die Beispiele sind noch groß genug, dass man Anfangs mal etwas Wichtiges leicht übersehen kann.
Ein Toutorial habe ich mal geschrieben, zwar nicht für den Cypress, aber für den AN2131, der Vorgänger von Cypress. Das Toutorial habe ich im Jahr 2002 Oktober / November veröffentlicht. Link: http://www.elektor.de/jahrgang/2002/oktober/usb-fur-alle-i.59241.lynkx http://www.elektor.de/jahrgang/2002/november/usb-fur-alle-ii.59297.lynkx Sie können unter Elektor auch nach "USB für Alle" suchen. Im ersten Teil ist der Chip und deren Programmierung beschrieben, im zweiten der Aufbau des Gerätetreibers. Ich denke das ist genau das was Sie brauchen. Grüße M.Müller
Ich nutze auch gerade diesen Baustein und verusche mich gerade einzuarbeiten. Ich habe ein Beispiel mit dem GPIF Desginer genommen was im Prinzip auch funktioniert. Mit dem Programm EZ-USB Console kann ich die Daten am Port A auslesen. Ich habe aber im GPIF Designer 16-Bit eingestellt. Wie kann ich 16-bit, also Port A und D auslesen?
Hallo, das 2. Tutorial von Elektor habe ich mal runtergeladen. Allerdings scheint es ehr darum zu gehen wie man den Treiber anpasst, nicht wie man ihn benutzt. Das GPIF hat bei mir minimale Priorität, daher habe ich keine Ahnung davon. Eingaben per synchronem Fifo habe ich jetzt hinbekommen. Viele Grüße, Christian
Hallo Christian, ich habe auch Interesse daran mir ein eigenes Board mit dem Cypress FX2 zu bauen. Da das mein erstes Board sein wird, folgende Fragen. Gibt es vielleicht Beispielschalpläne für den Controller? Ich habe im Datenblatt lediglich eine Ansicht mit den Pinausgängen gefunden.
@Dieter: Ich habe gerade zwei Boards mit dem FX2 in Entwicklung. Eines habe ich hier gepostet, um etwas Feedback zu meinem ersten Board zu erhalten (Beitrag "Noch eine "Erste Eigenentwicklung""). Leider gibt es hier kaum FX2 User. :-( Das zweite Board von mir ist übrigens etwas simpler gestrickt und besteht nur aus dem FX2. Wenn sich nichts besonderes mehr ergeben sollte, dann werde ich beide Boards in der nächsten Woche in die Fertigung geben.
Ich arbeite recht viel mit dem FX2 an einem FPGA. Bei Fragen kann ich gerne weiter helfen. Ganz speziell sollte man bei einem bus-powered Design auf den Reset achten, mit einem RC-Glied gibts da sehr oft Probleme. Desweiteren ist es sinnvoll, einen Jumper am EEPROm vorzusehen, um es zu dektivieren, falls man mal ne falsche FW draufgeladen hat.
Hi Christian, danke für Dein Feedback. In welche Leitung würdest Du den Jumper setzen? SCL? Was schlägst Du als Reset-Lösung vor? (Ich habe bisher auch ein RC-Glied dran, genauso, wie es in den Datenblätter definiert ist.) Kannst Du Dir meinen Schaltplan und das Board mal anschauen? Wenn Du was wichtiges siehst, wäre es toll. Dann kann ich das noch ändern, bevor ich das Board nächste Woche zur Produktion schicke. Danke, Michael
Jumper ist egal, ob in SDA oder SCL, oder an den Adressleitungen. Hauptsache man kann ihn im Betrieb wieder schließen, um die richtige Firmware zu programmieren. Am Rest auf jeden Fall einen schnellen Reset-Generator, steht alles in "Reset and Power Considerations" Dokument von Cypress. Mit einem RC Glied wirst du Probleme bekommen, wenn Bus-Powered ist.
Vielen Dank! Das TI Teil ist ja auch noch recht klein. Mit etwas Glück kriege ich das anstelle meines RC-Gliedes auf die Platine. Muss nur noch sehen, wo ich diesen Chip auftreiben kann... Schöne Grüsse Michael
Hallo, So sieht mein FX2 Board aus: - FX2 Chip, Übliches Vodoo (10 nF, 10 uF Glättungskondensatoren) - 24MHz GRUNDTON Quarz (Ich hatte zuerst einen Oberton Quarz, damit funktioniert die Schaltung nicht) - 3,3V Regler, der die 5V von USB runter regelt. - EEPROM - Zum Reseten nehme ich einen 100k Widerstand und einen 100nF Kondensator. Das erfüllt nicht die Reset Timing Spezifikationen von Cypress, aber es funktioniert. In einer neuen Schaltung würde ich das aber auch anders machen. Auf meinem Borad befinden sich insgesamt 3 Jumper. -Mit dem ersten kann man wählen welche Spannung die Versorgungsspannung ist (USB oder extern) - Der Zweite wählt die Resetquelle (USB oder externe Spannung) - Der dritte trennt den EEPROM vom FX2. Hierbei muss man auf jeden Fall drauf achten, dass die geöffnete Leitung (SDA oder SCL) auch dann auf 3,3V gezogen wird, wenn der Jumper geöffnet ist. (Sonst bootet der FX2 gar nicht). Ich habe es so gemacht, dass ich in der SDA Leitung 2 4,4k Widerstände habe. Ist der Jumper offen, so zieht der eine den FX2 nach oben, der andere den EEPROM. So hat man keine Floating Pins (habe damit mal schlechte Erfahrungen gemacht). Ich bin aber nicht sicher ob das so wirklich sinnvoll ist. Ein Fehler ist es jedenfalls sicher nicht. Was ich besser machen würde wenn ich nochmal ein Board designen würde: -Im Datasheet steht, dass die USB Datenleitungen zwischen 2 und 3 cm lang sein müssen, gleich lang sein müssen mit einer Toleranz von wenigen mm und dass die Massefläche unter ihnen nicht unterbrochen sein darf. Da habe ich bei meinem Board leider nicht so gut drauf geachtet aber es funktioniert trotzdem. Ich muss aber sagen dass ich noch keine Performance Messung gemacht habe. Vielleicht schafft die Schaltung jetzt nur 50% der maximalen Performance. Zum ausprobieren und lernen ist es allerdings auf jeden Fall gut genug. - Ich würde auch eine Möglichkeit schaffen externe I2C Geräte anzuschließen. Während der Laufzeit kann man mit dem FX2 auch andere I2C Geräte ansprechen. Bei meinem Board habe ich jetzt 2 Drähte an die 0603 Pull-UP Widerstände gelötet. Sicher nicht die beste Lösung. - Ein Reset Button wäre nicht schlecht - Ein Wake-UP Button genau so. Sonst kann ich noch zum Designen des Boards empfehlen: - Das Datasheet. Irgendwo stehen ein paar Sachen auf die man achten soll. Habe ich leider erst gefunden als ich das Design schon weggeschickt hatte. - Es gibt bei Cypress auch ein PDF in dem geschrieben steht was alles auf ein Board unbedingt drauf MUSS. Leider sind beide Dokumente nicht vollständig (im Einen stehen Sachen die nicht im Anderen stehen und umgekehrt). Den Chip kann man z.B. bei Farnell kaufen. Als Student bekommt man da auch Rabatt. Viele Grüße Christian
Super Tips, danke! Den Power-On-Reset werde ich, wie vorgeschlagen, durch einen Chip machen, auch wenn die Application Note sagt, dass 100k + 1uF auch funktionieren können. Der TI3809 ist im SOT23 Gehäuse sogar noch a bisserl kleiner als das RC-Glied :-) Probleme hätte ich mit Jumpern. Die kriege ich kaum noch aufs Board. Vielleicht ist das auch nicht so schlimm. Das EEPROM hat eh nur ein paar Bytes für die VID und PID. Da kommt keine Firmware drauf. Und auf externes I2C kann ich für den Adapter ganz gut verzichten. Die SDA und SCL Leitungen sind auf meinem Bord bereits mit 2.2k auf VCC gezogen. Wegen Platzproblemen passt auch kein Reset oder Wakeup-Taster. Da muss dann abgezogen und wieder eingesteckt werden. Na ja, hoffentlich eh nicht so häufig nötig. Bei dem Quarz hoffe ich, dass das ein Grundton-Quarz ist. Woran erkennt man das? Die Datenleitungen sind bei mir gerade mal etwa 5mm lang. Für 2-3 cm müsste ich das ganze Board neu designen. Aber eine Massefläche müsste ich mit etwas schieben noch an der Stelle hinbekommen (momentan ist genau da ein Loch; da sitzt das EEPROM ;-) Schöne Grüsse Michael
Michael wrote: > Super Tips, danke! > > Den Power-On-Reset werde ich, wie vorgeschlagen, durch einen Chip > machen, auch wenn die Application Note sagt, dass 100k + 1uF auch > funktionieren können. Der TI3809 ist im SOT23 Gehäuse sogar noch a > bisserl kleiner als das RC-Glied :-) > Ich habe sogar mal eine Schaltung gesehen die verkauft wird bei der es mit RC Glied gemacht wird. Aber trotzdem finde ich die andere Lösung besser. > > Probleme hätte ich mit Jumpern. Die kriege ich kaum noch aufs Board. > Vielleicht ist das auch nicht so schlimm. Das EEPROM hat eh nur ein paar > Bytes für die VID und PID. Da kommt keine Firmware drauf. Und auf > externes I2C kann ich für den Adapter ganz gut verzichten. Die SDA und > SCL Leitungen sind auf meinem Bord bereits mit 2.2k auf VCC gezogen. > Dumm ist es, wenn sich das Programm aufhängt. Dann kann man kein neues Programm mehr auf den EEPROM brennen. Aber wenn eh kein Programm auf dem EEPROM ist ist das ja egal ;-) Nur wenn das Programm, das sich aufhängt, auf dem EEPROM ist ist es ein Problem. > Wegen Platzproblemen passt auch kein Reset oder Wakeup-Taster. Da muss > dann abgezogen und wieder eingesteckt werden. Na ja, hoffentlich eh > nicht so häufig nötig. > So mache ich das mit dem Reset auch. > Bei dem Quarz hoffe ich, dass das ein Grundton-Quarz ist. Woran erkennt > man das? > Steht in guten Shops dabei. Bei Reichelt gibts einige Grundtonquarze, aber nicht im HC49 oder HC18 Gehäuse, wenn ich mich recht erinnere. Bei Conrad gibts gar keine. Also mit 24MHz nicht. Es gibt die Konvention: Frequenzangabe in kHz=Grundton MHz=Oberton. Aber da halten sich auch nicht alle dran. Ich würde nur einen kaufen bei dem explizit Grundton dabei steht. Meinen Quarz habe ich im Elektronikladen um die Ecke bekommen. Die meinten, dass 24 MHz Grundton ja schon ne ganze Menge sind und was ich damit will. Als ich gesagt habe dass die 24MHz im Chip noch auf 480MHz hochmultipliziert werden haben die mich vielleicht angeguckt... ;-) > Die Datenleitungen sind bei mir gerade mal etwa 5mm lang. Für 2-3 cm > müsste ich das ganze Board neu designen. Aber eine Massefläche müsste > ich mit etwas schieben noch an der Stelle hinbekommen (momentan ist > genau da ein Loch; da sitzt das EEPROM ;-) Wie gesagt, bei mir sind die Leitungen auch deutlich kürzer, aber es funktioniert. Schau für den genauen Wert aber auch noch mal im Datenblatt nach. Die 2-3cm kommen aus meinem Gedächtnis.. kann sein, dass im Datenblatt was anderes steht.
Die Länge der USB Leitungen ist recht unkritisch, da sind ja dann eh 2m Kabel dran oder so. Die Pull-Ups an SDA und SCL müssen ja eh dran, Jumper dann halt dahinter. Bei Firmware-Load in den RAM direkt kann man´s natürlich weglassen. Mit RC-Glied hatten wir hier massive Probleme, am FX2 nicht ganz so viel, am AT2LP jedoch massenhaft. Performance wird ein nicht ganz optimales Layout nicht beeinflussen, selbst mit den grottenhaft schlecht gemachten Boards von BrainTechnology erreiche ich 40MB/s. Den Chip an sich gibts auch bei Segor für jedermann.
Christian R. wrote: > Die Länge der USB Leitungen ist recht unkritisch, da sind ja dann eh 2m > Kabel dran oder so. Dass es unkritisch ist stimme ich dir zu, aber die Leute von Cypress werden das nicht einfach aus jucks und dollerei in das Datenblatt reinschreiben. Du weißt da sicher deutlich mehr als ich drüber, könnte es vielleicht was mit Reflektion zu tun haben? Die 2m die dran hängen haben doch eine ganz andere Impedanz, oder nicht? Die Impedanz des Kabels ist sicher nach Standard vorgegeben, aber was man auf der Platine hat dürfte sicher ehr ein zufälliger Wert sein. Ich hatte mal die Idee, dass man vielleicht so eine Art Schmalbandanpassung durch die richtige Leitungslänge macht, aber dafür müsste die Länge ja eine ganz andere sein und die Impedanz müsste auch den passenden Wert haben. Vielleicht gibts in der Richtung ja noch andere Tricks? Ich kenne mich da nicht so gut aus.
Christian H. wrote: > Christian R. wrote: > Die 2m die dran hängen haben doch eine ganz andere Impedanz, oder nicht? > Die Impedanz des Kabels ist sicher nach Standard vorgegeben, aber was > man auf der Platine hat dürfte sicher ehr ein zufälliger Wert sein. Wenn die Impedanz zufällig ist, hast du die Platine falsch entworfen. Die Leiterbahnen sollten natürlich die gleiche differenzielle Impedanz haben, wie das Kabel. Dafür gibts Berechnungsprogramme, z.B. CITS von Polar.
Hallo und Danke an beide Christians ;-) Also ich habe jetzt eine (fast) durchgängige Massefläche über den beiden Datenleitungen freischaufeln können. Zudem habe ich einen Power-On-Reset-Chio von TI anstelle des RC-Gliedes eingebaut. Was das Thema Impedanz der Leitungen angeht, habe ich total keine Ahnung. Das Programm habe ich auch nicht (ist vermutlich wohl auch kommerziell). Wie wichtig ist das denn? Wäre Euch dankbar, wenn Ihr mit Eurer Erfahrung nochmal einen Blick aufs Board werfen könntet. Den Schaltplan habe ich angehängt. Michael
Die Impedanz von Bandleitungen berechnet sich im wesentlichen aus Abstand der Leitungen, Breite der Leitungen und epsilon_r des Materials auf dem die Leitungen aufgebracht sind. Falls die Leitungen "übereinander" liegen gilt die Formel:
wobei d der Abstand und w die Breite der Leiter ist. Ich bin mir nicht ganz sicher, ob diese Formel auch gilt, wenn die Leitungen nebeneinander verlaufen. Wenn es ein Komplizierterer Verlauf ist wie es sich an der Buchse nicht vermeiden lässt kommt man vermutlich um Simulation oder numerische Integration nicht herum. Allerdings würde ich mir nicht all zu große Sorgen deswegen machen. Wie gesagt, ich habe mir keine Gedanken darüber gemacht und meine Schaltung funktioniert trotzdem. Ich weiß auch nicht wie gut die Impedanz von USB Kabeln getroffen ist mit den Flachbandleitungen die Teilweise in PCs verwendet werden um USB Ports vom Mainboard ans Gehäuse zu legen. Und auch das Funktioniert. Mal etwas quantitativer Argumentiert: Die Impedanz wird entlang einer Leitung Transformiert nach:
mit: Z_0 Abschlussimpedanz, Z_L Leitungsimpedanz, l Länge der Leitung, beta Phasenkonstante. Ist also nur l kurz genug gegenüber beta so ist Z(l) ungefähr= Z_0, also der Abschlussimpedanz die der FX2 darstellt. Sprich: wenn die Leitung kurz ist sollte es nicht so schlimme Effekte haben. Zu der Platine: Ich würde auf dem Top Layer die Leitung von IC2 nach R6 vielleicht um die Pins der USB Buchse Legen, also links vorbei. Dann ist die Masseleitung nicht unter den Datenleitungen unterbrochen. Vielleicht ist so eine Massefläche aber auch nur dann wirklich sinnvoll, wenn sie an der einen Seite gut mit der Buchse und an der anderen gut (bedeutet mit geringer Impedanz) an den FX2 angeschlossen ist? Könnte ich mir vorstellen. Ich würde am Ende der Leitungen am FX2 vielleicht noch Vias setzen, dass der Strom direkt an Massepins des FX2 fließen kann und nicht obenherum eine "Schleife fließt". Hör aber lieber mal was Christian R. dazu sagt bevor du das machst. Ich habe nur mäßig Erfahrung mit Platinendesign. Ich würde auch auf jeden Fall vorher gucken ob ich einen Grundtonquarz in dem Gehäuse bekomme. Bei Reichelt gibts einen, aber der hat definitiv ein anderes Gehäuse. Bist du die Checkliste von Cypress mal durchgegangen? Das kann sehr sinnvoll sein. Wenn man z.B. vergessen hat den Reserved Pin auf Masse zu legen oder sowas lässt sich das nachher nur schwierig korrigieren. Unterhalb des FX2 sind bei mir weniger Leitungen, mir war eine Stromversorgung mit kleinerer Impedanz wichtiger. Ich erkenne auch nicht wie viele Glättungskondensatoren drauf hast. Sich an die Vorgabe von Cypress zu halten ist sicher keine schlechte Idee. So. Ich habe fertig ;-) Du musst aber auch bedenken: Ich bin auch nicht grade der Profi. Also es muss nicht alles richtig sein, was ich erzähle. Wenn es so ist lerne ich gerne noch etwas dazu, falls es Jemand korrigieren kann.
Hi Christian Ich habe jetzt mal nach der Checkliste (AN15456) gesucht (kannte ich vorher nicht) und mal alle acht Punkte durchgegangen. Die sollte ich alle berücksichtigt haben (insbesondere jetzt mit dem Power-On-Reset chip). Ich habe auch mal versucht herauszufinden, ob der Quarz ein Grundtonquarz ist. Hersteller ist Rakon. Wenn ich die Seite korrekt lese, sind alle Quarze dieses Typs bis 30MHz Grundtonquarze. Sollte dann also hoffentlich gehen. (http://www.rakon.com/models/browse-model?model_id=362&model_type=C) Was die eine kreuzende Leitung angeht: Mann, da habe ich jetzt zwei Stunden versucht, die um die USB-Buchse zu legen. Bisher wirklich erfolglos. Probier ich später nochmal. Wegen der Impedanz: Also ich hoffe, dass es aufgrund der kurzen Leitungen da nicht wirklich relevant ist. Scheint ja aus den Gleichungen herauszukommen? Glättungskondensatoren sind vier auf dem Board, zwei beim FX2 und zwei beim CPLD. Zusätzlich noch die zwei 10uF für den LDO, beides Tantal-Typen. Ich hatte bei meinem ersten zwei Routingversuchen zunächst die VCC und die GND Leitungen verlegt und danach die Kondensatoren gesetzt. Allerdings habe ich im Endeffekt das Board nie geroutet bekommen. Für den dann letztendlich erfolgreichen Routing-Ansatz habe ich erst die Verbindungen FX2 zu CPLD geroutet und dann den ganzen Rest. Das hat dazu geführt, dass (vermutlich) GND und VCC und auch die Kondensatoren nicht mehr völlig ideal liegen. Ich hoffe, das ist das kleinere Übel. Ich weiss, dass das Board vermutlich alles andere als perfekt ist. Ist ja auch mein erstes Board. :) Wichtig wird für mich als nächstes die Entscheidung, ob das Board so überhaupt funktionsfähig ist. Wenn nicht, landet es im digitalen Müll, ansonsten lasse ich es mal fertigen. Da haben mir Deine Tips schon viel geholfen. Auch scheinst Du bisher noch nichts gesehen zu haben, dass ein Killer wäre, richtig? (hoff) Würde mich noch interessieren, welche Meinung der andere Christian hat. Danke noch einmal für Eure Hilfe! Michael
Michael wrote: > Hi Christian > > Ich habe jetzt mal nach der Checkliste (AN15456) gesucht (kannte ich > vorher nicht) und mal alle acht Punkte durchgegangen. Die sollte ich > alle berücksichtigt haben (insbesondere jetzt mit dem Power-On-Reset > chip). > > Ich habe auch mal versucht herauszufinden, ob der Quarz ein > Grundtonquarz ist. Hersteller ist Rakon. Wenn ich die Seite korrekt > lese, sind alle Quarze dieses Typs bis 30MHz Grundtonquarze. Sollte dann > also hoffentlich gehen. > (http://www.rakon.com/models/browse-model?model_id=362&model_type=C) > Ich würde sagen bis 30MHz gibt es Grundtonquarze, aber bei 27MHz kann es schon ein Obertonmodell sein. Aber das wäre ja trotzdem OK. Wo willst du den denn kaufen? Wenn es ein falscher ist wirst du es merken wenn die Schaltung das erste mal mit Strom versorgt wird. Dann liegen am Clock Out nicht 12 MHz sondern nur 4 MHz. > Was die eine kreuzende Leitung angeht: Mann, da habe ich jetzt zwei > Stunden versucht, die um die USB-Buchse zu legen. Bisher wirklich > erfolglos. Probier ich später nochmal. Hm. In dem einen Bild sieht es aus als ob da nichts im Weg ist. Übersehe ich was? Die 3. Leitung von der USB Buchse kann man doch sicher auf das andere Layer legen. > > Wegen der Impedanz: Also ich hoffe, dass es aufgrund der kurzen > Leitungen da nicht wirklich relevant ist. Scheint ja aus den Gleichungen > herauszukommen? > Theoretisch ja. Praktisch....?? Naja... wie ich schon oft gesagt habe: Bei mir funktioniert es auch. > Glättungskondensatoren sind vier auf dem Board, zwei beim FX2 und zwei > beim CPLD. Zusätzlich noch die zwei 10uF für den LDO, beides > Tantal-Typen. Ich habe Pro Powerpin am FX2 einen. Also 6. Aber da gibt es ja unterschiedliche Überzeugungen was sinnvoll ist... > > Ich hatte bei meinem ersten zwei Routingversuchen zunächst die VCC und > die GND Leitungen verlegt und danach die Kondensatoren gesetzt. > Allerdings habe ich im Endeffekt das Board nie geroutet bekommen. Mach es größer ;-) > > Für den dann letztendlich erfolgreichen Routing-Ansatz habe ich erst die > Verbindungen FX2 zu CPLD geroutet und dann den ganzen Rest. Das hat dazu > geführt, dass (vermutlich) GND und VCC und auch die Kondensatoren nicht > mehr völlig ideal liegen. Ich hoffe, das ist das kleinere Übel. Ich route GND und VCC immer als erstes. Vielleicht bin ich aber auch übervorsichtig. Wie viel es wirklich ausmacht kann ich nicht sagen. > > Ich weiss, dass das Board vermutlich alles andere als perfekt ist. Ist > ja auch mein erstes Board. :) Mein Erstes sah schimmer aus ;-) > > Da haben mir Deine Tips schon viel geholfen. Auch scheinst Du bisher > noch nichts gesehen zu haben, dass ein Killer wäre, richtig? (hoff) > Killer stehen in der Checkliste von Cypress. Wenn du die abhacken konntest ist alles ok. Sonst gibt es halt auch Sachen die man nicht so einfach überprüfen kann. Also Taktausgänge des FX2 wirklich an Takteingängen des CPLD. Was mir noch eingefallen ist: 10 mal überprüfen ob die Pins der Buchse richtig verbunden sind (man kann die Buchse ja von oben oder von unten auflöten). Das hatte ich bei meinem ersten USB Board mir FT245 falsch gemacht. Dann Überprüfen ob D+ wirklich an D+ geht und nicht an D-. Noch was fällt mir grade ein: Auf meinem Board habe ich das Gehäuse der Buchse über 1MOhm und parallel 100 µF/250V mit Masse des Boards verbunden. Um ehrlich zu sein habe ich das nur gemacht weil ich es auf 2 anderen Boards genau so gesehen habe. Vielleicht hat es was mit dem abfangen von ESD Pulsen beim einstecken in die Buchse zu tun? Viele Grüße, Christian
> Christian wrote: > Ich würde sagen bis 30MHz gibt es Grundtonquarze, aber bei 27MHz kann es > schon ein Obertonmodell sein. Aber das wäre ja trotzdem OK. > Wo willst du den denn kaufen? > Ich habe alle Bauteile bei tme.pl bestellt. Hier in der Schweiz gibt es leider nicht viele Anbieter. Reichelt aus Deutschland versendet nur bei mindestens 150EUR und will auch noch über 20EUR Versandskosten haben. Auf der tme.pl Seite wird der Quarz als exakt dieser Rakon-Typ bezeichnet. Und die Rakon-Seite sagt, dass alle Quarze dieses Typs bis 27MHz Grundtonquarze seien. Also, sollte wohl passen. > Wenn es ein falscher ist wirst du es merken wenn die Schaltung das erste > mal mit Strom versorgt wird. Dann liegen am Clock Out nicht 12 MHz > sondern nur 4 MHz. > O.K., gut zu wissen. > > Was die eine kreuzende Leitung angeht: Mann, da habe ich jetzt zwei > > Stunden versucht, die um die USB-Buchse zu legen. Bisher wirklich > > erfolglos. Probier ich später nochmal. > > Hm. In dem einen Bild sieht es aus als ob da nichts im Weg ist. Übersehe > ich was? Die 3. Leitung von der USB Buchse kann man doch sicher auf das > andere Layer legen. > Das sieht leider nur so aus. Sind Leitungen auf beiden Seiten (eine Seite GND, die andere VCC). Ich habe jetzt noch ein paar Stunden daran gebastelt und durch das Verschieben von 9 Bauteilen jetzt tatsächlich eine durchgängige Massefläche über den beiden Datenleitungen. Puuhh... > > Glättungskondensatoren sind vier auf dem Board, zwei beim FX2 und zwei > > beim CPLD. Zusätzlich noch die zwei 10uF für den LDO, beides > > Tantal-Typen. > > Ich habe Pro Powerpin am FX2 einen. Also 6. Aber da gibt es ja > unterschiedliche Überzeugungen was sinnvoll ist... > Also auf dem aktuellen Board könnte ich zwar noch mehr unterbringen, aber nicht in der Nähe der jeweiligen Pins. Stattdessen würden weitere Kondensatoren wohl nur in der Nähe der bereits bestehenden Kondensatoren einen Platz finden können. Das macht wahrscheinlich keinen Sinn. > > Ich hatte bei meinem ersten zwei Routingversuchen zunächst die VCC und > > die GND Leitungen verlegt und danach die Kondensatoren gesetzt. > > Allerdings habe ich im Endeffekt das Board nie geroutet bekommen. > > Mach es größer ;-) > Nö ;-) Ist mir jetzt bereits gross genug ;-) (Also nur, wenn es wirklich unbedingt nötig ist. Es soll ja ein KLEINER Adapter werden.) > Killer stehen in der Checkliste von Cypress. Wenn du die abhacken > konntest ist alles ok. Also, in der Checkliste, die ich gefunden habe, steht: 1.) Alle Power-Pins und GNDs anschliessen. -> o.k. 2.) VCC Ramp-Up Zeit mindestens 200us. -> Das regelt der LDO. Laut der Checkliste wäre das dann normalerweise o.k. 3.) Reset mindestens 5ms, wenn man einen Quarz nimmt. -> o.k. Der POR-IC macht 200ms. 4.) 24MHz +- 100ppm Quarz, 12pF Load Capacitance und 500uW drive level -> Frequenz und Genauigkeit o.k., Load Capacitance ist angegeben als 10pF bis 75pF (?) und drive level ist 0.5mW (also o.k.) 5.) RESERVED Pin auf GND -> o.k. 6.) 2.2k Pull-ups für SDA und SCL -> o.k. 7.) EA auf GND -> hat die 56 pin Version nicht 8.) WAKEUP mit 10k auf VCC So weit, so gut. Danke für den Tipp mit der Liste. > > Sonst gibt es halt auch Sachen die man nicht so einfach überprüfen kann. > Also Taktausgänge des FX2 wirklich an Takteingängen des CPLD. > CLKOUT und IFCLK sind an den zwei GCLK Eingängen des 7064. > Was mir noch eingefallen ist: 10 mal überprüfen ob die Pins der Buchse > richtig verbunden sind (man kann die Buchse ja von oben oder von unten > auflöten). Das hatte ich bei meinem ersten USB Board mir FT245 falsch > gemacht. > Dann Überprüfen ob D+ wirklich an D+ geht und nicht an D-. > Am FX2 habe ich die richtigen Pins. An der Buchse habe ich mich auf das Bauteil in Eagle verlassen. Muss mal schauen, ob ich das irgendwo verifizieren kann. Ist ja ne Standard USB-B Buchse. > Noch was fällt mir grade ein: > Auf meinem Board habe ich das Gehäuse der Buchse über 1MOhm und parallel > 100 µF/250V mit Masse des Boards verbunden. Um ehrlich zu sein habe ich > das nur gemacht weil ich es auf 2 anderen Boards genau so gesehen habe. > Vielleicht hat es was mit dem abfangen von ESD Pulsen beim einstecken in > die Buchse zu tun? > Das habe ich bisher noch auf keinem Board gesehen. Ein 100uF/250V Kondensator würde aber auch sehr viel Platz in Anspruch nehmen. > Viele Grüße, > Christian Vielen Dank nochmal. Soweit sieht es ja ganz gut aus. Wenn Christian R. nicht noch was haben sollte, werde ich die Platine nächste Woche zur Fertigung senden. Schöne Grüsse Michael
Mir ist so erst ma nix schlimmes aufgefallen, das ist aber alles eher weniger kritisch. Hauptsache, der Reset passt, und die USB leitungen sind nicht zu lang, wenn sie schon nicht die passende Impedanz haben. USB ist da aber sehr tolerant. Eventuell solltest du kleine Testpunkte vorsehen, wenn du das Slave-FIFO Interface benutzen willst. Das Timing speziell bei 48Mhz IFCLK ist Harakiri, da hilft auch Modelsim nicht viel weiter. Lieber Testpunkte an die Steuersignale und den IFCLK, und dann mit dem Logic Analyser dran gehn.
Danke nochmal an beide Christians ! Ich warte noch bis die bestellten Teile, um zu checken, ob die Grössen auch wirklich passen, und dann lasse ich die Platine fertigen. :-) Dann beginnt der Spass des Zusammenbauen. Schöne Grüsse Michael
Schön. Lass mal von dir hören, wenn es fertig ist, ob das Board läuft. Und wenn nicht: Keine Sorge, bei mir lief es auch erst nach 2 oder 3 Tagen, als ich festgestellt hatte, dass mein Quarz nicht der richtige ist. Hast du dich schon mit der Programmierung der PC Software auseinander gesetzt? Da bin ich bisher noch nicht so weit gekommen. Viele Grüße, Christian
Hallo Christian Ja mache ich gerne. Ich hoffe, dass ich diese Woche die Teile bekomme. Dann kann ich die Bauteilgrössen noch einmal verifizieren, und dann bestelle ich die Platine. Ich werde in Eagle ein paar Platinen zusammenkopieren, damit ich auf die Mindestgrösse von bilex komme. Da sollte ich voraussichtlich zwei von diesen Boards, zwei von einem weiteren FX2-Board ohne CPLD und noch ein paar kleine Levelshifter-Platinen draufkriegen. Fertigung sollte wohl mit Versand irgendwo zwischen zwei und drei Wochen dauern. Dann noch ein bisschen Zeit für die Bestückung. Also ich rechne mal mit Anfang April bis ich weiss, ob die Platine läuft. Was meinst Du mit der PC-Programmierung? Da brauche ich ja erstmal eine Anwendung, oder? ;-) Ich habe hier noch ein FX2/FPGA-Board. Da habe ich unter Labview einen Treiber geschrieben, so dass dieses kleine Board mit einem ADC-Aufsatz ein kleines USB-Scope darstellt. Die PC-Treiberprogrammierung habe ich mit libusb gemacht. Das ist eigentlich supersimpel. Woran ich momentan eher noch sitze, ist eine Firmware für den FX2. Da habe ich momentan noch das Problem, dass ich zwar sauber Daten ans Board senden kann, aber der Empfang geht nur genau bei jedem zweiten Paket. Seltsam... Vielleicht stelle ich den Code mal rein. Möglicherweise hat ja jemand einen Tipp für mich. Schöne Grüsse Michael
> Ich werde in Eagle ein paar Platinen zusammenkopieren, damit ich auf die > Mindestgrösse von bilex komme. Da sollte ich voraussichtlich zwei von > diesen Boards, zwei von einem weiteren FX2-Board ohne CPLD und noch ein > paar kleine Levelshifter-Platinen draufkriegen. hmhm... bei mir steht vielleicht auch demnächst eine Platine an. Interesse zusammen zu bestellen um Kosten zu reduzieren? Ist nur die Frage ob ich so schnell fertig werde. Glaube leider ehr nicht. > Was meinst Du mit der PC-Programmierung? Da brauche ich ja erstmal eine > Anwendung, oder? ;-) Für die ersten Gehversuche gibt es von Cypress ein Programm mit dem man Daten aus den Endpunkten lesen bzw reinschreiben kann. Damit kann man erst mal das ein oder andere ausprobieren. Ich hatte ganz schöne Startschwierigkeiten als ich mit der Programmierung des FX2 angefangen habe. Als ich die ersten paar Sachen raus gefunden habe habe ich ein kleines Tutorial geschrieben. Wenn es dich interessiert.... Richtet sich an Leute, die schon irgendwann mal was in C gemacht haben, aber Null Ahnung bis minimal Ahnung von USB haben. > > Ich habe hier noch ein FX2/FPGA-Board. Da habe ich unter Labview einen > Treiber geschrieben, so dass dieses kleine Board mit einem ADC-Aufsatz Hm dann erübrigt sich das Tutoral wohl? ;-) > ein kleines USB-Scope darstellt. Die PC-Treiberprogrammierung habe ich > mit libusb gemacht. Das ist eigentlich supersimpel. Ich will die CyAPI nutzen. Ist sicher genau so simpel, aber irgendwo braucht man einfach mal den Startpunkt. Den habe ich bisher nicht, habe mich aber auch noch nicht ernsthaft damit befasst. Außerdem ist das meiste einfach wenn man es verstanden hat ;-) > Woran ich momentan eher noch sitze, ist eine Firmware für den FX2. Da > habe ich momentan noch das Problem, dass ich zwar sauber Daten ans Board > senden kann, aber der Empfang geht nur genau bei jedem zweiten Paket. > Seltsam... Ok, das mit dem Tutorial erübrigt sich wirklich. Vielleicht kannst du es ja ergänzen? :-) Aber Probleme, dass die Daten nicht ankommen hatte ich nicht.
Also über den Cypress Treiber weiss ich nichts. Ich nutze Linux und da bietet sich libusb an. Und das ist wirklich recht simpel. Einzige etwas kompliziertere Sache ist das Finden des angeschlossenen Devices. Das sind ein paar verschachtelte Schleifen. Sobald man das Device aber gefunden hat, öffnet man es, reserviert das Interface und kann dann locker Daten senden oder empfangen von jedem Endpoint. Bei der FX2 Firmware geht es hauptsächlich um die Initialisierung der Endpoints. Dabei soll einfach nur EP2 und EP4 auf Autoout und EP6 und EP8 auf Autoin geschaltet werden. That's it, sollte man meinen. Allerdings kostete es mich schon einige Nerven, bis ich herausgefunden habe, dass das mit dem Autoout nur funktioniert, wenn man es zunächst ausschaltet und dann direkt wieder einschaltet. (Grrr) Das Senden klappt jetzt. Jeder Frame wird problemlos an den FX2 gesendet und von dort von dem externen Master gelesen (FPGA). Nur die Daten, die der FPGA zurücksendet, davon kommt nur jedes zweite Paket bis zum PC durch. Seltsam. Es liegt auf jeden Fall an der Firmware, da ich noch eine Firmware als binär-Datei habe, mit der es problemlos geht. Das Tutorial würde ich übrigens gerne mal sehen. Bezüglich Platine Sharing: Generell bin ich offen, aber ich würde schon gerne die Platine Ende der Woche ordern ;-) Wahnsinnig viel sparen würde man auch nicht. So werde ich wohl ca. 30EUR insgesamt bezahlen inkl. Versand. Da sind dann zweimal die FX2/CPLD-Platine drin, zweimal eine FX2-Platine (die ich parallel gemacht habe) und viermal ein Levelshifter. Prinzipiell bräuchte ich nur die Hälfte. Aber es ist auch nicht schlecht, notfalls eine Ersatzplatine zu haben. Schöne Grüsse Michael Schöne Grüsse Michael
Michael wrote: > Also über den Cypress Treiber weiss ich nichts. Ich nutze Linux und da > bietet sich libusb an. Und das ist wirklich recht simpel. Einzige etwas > kompliziertere Sache ist das Finden des angeschlossenen Devices. Das > sind ein paar verschachtelte Schleifen. > Unter Linux konnte ich kein funktionierendes Programm für die Lüftersteuerung meines Notebooks finden. Deshalb bin ich momentan mehr unter Windows. > Bei der FX2 Firmware geht es hauptsächlich um die Initialisierung der > Endpoints. Dabei soll einfach nur EP2 und EP4 auf Autoout und EP6 und > EP8 auf Autoin geschaltet werden. That's it, sollte man meinen. > Allerdings kostete es mich schon einige Nerven, bis ich herausgefunden > habe, dass das mit dem Autoout nur funktioniert, wenn man es zunächst > ausschaltet und dann direkt wieder einschaltet. (Grrr) > Bei mir war ehr das Problem, dass ich den Endpointdescriptor nicht angepasst hatte. Bzw anfangs überhaupt nicht auf die Idee gekommen bin, dass man das überhaupt muss. > Das Senden klappt jetzt. Jeder Frame wird problemlos an den FX2 gesendet > und von dort von dem externen Master gelesen (FPGA). Nur die Daten, die > der FPGA zurücksendet, davon kommt nur jedes zweite Paket bis zum PC > durch. Seltsam. Vielleicht hat das ja doch was mit dem descriptor zu tun? Hast du die größe der Endpoints angepasst? Oder hast du noch die Standartwerte? Der Descriptor ist leider aber auch ein Thema das ich noch nicht so weit verstanden habe wie man es sollte. Bzw ich noch nicht das ganze nötige Know-How habe. > Es liegt auf jeden Fall an der Firmware, da ich noch > eine Firmware als binär-Datei habe, mit der es problemlos geht. > > Das Tutorial würde ich übrigens gerne mal sehen. Heute abend schicke ich den Link. > > Bezüglich Platine Sharing: Generell bin ich offen, aber ich würde schon > gerne die Platine Ende der Woche ordern ;-) Mal schauen ob ich es schaffe. > > Wahnsinnig viel sparen würde man auch nicht. So werde ich wohl ca. 30EUR > insgesamt bezahlen inkl. Versand. Sieht aus als ob dein Hersteller billiger ist als meiner... Viele Grüße, Christian
Mit Tutorial meine ich das: Beitrag "Re: USB Datenaustausch bei Nexys2 von Digilent" (nur der eine gaaanz lange Post von mir.) Man benutzt den Keil Compiler und passt das Bulkloop Beispiel an. Ich hatte mal überlegt es ein wenig zu überarbeiten und hier irgendwo hochzuladen. Aber vielleicht ist es vom Niveau her zu trivial? Ich weiß es nicht.
Ahh so, das meinst Du. Finde ich gut gemacht. Nutzt Du eigentlich immer den Keil compiler? Der ist doch kommerziell, nicht? Ich probier mein Glück mit sdcc. Generell funktioniert es ja auch ganz gut bereits. Ich habe lediglich ein paar seltsame Probleme mit den IN-EPs. Das muss irgendwie mit dem Autoin zusammenhängen. Ich bastel da noch etwas (bin aber inzwischen kurz vorm verzweifeln). Schöne Grüsse Michael P.S.: Bei den Autoouts hatte ich auch ein Problem, dass ich aber durch einen Tipp im Internet lösen konnte. Wenn man EPxFIFOCFG=bmAUTOOUT macht, muss vorher ein EP2xFIFOCFG=0 stehen. Die Firmware muss anscheinend die Flanke sehen von 0->1, um den Autoout zu enablen. So geht es zumindest, ohne bei mir nicht.
Michael wrote: > Ahh so, das meinst Du. Finde ich gut gemacht. > danke > Nutzt Du eigentlich immer den Keil compiler? Der ist doch kommerziell, > nicht? > Bisher nutze ich den. Es gibt ja eine beschränke freie Version. > Ich probier mein Glück mit sdcc. Generell funktioniert es ja auch ganz > gut bereits. Ich habe lediglich ein paar seltsame Probleme mit den > IN-EPs. Das muss irgendwie mit dem Autoin zusammenhängen. Ich bastel da > noch etwas (bin aber inzwischen kurz vorm verzweifeln). > Ich habe den Keil genommen weil es für den vollständige Beispiele gab. Ich habe für den Keil keins gefunden bei dem der Descriptor konfiguriert wird. (Daher dachte ich auch anfangs, dass man das gar nicht machen muss. Das ist halt das Problem, wenn man von Beispielen lernt. Das kann auch ganz schön nach hinten los gehen...) > > P.S.: Bei den Autoouts hatte ich auch ein Problem, dass ich aber durch > einen Tipp im Internet lösen konnte. > > Wenn man EPxFIFOCFG=bmAUTOOUT macht, muss vorher ein EP2xFIFOCFG=0 > stehen. Die Firmware muss anscheinend die Flanke sehen von 0->1, um den > Autoout zu enablen. So geht es zumindest, ohne bei mir nicht. Hm. Wie das mit den Details ist weiß ich jetzt gar nicht mehr so genau. Ich habe mich immer an das TRM gehalten. Ich kann mich erinnern dass teilweise drin stand, dass irgendwelche Dinge auf Flanken von Registern reagieren. Aber was das genau war weiß ich jetzt auch nicht auswendig.
Also, ich habe die betreffenden Seiten des TRM inzwischen wahrscheinlich zehn mal gelesen und auch die Beispiele dadrin durchgeschaut. Ich finde da wirklich nichts. Ich werde jetzt noch ein wenig rumprobieren (z.B. mal einen manual OUT), und wenn das alles nichts bringt, schreibe ich Kolja mal eine Email. Er hat die USB-JTAG firmware unter sdcc geschrieben. Vielleicht hat er ja eine Idee. Apropos Platine: Wie gesagt, ist das meine erste Bestellung. Ich habe also noch keinen bevorzugten Lieferanten. Nach Preis geschaut, habe ich mir mal bilex und olimex rausgesucht. Bisher habe ich da nichts schlechtes gehört. Allerdings sind die Constraints da vielleicht etwas höher (0.6mm vias, 10mil Strukturen, etc.). Für mich i.O. Ich habe die Platine so entwickelt und auch regelmässig einen DRC gemacht mit dem bilex rules. Ich weiss aber nicht, ob das auch für Dich passt. Schöne Grüsse Michael
P.S.: Bauteile sind soeben angekommen. Werde heute abend die Bauteilgrössen mit der Platine überprüfen. :-)
Michael wrote: > P.S.: Bauteile sind soeben angekommen. Werde heute abend die > Bauteilgrössen mit der Platine überprüfen. :-) hm dann werde ich meine Platine sicher nicht rechtzeitig fertig bekommen. Ich plane SDRAM zu verwenden. Bevor ich eine Testplatine damit mache habe ich aber noch viel damit zu tun mich in das Thema einzuarbeiten. Du hast nicht zufällig schon mal was damit gemacht? Ich habe das Gefühl, dass viele Hersteller die Appnotes zu SDRAM reduzieren. Vielleicht wollen sie neuere Technologien pushen? Das letzte mal habe ich bei q-pcb bestellt. Man hat mir aber auch mal die beiden empfohlen: www.bilex-lp.com (Bulgarien) www.pcbcart.com (China) Gut den ersten kennst du ja schon. ;-) Selbst habe ich bei denen aber noch nie was bestellt und kann daher nichts über die Qualität sagen.
Also mir wurden neben den zwei vorher erwähnten auch noch zwei aus den USA empfohlen. Ich dachte, Europa ist mir erstmal lieber. Und der Preis ist ja nun wirklich gut (120*80cm; zweiseitiger Lötstopp, einseitiger Bestückungsdruck, inkl. Fräsen ca. 25€ plus Versand macht etwa 30€). Mit SDRAM habe ich noch nichts gemacht. Sorry. Bauteile überprüfen ist eine ganz wichtige Sache. Habe eben gemerkt, dass ich blöderweise 0805 LEDs bestellt habe anstelle von 0603er. Jetzt muss ich das Layout anpassen. Na, mal sehen, was ich heute abend beim Detailcheck noch so alles feststelle ;-) Übrigens kann ich tme.pl bisher nur empfehlen: Riesenauswahl, tiefe Preise, schneller Versand, Ware gut verpackt, alles auf Rechnung. Soweit bin ich erstmal happy. Schöne Grüsse Michael
Michael wrote: > Also mir wurden neben den zwei vorher erwähnten auch noch zwei aus den > USA empfohlen. Ich dachte, Europa ist mir erstmal lieber. Und der Preis > ist ja nun wirklich gut (120*80cm; zweiseitiger Lötstopp, einseitiger > Bestückungsdruck, inkl. Fräsen ca. 25€ plus Versand macht etwa 30€). > cm oder meinst du ehr mm? Falls es wirklich cm sind werde ich ab sofort meine Möbel aus Leiterplatten bauen ;-) > Mit SDRAM habe ich noch nichts gemacht. Sorry. > schade. > Bauteile überprüfen ist eine ganz wichtige Sache. Habe eben gemerkt, > dass ich blöderweise 0805 LEDs bestellt habe anstelle von 0603er. Jetzt > muss ich das Layout anpassen. Na, mal sehen, was ich heute abend beim > Detailcheck noch so alles feststelle ;-) naja... 0805 Gehäuse bekommt man notfalls ja noch auf ein 0603 Footprint gelötet... ;-) > > Übrigens kann ich tme.pl bisher nur empfehlen: Riesenauswahl, tiefe > Preise, schneller Versand, Ware gut verpackt, alles auf Rechnung. Soweit > bin ich erstmal happy. Leider haben sie keinen Spartan 3 mit 208 Pins... Ich werde wohl eine Sammelbestellung bei Digikey organisieren müssen :-/ Christian
Hüstel, "cm", "mm", ist ja nur ein Buchstabe ;-) Spartan 3er haben sie tatsächlich nur entweder TQFP144 oder direkt BGA320 :-( Na ja, nimmste halt einen Cyclone 2 PQFP240 (EP2C20) ;-) grins
Michael wrote: > Hüstel, "cm", "mm", ist ja nur ein Buchstabe ;-) > Jaja.. sowas passiert schnell. So war das ja auch mit dem Spinat. Da hat sich einer mal um ein paar Zehnerpotenzen vertan. Generationen von Kindern mussten Spinat essen weil da angeblich so viel Eisen drin ist. Bis dann einer mal auf die Idee gekommen ist das nachzumessen. > Spartan 3er haben sie tatsächlich nur entweder TQFP144 oder direkt > BGA320 :-( BGA fällt für mich weg. Ich glaube nicht, dass man auf einer 2 Layer Platine das irgendwie abständig geregelt bekommt und 4 Layer sind mir zu Teuer. > Na ja, nimmste halt einen Cyclone 2 PQFP240 (EP2C20) ;-) *grins* und mich schon wieder in eine neue Software einarbeiten? Hmhm... Außerdem ist das als ob man die Glaubensrichtung wechselt... ;-)
War natürlich nicht ernst gemeint mit dem Cyclone :-) Habe eben die Bauteile auf einen Ausdruck der Platine überprüft. Das war auch ganz gut. Neben den grösseren LEDs sind die Widerstandsnetzwerke kleiner als gedacht. Habe jetzt die Platine angepasst. Ich denke spätestens am Wochenende werde ich die Bestellung rausschicken. Schöne Grüsse Michael
Michael wrote: > War natürlich nicht ernst gemeint mit dem Cyclone :-) > Ja schon klar ;-) Aber vielleicht sollte man was Flexibler sein und seinen Standartkram wechseln? Wenn du bestellen kannst warte nicht auf mich. Ich will mich jetzt auch nicht hetzen und tausend Fehler auf der Platine haben... da gebe ich lieber etwas mehr aus und spare Zeit und Nerven. Viele Grüße, Christian
Hallo Christian(s) kurz zur Info. Die Platinen, hergestellt von Olimex, habe ich jetzt erhalten. Nach der Bestückung funktionierten sie direkt -> Super!! Vielen Dank noch einmal an Eure Unterstützung! Anbei zwei Fotos. Schöne Grüsse Michael
Sieht ja ganz gut aus! Ich plane demnächst auch bei diesem Platinenhersteller etwas zu bestellen. Was sagst du zur Qualität der Platinen? Viele Grüße, Christian
Also wenn man mit 10 mil hinkommt, dann sind die Platinen für den Preis super. Ich habe für eine 160x100mm Platine mit mehr als 500 Löchern inkl. Versand 40 Euro bezahlt. Auf der Platine haben die entsprechend meiner Wünsche 22 kleine Platinen aufgebracht und nach der Herstellung auch noch ausgeschnitten. Herstellung dauerte 5 Tage, Versand als eingeschriebener Brief eine Woche. Ich fands super und werde sicherlich da noch einmal bestellen. Wenn man allerdings kleinere Strukturen braucht als 10 mil, dann muss man wohl mehr ausgeben. Viele Grüsse Michael
Hm toll. Die Pads eines ICs sind 9,65mil auseinander. Aber das könnte ja noch im Toleranzbereich liegen. Ab besten ich frage einfach mal. Ich hoffe die sprechen da nicht nur Bulgarisch. Was ich bei denen auch Toll finde ist, dass man die Platinendicke auswählen kann. Bei 0,5mm Dicke bekommt man ganz andere Impedanzen hin als sonst auf 2 Layer Boards. Schade finde ich, dass sie nicht sowas wie QPCB haben, dass man auch kleinere Platinen bestellen kann, und die dann auf einer Platine die Bestellungen von mehreren Kunden fertigen. Meine Platine ist 70x40mm und ich muss echt überlegen was ich noch brauchen könnte ;-) Hat das zuschneiden extra gekostet? Viele Grüße, Christian
Nein, das Zuschneiden ist kostenlos. Man muss denen allerdings ein Bild senden, wie man die einzelnen Platinen auf die Euro-Platine platzieren möchte, und auch angeben, wie die Platinen geschnitten werden sollen. Steht alles auf der Webseite genau beschrieben. Auf jeden Fall einmal genau durchlesen. Für Zusatzarbeiten, die die dort machen müssen, kommen immer ein paar Euro hinzu, also z.B. wenn Du kein Bild sendest, wie Dur die Platinen aneinandergereiht haben willst. Oder wenn Du die Schnitttechnik mit den sauberen Kanten wähllst, aber hierfür keine 2mm Abstand lässt zwischen den Boards. Ich hatte z.B. zwei unübliche Bohrdurchmesser auf meinen Platinen. Das machte dann 1 Euro je Bohrtyp Aufpreis. Schöne Grüsse Michael P.S.: Die Platinen funktionieren wirklich toll. Ich habe auf beiden Boards mal eine USBBlaster-Emulation geladen. Einmal nur mit dem FX2, einmal in den CPLD, wobei der FX2 nur den USB-Transfer macht. Klappt wunderbar. So billig kriegt man sonst keinen USB-FPGA-Progger ;-)
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.