Forum: Mikrocontroller und Digitale Elektronik Einstieg in Cypress FX2 Programmierung


von Christian H. (cavorca)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von pumpkin (Gast)


Lesenswert?

> 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  ;-)

von Christian H. (cavorca)


Lesenswert?

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.

von Johnny Maxwell (Gast)


Lesenswert?


von Christian H. (cavorca)


Lesenswert?

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?

von Christian H. (cavorca)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

Wie sieht denn deine descr.a51 aus? Sind da die Endpunkte eingetragen, 
die du haben willst?

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

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? ;-)

von Christian H. (cavorca)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Christian H. (cavorca)


Lesenswert?

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.

von MmVisual (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

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?

von Christian H. (cavorca)


Lesenswert?

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

von Dieter (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

@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.

von Christian R. (supachris)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Christian H. (cavorca)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Und das Board von oben...

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

von unten...

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Und beide Seiten ohne Masseflächen...

von Christian H. (cavorca)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

> 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

von Christian R. (supachris)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

> 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.

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von Christian H. (cavorca)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

P.S.: Bauteile sind soeben angekommen. Werde heute abend die 
Bauteilgrössen mit der Platine überprüfen. :-)

von Christian H. (cavorca)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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... ;-)

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

und die Unterseite...

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.