Hallo zusammen, auf vielen FPGA Boards sitzt ja ein FT2232H für JTAG drauf. Jetzt möchte ich selber ein kleines FPGA Board basteln und dort natürlich auch gleich einen JTAG Adapter drauf haben der entweder von Vivado oder Quartus erkannt wird (je nach FPGA). Geht/genügt es, dass man die Konfiguration des FT2232H bei anderen FPGA Boards z. B. mit FT_PROG ausliest und dann auf den neuen FT2232H auf dem neuen Board flasht oder dort ins EEPROM schreibt? Dass man FT2232H passend mit dem FPGA verbinden muss ist mir klar.
:
Bearbeitet durch User
Moin, es reicht ansich, dem FTDI die vid:pid des ML605 zu geben, dann tun die gängigen Tools bereits.
Bei den Digilent Programmern muss man den EEPROM Inhalt mit klonen, dann klappts.
Christian R. schrieb: > Bei den Digilent Programmern muss man den EEPROM Inhalt mit > klonen, dann > klappts. Um genau zu sein, die "User Area" auch. Dazu muss mann ein bissl programieren. Das Tolle ist: Der zweite Port is frei definierbar (im Rahmen des Moeglichen) ;)
:
Bearbeitet durch User
Ok, Danke. Bin aber noch am gucken ob ich überhaupt was mache, wenn wollte ich natürlich direkt Quartus/Vivado verwenden um das FPGA zu konfigurieren. Diese ganzen aktuellen FPGAs sind irgendwie nicht sehr bastlerfreundlich bis auf den MAX10. Ein Artix wird wohl sogar bei 4 lagiger Platine anspruchsvoll.
@Gustl, Frage aus Interesse: Warum wolltest Du etwas machen in Anbetracht existierender Boards und was schwebte Dir vor?
Tja einfach um das auch mal gemacht zu haben, weil man etwas lernt. Und ich habe sogar ein Projekt an die ich viele IOs brauche, das geht zwar mit den Lochraster Trenz Modulen gerade noch so, die haben 84 IOs, aber mehr wäre besser und die Signale müssten nicht über die Pfostenstecker.
So, jetzt bin ich gerade mitten drinnen. Mit FT_ReadEE kann ich das EEPROM auslesen. Aber das ist seltsam. Ich verwende C dafür und habe ein WORD EEPromData[256]={0}; angelegt. Dann lese ich 256 mal
1 | while(READ_ADR < 256){ |
2 | ftStatus = FT_ReadEE(FT2232H_ftHandle, READ_ADR, &EEPromData[READ_ADR]); |
3 | if (ftStatus == FT_OK) { |
4 | printf("FT_EE_READ %i\r\n", READ_ADR); |
5 | READ_ADR = READ_ADR +1; |
6 | }
|
7 | else { |
8 | printf("FT_EE_READ FAILED!\r\n"); |
9 | printf("%i\n\r", READ_ADR); |
10 | FT_Close(FT2232H_ftHandle); |
11 | return 0; |
12 | }
|
13 | }
|
und bekomme tatsächlich sinnvollen Inhalt. Aber warte, wieso 256 WORDS? Das EEPROM sind 2kBit, also 256Bytes, aber ein WORD sind doch 16Bits?! Oder ist WORD architektorabhängig und ich sollte uint16_t verwenden? Aber egal ob ich mit WORD oder uint16_t lese, ich bekomme das gleich Ergebnis. Und zwar Text in dem immer P.u.n.k.t.e drinnen sind zwischen den Buchstaben im Hexeditor. So, als würden jeweils 16Bits für ein Zeichen genutzt und die oberen 8Bits wären leer. Tja ... jedenfalls, wie schreibe ich das wieder zurück ins EEPROM? Mit FT_WriteEE habe ich es bereits versucht, aber wenn ich es dann wieder auslese sieht es kaputt aus. Edit: Funktioniert. Ich hätte die Compilerwarnungen nicht ignorieren sollen ...
:
Bearbeitet durch User
Wie ist das eigentlich mit diesem Prog_B Pin? Das normale JTAG hat ja nur 4 Pins + GND und V+ aber hier an einem Trenz Modul wird auch noch ein Prog_B bedient. Sprich wenn ich den FT2232H nur JTAG machen lasse funktioniert das nicht.
Prog_b dient dazu das FPGA neu booten zu lassen und zwar im per Mode Pins eingestellten Boot Mode. Ist quasi Kaltstart. JTAG geht aber immer und unabhängig davon, wenn nicht durch die Fuse das JTAG komplett lahmgelegt wurde.
Ui, das macht Mut, Danke! Also der FT2232H hat Ausgänge mit 3,3V. Die FPGA Config Bank ist aber mit 1,8V versorgt. Also ... habe ich da Pegelwandler dazwischengetan wie im Bildchen. Die Pegelwandler sind diese hier https://www.nxp.com/docs/en/data-sheet/NVT2003_04_06.pdf . Passt das so? Und wie ist das mit dem TDI und TDO, kommt das TDO vom FT2232H an das TDO vom FPGA oder muss das über Kreuz sein also TDI an TDO und TDO an TDI?
:
Bearbeitet durch User
Irgendwie funktioniert das mit den Pegelwandlern nicht, wo ist mein Fehler? Also zwischen FT2232H und Pegelwandler sehe ich TCK, TDI und TMS. Zwischen FPGA und Pegelwandler sehe ich manchmal auch TCK und TMS und sogar Flanken bei TDO. Aber TDI und TDO werden irgendwie nicht pegelgewandelt ... und die anderen Signale auch nur manchmal. Seltsam irgendwie.
Also der NVT2003 ist bidirektional. Vielleicht hätte ich lieber einen ADG3308 verbauen sollen ...
Gustl B. schrieb: > Irgendwie funktioniert das mit den Pegelwandlern nicht, wo ist mein > Fehler? Dein Fehler ist, dass Du ohne Not bidirektionale Bausteine genommen hast. Das kann man zwar machen, aber nur, wenn man genau weiß, was man da tut. Du nimmst besser 74AVC2T245 oder 74AVC1T45 oder etwas anderes aus dieser Serie. Du könntest auch 74LVC?T(2)45 nehmen, aber die 24mA Treiberleistung brauchst Du nicht unbedingt, und im Zweifel verursachen die nur Störungen. fchk
Gustl B. schrieb: > Ja, OK, aber bidirektional sollte doch trotzdem funktionieren? Wenn Du die geeignete Außenbeschaltung wählst und das Datenblatt genau liest und auch das nicht gesagte verstehst, und wenn Du die Funktionsweise genau verstanden hast, dann und nur dann ja. Die Erkennung der Datenrichtung ist recht trickreich und auch recht empfindlich - da reicht schon ein falscher Pullup oder Pulldown, um die zu stören. Daher: Wenn Du die Bidirektionalität nicht brauchst, dann Finger weg, wenn Du keine Probleme haben willst. fchk
OK, das habe ich schon verstanden. Ich habe den Stein vor allem verwendet weil ich den schonmal verwendet hatte. Und bidirektional finde ich eben nett weil man flexibel ist. Hier hängen noch weitere FPGA IOs am FTDI und vielleicht will man die später mal anders verwenden. Aber der Hinweis, dass das recht empfindlich ist war gut. Habe den Fehler gefunden und werde ihn am Wochenende beheben.
Mit (automatischen) bidirektionalen Pegelwandler habe ich auch schon schlechte Erfahrungen gemacht. Wenn die Pegel und Impedanzen nicht richtig passen, schaltet der auch schon mal in die falsche Richtung und lässt dann ggf. Strom fließen... Duke
Danke. So, jetzt bekomme ich TCK und TMS vom FTDI zum FPGA, TDO bekomme ich vom FPGA an den FTDI, aber TDI sehe ich nur auf der FTDI Seite vom NVT Pegelwandler und nicht auf der FPGA Seite. Irgendwie seltsam und ich bin auch ratlos wie ich das debuggen kann.
So, funktioniert. Hätte auch schon von Anfang an funktioniert. Ein Beinchen vom NVT2003 war minimal nach oben gebogen und hatte keinen Kontakt.
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.