<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stefan2</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stefan2"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Stefan2"/>
	<updated>2026-04-21T14:09:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Liste_von_FPGA_Eval_boards&amp;diff=93761</id>
		<title>Liste von FPGA Eval boards</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Liste_von_FPGA_Eval_boards&amp;diff=93761"/>
		<updated>2016-08-24T11:38:00Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: Lsite der ZTEX FPGA-Boards aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Evalboards, bzw. &amp;quot;Starter-Kits&amp;quot;, wie sie häufig bezeichnet werden, sind ein guter Ausgangspunkt für das Kennenlernen und eigene Entwicklungen. Diese boards sind meistens in grösseren Stückzahlen gefertigt und dienen den Herstellern zu Demonstrationszwecken, daher sind sie vergleichsweise billig.&lt;br /&gt;
&lt;br /&gt;
Aufpassen muss man bei Drittanbietern, die auf EBAY verkaufen. Die dort angebotenen Kits kommen vielfach von noname Herstellern aus China, die zwar oft sehr viel Zubehör enthalten, aber nicht selten den jeweils kleinst möglichen FPGA einer Baureihe einsetzen. Diese sind dann nur zum Kennenlernen gut.&lt;br /&gt;
&lt;br /&gt;
== Boards für Xilinx-FPGAs ==&lt;br /&gt;
Wichtig bei der Entscheidung, welches Board man nehmen sollte, ist die Verfügbarkeit von freier Software. Die kostenlose Webedition der Xilinx ISE ist für ausgewählte FPGA&#039;s zum Beispiel für nahezu alle Spartan3 + Derivate und für Spartan 6 LX4 bis LX75T verfügbar. Unterstüzte Typen sind dort gelistet: [http://www.xilinx.com/publications/matrix/Software_matrix.pdf] &lt;br /&gt;
&lt;br /&gt;
=== Einige Boards tabellarisch===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;fpgaevalboards&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichn.&lt;br /&gt;
! Preis (&amp;amp;euro;)&lt;br /&gt;
! FPGA&lt;br /&gt;
! RAM (MByte)&lt;br /&gt;
! Flash (MByte)&lt;br /&gt;
! USB&lt;br /&gt;
! Ethernet&lt;br /&gt;
! RS-232&lt;br /&gt;
! µC&lt;br /&gt;
! Eingabe&lt;br /&gt;
! sonst.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.knjn.com/board_Xylo.html Xylo-L]&lt;br /&gt;
| 130&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| 10base-T&lt;br /&gt;
| -&lt;br /&gt;
| LPC213x&lt;br /&gt;
| -&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xilinx.com/products/boards-and-kits/HW-SPAR3A-SK-UNI-G.htm Spartan3A Starter Kit]&lt;br /&gt;
| 189&lt;br /&gt;
| XC3S700A-FG484&lt;br /&gt;
| 32M x 16 DDR2 SDRAM&lt;br /&gt;
| 4 Mbit Platform Flash PROM, 32MB parallel Flash, 2-16 Mbit SPI Flash&lt;br /&gt;
| (JTAG)&lt;br /&gt;
| 10/100&lt;br /&gt;
| 1 In + 1 Out&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 1 Drehgeber, 4 Schalter&lt;br /&gt;
| 4-ch D/A, 2-ch A/D, Signal amplifier, Coolrunner CPLD, 100-pin expansion connector, Stereo mini-jack, 8 LEDs, 15-Pin VGA (4096)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.xilinx.com/s3estarter Digilent Spartan3e Starter Kit]&lt;br /&gt;
| 180&lt;br /&gt;
| XC3S500E, auch mit 1200er&lt;br /&gt;
| 64 DDR2-SDRAM&lt;br /&gt;
| 16&lt;br /&gt;
| (JTAG)&lt;br /&gt;
| 10/100&lt;br /&gt;
| 1 In + 1 Out&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 1 Drehgeber, 4 Schalter&lt;br /&gt;
| Coolrunner CPLD, LCD, 3-Bit VGA, PS/2&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=S3BOARD Digilent Spartan-3]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200 XC3S400 XC3S1000&lt;br /&gt;
| 16 SDRAM&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA, PS/2, 7seg&lt;br /&gt;
|-&lt;br /&gt;
| Digilent Atlys&lt;br /&gt;
| 399 (acad.: 199)&lt;br /&gt;
| XC6SLX45&lt;br /&gt;
| 16&amp;lt;br&amp;gt;(Cellular RAM)&lt;br /&gt;
| 16 (parallel) +&amp;lt;br&amp;gt;16 (SPI)&lt;br /&gt;
| 3x:&amp;lt;br&amp;gt;USB prog.&amp;lt;br&amp;gt;USB Host&amp;lt;br&amp;gt;USB UART&lt;br /&gt;
| 10/100/1000&amp;lt;br&amp;gt;Marvel&amp;lt;br&amp;gt;PHY&lt;br /&gt;
| 1x&amp;lt;br&amp;gt;(virtueller COM-Port über USB)&lt;br /&gt;
| ...&amp;lt;br&amp;gt;(USB HID Host) &lt;br /&gt;
| 5 Taster, 8 Schalter, X LEDs,&lt;br /&gt;
| Programmierbar über JTAG, USB Port oder USB Stick, Versorgung über Netzteil (5V), Clock: 100MHz, 1x PMOD Expansion, VHDC I/O-Port Connector&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys]]&lt;br /&gt;
| 100&lt;br /&gt;
| XC3S200/400/1000&lt;br /&gt;
| 16&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| 7seg, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [[Digilent Nexys 2]]&lt;br /&gt;
| 92 (121)&lt;br /&gt;
| XC3S500E (1200E)&lt;br /&gt;
| 16&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| 1x&lt;br /&gt;
| Cypress FX2 &lt;br /&gt;
| 4 Taster, 8 Schalter, 8 LEDs, PS/2 Maus/Kbd.&lt;br /&gt;
| 4x7 Seg, Progr. &amp;amp; Versorg. über USB oder über Netzteil (5V-15V), VGA&lt;br /&gt;
|-&lt;br /&gt;
| Digilent Nexys 3&lt;br /&gt;
| 180 (acad.: 108)&lt;br /&gt;
| XC6SLX16&lt;br /&gt;
| 16&amp;lt;br&amp;gt;(Cellular RAM)&lt;br /&gt;
| 16 (parallel) +&amp;lt;br&amp;gt;16 (SPI)&lt;br /&gt;
| 3x:&amp;lt;br&amp;gt;USB prog.&amp;lt;br&amp;gt;USB Host&amp;lt;br&amp;gt;USB UART&lt;br /&gt;
| 10/100&amp;lt;br&amp;gt;Ethernet&amp;lt;br&amp;gt;PHY&lt;br /&gt;
| 1x&amp;lt;br&amp;gt;(virtueller COM-Port über USB)&lt;br /&gt;
| PIC24FJ192&amp;lt;br&amp;gt;(USB HID Host) &lt;br /&gt;
| 5 Taster, 8 Schalter, 8 LEDs, USB Maus/Kbd.&lt;br /&gt;
| Programmierbar über JTAG, USB Port oder USB Stick, 4x7 Seg, Versorg. über USB oder über Netzteil (5V), 8bit VGA, Clock: 100MHz, 4x PMOD Expansion, VHDC I/O-Port Connector&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uxibo.de Uxibo]&lt;br /&gt;
| 88&lt;br /&gt;
| XC2S200E&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 1.1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 4 Taster, 8 Schalter&lt;br /&gt;
| VGA I/O, Videomux, dual PS/2, 7seg, Buzzer, IOs auf Pinleisten, dual-channel FTDI2232C, 48 MHz + prog. Oszillator, Programmierung &amp;amp; Stromversorgung über USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fpgaz.com/wiki/doku.php?id=fpgaz:usbp:hw FPGAz USBP]&lt;br /&gt;
| $135&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| Cypress FX2&lt;br /&gt;
| 2 Taster&lt;br /&gt;
| 8 LEDs, I2C-EEPROM&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys-shop.com/de/FPGA-Karten/Spartan-6/EFM02.html Cesys EFM02] &lt;br /&gt;
| 364&lt;br /&gt;
| XC6SLX45 oder XC6SLX150&lt;br /&gt;
| 256&lt;br /&gt;
| 16 Mb&lt;br /&gt;
| 3.0 SuperSpeed&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-3&lt;br /&gt;
| Leds&lt;br /&gt;
|191 I/O, USB 3.0 nach AMBA AXI4 bridge IP (via GPIF2), Referenz-Designs&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys-shop.com/de/FPGA-Karten/USBS6.html Cesys USBS6] &lt;br /&gt;
| 298&lt;br /&gt;
| XC6SLX16&lt;br /&gt;
| 128&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| Drehschalter, Leds.&lt;br /&gt;
|115 I/O signale, einstellbarer IO Standard, zweiter USB Port (FT232), WIN 32&amp;amp;64 Bit und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cesys-shop.com/de/FPGA-Karten/Spartan-3/EFM-01.html Cesys EFM01]  &lt;br /&gt;
| 124&lt;br /&gt;
| XC3S500E&lt;br /&gt;
| -&lt;br /&gt;
| 4&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| FX-2&lt;br /&gt;
| -&lt;br /&gt;
| 28 x 44mm, 50 I/O auf 2.54mm Stiftleiste, WIN und LINUX Treiber&lt;br /&gt;
|-&lt;br /&gt;
| [http://shop.trenz-electronic.de/catalog/product_info.php?products_id=456 Avnet Spartan 3A Evaluation Kit]&lt;br /&gt;
| 50&lt;br /&gt;
| XC3S400A&lt;br /&gt;
| -&lt;br /&gt;
| 16&lt;br /&gt;
| 2.0&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| WIN und LINUX Treiber, 4 Sensortasten&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.ct-lab.de FPGA-Karte aus dem c´t-Lab]&lt;br /&gt;
| 92&lt;br /&gt;
| XC3S400&lt;br /&gt;
| -&lt;br /&gt;
| SD-Kartenslot (Bitstream-File wird über µC ins FPGA geladen, Dateiauswahl via Systembus oder Panel oder fest einstellbar)&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| via IFP-Karte und Systembus an µC&lt;br /&gt;
| ATmega644&lt;br /&gt;
| optionales Bedienpanel mit LCD-Display, Drehgeber und Taster&lt;br /&gt;
| Bestandteil des Laborsystems c´t-Lab der Zeitschrift c´t.&lt;br /&gt;
VGA-Buchse, SD-Kartenslot (u.a. auch zum Laden des FPGA). Preis für FPGA-Platine mit verlöteten SMD-Bauteilen und Teilesatz. Optionale Erweiterungskarten mit schnellen DACs, Eingangskomparator, SRAM, Echtzeituhr, PS/2, RS232 (am FPGA). Optionaler JTAG-Adapter. &lt;br /&gt;
http://www.ct-lab.de, http://www.segor.de, http://thoralt.ehecht.com/phpbb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Details zu einigen Boards:&lt;br /&gt;
&lt;br /&gt;
=== Avnet ===&lt;br /&gt;
==== Spartan 6 LX150T  ====&lt;br /&gt;
* Spartan-6 FPGA LX 150T&lt;br /&gt;
* 64 bit, 66 MHz, 3.3 PCIe interface&lt;br /&gt;
* 32Mbit Flash Memory&lt;br /&gt;
* serielles EEproms&lt;br /&gt;
* 8 LEDs&lt;br /&gt;
* 4 SMD Drucktaster&lt;br /&gt;
* 10/100/1000 Intel Ethernet PHY (Intel)&lt;br /&gt;
* USB Controller Host&lt;br /&gt;
* Serial Interface RS 232&lt;br /&gt;
* Serial GB Transceiver Interface (GTP)&lt;br /&gt;
* SD-Card Slot&lt;br /&gt;
* 2 Stk SAMTEC FMC SteckPorts mit 160 Pins belegt&lt;br /&gt;
* Webseite: http://www.avnet.com&lt;br /&gt;
* Preis ca. €999,- (inkl MwSt.)&lt;br /&gt;
* Erhältlich solo und auch im S6 Video Kit sowie S6 Ethernet Kit&lt;br /&gt;
* optionales Zubehör: Videokarte DVI IO, Transceiver Kit,&lt;br /&gt;
* Auslaufmodell!! - Ist inzwischen nicht mehr verfügbar&lt;br /&gt;
&lt;br /&gt;
==== Spartan-6 LX9 MicroBoard ====&lt;br /&gt;
* Spartan-6 LX9-2CSG324&lt;br /&gt;
* 64 MB LPDDR SDRAM &lt;br /&gt;
* 128 Mb Multi-I/O SPI Flash &lt;br /&gt;
* 10/100 Ethernet PHY &lt;br /&gt;
* USB-2-UART port &lt;br /&gt;
* On-board USB JTAG Schaltung &lt;br /&gt;
* Two 2x6 PMOD expansion ports &lt;br /&gt;
* Programmierbarer Taktgenerator &lt;br /&gt;
* USB-interface &lt;br /&gt;
* 4 User LEDs &lt;br /&gt;
* 4-fach DIP switch &lt;br /&gt;
* Reset und PROG buttons&lt;br /&gt;
&lt;br /&gt;
=== Altium Evaluation Boards ===&lt;br /&gt;
Die Firma Altium hat verschiedene FPGA Evaluationbords entwickelt:&lt;br /&gt;
* Board EB1 (LiveDesign), obsolet; manchmal beim großen Versteigerer zu haben für ca. 100 EUR&lt;br /&gt;
* Board NB1 (Nanoboard 1), dürfte obsolet sein&lt;br /&gt;
* Board NB2, immer noch aktuell, mehrere Erweiterungskarten verfügbar, Kosten ca. 1.800 EUR&lt;br /&gt;
* Board NB3000, sehr gut ausgestattetes, kompaktes Board, Kosten ca. 340 EUR ~ 400 EUR, je nach FPGA-Familie. Erhältlich mit Altera, Xilinx oder Lattice-Chip&lt;br /&gt;
&lt;br /&gt;
folgendes gilt für alle Altium FPGA Evaluation Boards:&lt;br /&gt;
* Kompatibel mit den LiveDesign-fähigen Entwicklungstools von Altium&lt;br /&gt;
* Die Altium-Software nutzt direkt die Programmier-Software des jeweiligen FPGA-Herstellers (nicht bei EB1)&lt;br /&gt;
* im Lieferumfang sind alle nötigen Kabeln und ein Netzteil, um mit dem entsprechenden Board loslegen zu können&lt;br /&gt;
* die Boards enthalten eine sogenannte &amp;quot;SoftDesign&amp;quot; Lizenz für Altium Designer, gültig 1 Jahr. Sehr große Software-Bibliothek, inkl. verschiedener 8Bit- und einem 32Bit-Softcore, mit passenden Compilern. Per JTAG sind auch eigene Boards programmierbar.&lt;br /&gt;
&lt;br /&gt;
speziell für das nicht mehr erhältliche EB1 LiveDesign Board gelten folgende Punkte:&lt;br /&gt;
* Xilinx XC3S1000-4FG456C, wahlweise aber auch mit Altera EP1C12F324C8&lt;br /&gt;
* Peripherie: LEDs, Dip-Schalter, 6-stellige Siebensegmentanzeige, Taster, Stereo-DAC, zwei 256K x 16 RAMs&lt;br /&gt;
* &#039;&#039;kein&#039;&#039; on-board Flash RAM für FPGA-Konfiguration, diese muss nach dem Einschalten neu geladen werden&lt;br /&gt;
* Ports: PS2-Maus &amp;amp; -Tastatur, RS232, VGA (512 Farben), 2x18 IO-Pins für eigene Erweiterungen&lt;br /&gt;
&lt;br /&gt;
=== CESYS ===&lt;br /&gt;
http://www.cesys.com&lt;br /&gt;
&lt;br /&gt;
Cesys ist Entwickler und Hersteller von Xilinx FPGA-boards und all programmable soc boards  mit Sitz in Herzogenaurach.&lt;br /&gt;
&lt;br /&gt;
* Das Lieferprogramm beinhaltet boards mit USB, Ethernet, PCI und PCIe Schnittstellen.&lt;br /&gt;
* Je nach Ausführung mit Spartan, Virtex oder Zynq 7000 AP Soc.&lt;br /&gt;
* Es sind verschiedene Speichervarianten erhältlich: SO-DIMM, SRAM, SDRAM, LPDDR, DDR2, DDR3.&lt;br /&gt;
* Der Hersteller bietet kostenlose referenz-designs zum Download an.&lt;br /&gt;
* Sonderboards und Bestückungsvarianten nach Kundenwunsch.&lt;br /&gt;
&lt;br /&gt;
=== Digilent ===&lt;br /&gt;
www.digilentinc.com&lt;br /&gt;
Digilent ist der Produzent der Standardboards von/für Xilinx. Siehe Tabelle.&lt;br /&gt;
==== Atlys ====&lt;br /&gt;
Das Atlys ist das aktuellste S6-Board von Digilent. Es enthält einen Spartan S6LX45, einen Marvel Alaska PHY, DDR2-SDRAM sowie auch SRAM sowie einen USB-Controller und Seriell-COM über USB. Auf das klassische VGA mit Widerständen wurde verzichtet. Stattdessen gibt es DVI/HDMI mit 2 Ein- und Ausgängen, davon sind 2 HDMI inputs und 1 HDMI output jeweils mit TMDS-buffern, sowie einen GP HDMI als Mini-D ohne jeglichen Buffer (als in oder output)&lt;br /&gt;
&lt;br /&gt;
==== Nexys ====&lt;br /&gt;
siehe Tabelle oben&lt;br /&gt;
&lt;br /&gt;
==== S3E ====&lt;br /&gt;
Das S3E Starterkit war das erste board für S3E. Es enthält standardmässig einen 500er Chip ist aber auch als 1500er erhältlich, was das mindeste für echte Entwicklungen ist. Es birgt einen 100MBi PHY, DDR2-RAM, Flash sowie sowie einen USB-Controller. VGA ist nur über 3 Pins realisierbar.&lt;br /&gt;
==== S3A ====&lt;br /&gt;
Das S3A Starterkit ist das aktuelle board für Spartan 3 FPGAs. Es enthält standardmässig einen GB-Phy, sowie einen USB-Controller. VGA ist über 12 Pins realisierbar.&lt;br /&gt;
&lt;br /&gt;
===  Enterpoint ===&lt;br /&gt;
Enterpoint is ein Hersteller von FPGA-Boards in GB. Er bietet insbesondere Arrays mit mehreren FPGAs an. Siehe http://enterpoint.co.uk/&lt;br /&gt;
&lt;br /&gt;
==== Raggedstone 1 - Spartan-3 PCI-Karte ====&lt;br /&gt;
* Spartan-3 FPGA FG456-Package&lt;br /&gt;
* 32 bit, 33 MHz, 3.3/5V PCI interface&lt;br /&gt;
* 4Mbit Flash Memory&lt;br /&gt;
* 16KBit serielles EEprom&lt;br /&gt;
* 4 x 7 Segment Anzeigen LED, abnehmbar&lt;br /&gt;
* LM75 Temperatursensor&lt;br /&gt;
* viele DIL-Header für eigene Erweiterungen, verschiedene werden auch durch Hersteller angeboten&lt;br /&gt;
* 2 Drucktaster&lt;br /&gt;
* Mit dem PCI-Interface kann bei entsprechender Programmierung des FPGA auf den PCI-Bus eines Hostrechners zugegriffen werden, Beispieldesign unter http://projects.varxec.net/raggedstone1&lt;br /&gt;
* Webseite: http://www.enterpoint.co.uk/moelbryn/raggedstone1.html&lt;br /&gt;
* Preis als Raggedstone1 RS1-400C £155.00 + £25 Versand -&amp;gt; ca 230 Euro inkl.&lt;br /&gt;
&lt;br /&gt;
==== Raggedstone 2 - Spartan-6 PCI-Karte ====&lt;br /&gt;
* XilinxTM SpartanTM-6 FPGA, FGG484 package mit XC6SLX25T bis XC6SLX150T&lt;br /&gt;
* PCI Express Interface&lt;br /&gt;
* PCIe Gen1 (2.5 GBits-raw) interface&lt;br /&gt;
* 128Mbit SPI Flash Memory (configuration)&lt;br /&gt;
* 1 Gbit, X16, DDR3 SDRAM memory&lt;br /&gt;
* 1 x 16KBit serial EEprom&lt;br /&gt;
* LM75 Temperature Sensor fitted.&lt;br /&gt;
* DIL Header 68 I/O with LVDS support&lt;br /&gt;
* 4 digit LED - removable&lt;br /&gt;
* 4 LEDs.&lt;br /&gt;
* LVDS Clock Module Header&lt;br /&gt;
* 2 push switches fitted.&lt;br /&gt;
* Preis als Raggedstone2 RS2-45T £250.00 + £25 Versand&lt;br /&gt;
&lt;br /&gt;
==== Merrick 1 - FPGA-Development Array ====&lt;br /&gt;
* 10 x 10 array mit Xilinx™ Spartan™-3A DSP XC3SD3400A-4CSG484C&lt;br /&gt;
* commercial -5 and industrial -4 grade&lt;br /&gt;
* auch mit XC3SD1800A alternativ bestückbar (free Webpack™ ISE™ software!)&lt;br /&gt;
* Controller FPGA – Xilinx™ Virtex™-5 XC5VLX30T.&lt;br /&gt;
&lt;br /&gt;
==== Merrick 3 - Development Plattform mit 24 FPGAs ====&lt;br /&gt;
* 24 array FPGAs – mit entweder XC6SLX45, XC6SLX75, XC6SLX100 or XC6SLX150&lt;br /&gt;
* bis zu 180 DSP48 (18×18 multiplier + adder + accumulator) slices per FPGA&lt;br /&gt;
* bis zu 184K flip-flops&lt;br /&gt;
* bis zu 147K logic elemente&lt;br /&gt;
* bis zu 268 block SRAMs (18Kb) per array FPGA&lt;br /&gt;
* 16 DDR3 memories X16 interface at 625-800 Mbits/s&lt;br /&gt;
&lt;br /&gt;
=== Trenz-Electronic ===&lt;br /&gt;
Trenz bietet im Bereich FPGAs vor allem Xilinx-Produkte an. Dazu zählen Eigenentwicklungen sowie der Vertrieb von Digilentboards. Siehe: http://www.trenz-electronic.de/products.html&lt;br /&gt;
&lt;br /&gt;
==== Spartan 3E-Serie ====&lt;br /&gt;
* Kleines FPGA Board mit ucLinux und Virtex-II PowerPC, optional: ucLinux und Microblaze Softprozessor im Spartan-3 FPGA&lt;br /&gt;
* TE0320 (Spartan-3A DSP) Industrial Micromodule mit bis zu 18000 / 34000 Systemgattern&lt;br /&gt;
* TE0300 (Spartan-3E) Industrial Micromodule mit 200 bis 1000 Systemgattern&lt;br /&gt;
==== Spartan 6-Serie ====&lt;br /&gt;
* TE0630 (Spartan-6) Industrial Micromodule mit bis zu 150000 Gattern mit den Typen LX45, LX75, LX100 und LX150&lt;br /&gt;
* GigaBee XC6SLX (Spartan-6LX) Industrial Micromodule, Typen LX45, LX100 und LX150&lt;br /&gt;
&lt;br /&gt;
==== Andere ====&lt;br /&gt;
* Pal/Gal kompatible FPGA und CPLD Module&lt;br /&gt;
&lt;br /&gt;
=== Simple-Solutions ===&lt;br /&gt;
http://www.simple-solutions.de/de/products/index.php&lt;br /&gt;
Mehrere Spartan3-FPGAs - Boards&lt;br /&gt;
&lt;br /&gt;
=== ZTEX ===&lt;br /&gt;
&lt;br /&gt;
ZTEX ist Entwickler und Hersteller von FPGA-Boards mit Sitz in Deutschland. Die Homepage ist http://www.ztex.de.&lt;br /&gt;
&lt;br /&gt;
Besonderheit bei ZTEX ist das quelloffene SDK für FPGA-Boards auf EZ-USB FX2 und FX3 Basis. Das SDK umfasst sowohl die Geräteseite (Firmware) als auch den Host (Host-Software). Die Firmware wird mittels Makrobefehlen konfiguriert und die USB-Deskriptoren (einschließlich der Endpoint-Deskriptoren) werden automatische erzeugt. Weitere Infos befinden sich auf http://www.ztex.de/firmware-kit/index.d.html&lt;br /&gt;
&lt;br /&gt;
Eine weitere Besonderheit ist der DeviceServer (Bestandteil des SDK) welcher den Gerätezugriff via Web-Interface ermöglicht, siehe http://wiki.ztex.de/doku.php?id=en:software:deviceserver&lt;br /&gt;
&lt;br /&gt;
==== Artix 7 USB-FPGA-Modul 2.16 ====&lt;br /&gt;
* FPGA-Board mit Xilinx Artix 7 XC7A200T FPGA (XC7A100T auf Anfrage)&lt;br /&gt;
* High-Speed (480 MBit/s) USB-Schnittstelle&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller&lt;br /&gt;
* 100 General-Purpose-I/O&#039;s (GPIO)&lt;br /&gt;
* On-Board Spannungsregler&lt;br /&gt;
* 128 MBit Flash-Speicher (z.B. für den Bitstream)&lt;br /&gt;
* 128+2 KBit EEPROM (z.B. zum Speichern von Firmware und Einstellungen)&lt;br /&gt;
* Schnelle FPGA-Konfiguration mittels CPLD&lt;br /&gt;
* Memory-Mapped-I/O zwischen EZ-USB FX2 und FPGA&lt;br /&gt;
* Open Source SDK mit vielen Bespielen&lt;br /&gt;
* Mehr Infos auf http://www.ztex.de/usb-fpga-2/usb-fpga-2.16.d.html&lt;br /&gt;
&lt;br /&gt;
==== Artix 7 USB-FPGA-Modul 2.14 mit RAM ====&lt;br /&gt;
* Erhältlich mit 4 Artix 7 Varianten: XC7A15T, XC7A35T, XC7A50T, XC7A75T, XC7A100T&lt;br /&gt;
* &#039;&#039;&#039;USB 3.0 Schnittstelle via EZ-USB FX3 Mikrocontroller&#039;&#039;&#039;&lt;br /&gt;
* 100 General-Purpose-I/O&#039;s (GPIO)&lt;br /&gt;
* On-Board Spannungsregler&lt;br /&gt;
* 256 MByte DDR3 SDRAM&lt;br /&gt;
* 128 MBit Flash-Speicher (zum Speichern von Firmware und Bitstream)&lt;br /&gt;
* SD-Karten-Slot (SDIO wird unterstützt)&lt;br /&gt;
* 2 KBit EEPROM (zum Speichern von Einstellungen)&lt;br /&gt;
* Schnelle FPGA-Konfiguration mittels CPLD&lt;br /&gt;
* Open Source SDK mit vielen Bespielen&lt;br /&gt;
* Mehr Infos auf http://www.ztex.de/usb-fpga-2/usb-fpga-2.14.d.html&lt;br /&gt;
&lt;br /&gt;
==== Artix 7 USB-FPGA-Modul 2.13 mit RAM ====&lt;br /&gt;
* Erhältlich mit 4 Artix 7 Varianten: XC7A35T, XC7A50T, XC7A75T, XC7A100T&lt;br /&gt;
* USB 2.0 Schnittstelle via EZ-USB FX2 Mikrocontroller&lt;br /&gt;
* 100 General-Purpose-I/O&#039;s (GPIO)&lt;br /&gt;
* On-Board Spannungsregler&lt;br /&gt;
* 256 MByte DDR3 SDRAM&lt;br /&gt;
* 128 MBit Flash-Speicher (z.B. für den Bitstream)&lt;br /&gt;
* 128+2 KBit EEPROM (z.B. zum Speichern von Firmware und Einstellungen)&lt;br /&gt;
* Schnelle FPGA-Konfiguration mittels CPLD&lt;br /&gt;
* Open Source SDK mit vielen Bespielen&lt;br /&gt;
* Mehr Infos auf http://www.ztex.de/usb-fpga-2/usb-fpga-2.13.d.html&lt;br /&gt;
&lt;br /&gt;
==== Spartan 6 USB-FPGA-Modul 2.04 mit RAM ====&lt;br /&gt;
* FPGA-Board mit Xilinx Spartan XC6SLX16 FPGA&lt;br /&gt;
* High-Speed (480 MBit/s) USB-Schnittstelle&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller&lt;br /&gt;
* 96 General-Purpose-I/O&#039;s (GPIO)&lt;br /&gt;
* On-Board Spannungsregler&lt;br /&gt;
* 64 MByte DDR SDRAM&lt;br /&gt;
* 128 MBit Flash-Speicher (z.B. für den Bitstream)&lt;br /&gt;
* 128 + 2 KBit EEPROM (z.B. zum Speichern von Firmware und Einstellungen)&lt;br /&gt;
* Open Source SDK mit vielen Bespielen&lt;br /&gt;
* Mehr Infos auf http://www.ztex.de/usb-fpga-2/usb-fpga-2.04.d.html&lt;br /&gt;
&lt;br /&gt;
==== Spartan 6 USB-FPGA-Modul 2.01 ====&lt;br /&gt;
* FPGA-Board mit Xilinx Spartan XC6SLX16 FPGA&lt;br /&gt;
* High-Speed (480 MBit/s) USB-Schnittstelle&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller&lt;br /&gt;
* 100 General-Purpose-I/O&#039;s (GPIO)&lt;br /&gt;
* On-Board Spannungsregler&lt;br /&gt;
* 128 MBit Flash-Speicher (z.B. für den Bitstream)&lt;br /&gt;
* 128 + 2 KBit EEPROM (z.B. zum Speichern von Firmware und Einstellungen)&lt;br /&gt;
* Open Source SDK mit vielen Bespielen&lt;br /&gt;
* Mehr Infos auf http://www.ztex.de/usb-fpga-2/usb-fpga-2.01.d.html&lt;br /&gt;
&lt;br /&gt;
== Boards für Altera-FPGAs ==&lt;br /&gt;
&lt;br /&gt;
Bei Altera ist die kostenlose Webversion von Quartus für kleine Stratix und die meisten Cyclone verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Gleichmann Research ===&lt;br /&gt;
&lt;br /&gt;
==== Hpe Mini AC II - Cyclone II board ====&lt;br /&gt;
* Altera Cyclone II EP2C35 FPGA (speed grade 6)&lt;br /&gt;
* Mit reprogrammierbarem Flash zur automatischen FPGA-Konfiguration&lt;br /&gt;
* 25 pin SUB-D connector (parallel) für direktes FPGA-Programmieren&lt;br /&gt;
* RS232 (9 pin SUB-D) &lt;br /&gt;
* VGA (15 pin SUB-D) mit 64 möglichen Farben&lt;br /&gt;
* Ethernet 10/100 Mbit/s, full/half duplex&lt;br /&gt;
* 1 USB 2.0 compatible full-speed target connector&lt;br /&gt;
* 3 USB 2.0 compatible full-speed host connectors&lt;br /&gt;
* Santa Cruz connector mit 40 nutzbaren I/Os&lt;br /&gt;
* Audio interface (line-in and line-out) mit CODEC&lt;br /&gt;
* SODIMM144 Sockel für (SDRAM) 256MB&lt;br /&gt;
* SDRAM-Speichersockel mit nur 32-Bit angebunden, die Hälfte des Speichers bleibt nicht nutzbar&lt;br /&gt;
* 25 MHz oscillator&lt;br /&gt;
* Prototyping area, Lötfläche&lt;br /&gt;
* 8 LEDs, grün, blau, 3x4 key matrix, 4-bit DIP switch&lt;br /&gt;
* LCD connector, 2-character 7-segment display&lt;br /&gt;
* Single step Knopf und Reset Knopf&lt;br /&gt;
* Parallelportkabel für PC&lt;br /&gt;
* Beispieldesign, Testprogramme, Datenblätter&lt;br /&gt;
* LEON3-CPU Design inkl. Source Code, Quartus IDE, SnapGear Linux&lt;br /&gt;
* Bilder http://www.96khz.org/htm/gleichmann%20hpe%20mini%20audio%20and%20music%20workstation.htm&lt;br /&gt;
* Der auf dem FPGA verbaute Chip Cyclone II wird in der neuesten Alteraversion nicht mehr unterstützt&lt;br /&gt;
* Nicht mehr im Programm - war ca 399,-&lt;br /&gt;
* Die neueste Version des Boards dieses Herstellers unterstützt Lattice&lt;br /&gt;
&lt;br /&gt;
====HM-ALC-AS3====&lt;br /&gt;
* Modul mit zwei Altera Stratix™ III EP3S50F780-C2N FPGA oder EP3S150F780-C2N&lt;br /&gt;
* 126 single ended interconnections plus 28 LVDS pairs&lt;br /&gt;
* ALTERA USB Blaster® on board&lt;br /&gt;
* temperature controlled fan&#039;s(PWM)&lt;br /&gt;
&lt;br /&gt;
=== Terasic ===&lt;br /&gt;
Terasic ist sozusagen der Haus- und Hoflieferant für Entwicklungsboards von Altera. Praktisch alle Altera Boards werden von Terasic (Taiwan) gebaut.&lt;br /&gt;
&lt;br /&gt;
==== Altera Cyclone II 2C20 ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C7N FPGA mit 20000 LEs&lt;br /&gt;
* USB-BlasterTM download cable (integriert)&lt;br /&gt;
* EPCS4 serial configuration Flash&lt;br /&gt;
* 8-Mbyte SDRAM, 512-Kb SRAM, 4-Mbyte flash &lt;br /&gt;
* externer SMA - Clock-Eingang&lt;br /&gt;
* 24-bit Audio coder/decoder (CODEC) &lt;br /&gt;
* 10 Schalter, 4 Druckknöpfe inkl Reset &lt;br /&gt;
* 4St. 7-Segmentanzeigen, 10 rote LEDs + 8 grüne LEDs&lt;br /&gt;
* VGA, RS-232, and PS/2 Stecker&lt;br /&gt;
* Zwei 40-pin expansion ports + SD/MMC socket&lt;br /&gt;
* USB-Kabel, externes Steckernetztteil, CD-Rom&lt;br /&gt;
* Reference designs&lt;br /&gt;
* Qartus II Web Edition + NIOS II Web Edition&lt;br /&gt;
* http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html&lt;br /&gt;
* Listenpreis $150,-&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2 - Development and Education Board V2 ====&lt;br /&gt;
* Altera Cyclone II 2C35 FPGA mit 35000 LEs&lt;br /&gt;
* Altera Serial Configuration devices (EPCS16) für Cyclone II 2C35&lt;br /&gt;
* USB Blaster board zur Programmierung und User API&lt;br /&gt;
* 8 MB SDRAM, 4 MB Flash Memory, 512KB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, Ethernet, 10-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* Viele Besipiel mit Source Code wie TV, SD Music Player)&lt;br /&gt;
* [http://www.fh-wedel.de/fileadmin/mitarbeiter/bos/files/VHDL/VhdlEinfuehrung.pdf Kleines aber nettes Tutorial zum Altera DE2 Dev. Board]&lt;br /&gt;
* Listenpreis US $495,-&lt;br /&gt;
&lt;br /&gt;
==== Altera DE2-115 - Development and Education Board V3 ====&lt;br /&gt;
* Altera Cyclone IV FPGA mit 115000 LEs&lt;br /&gt;
* Altera Serial Configuration device EPCS64&lt;br /&gt;
* USB Blaster zur Programmierung und für User API&lt;br /&gt;
* User-Applikations und Steuerungssoftware&lt;br /&gt;
* 128 MB SDRAM, 8 MB Flash Memory, 2 MB SRAM&lt;br /&gt;
* SD Card Sockel, RS-232, 2x GBit-Ethernet, &lt;br /&gt;
* 8-bit VGA, 24-bit Audio CODEC&lt;br /&gt;
* TV Decoder (NTSC/PAL), IrDA, USB (Host + Slave)&lt;br /&gt;
* 18 Schalter, 4 Drucktasten, PS2-Maus/Tastatur-Anschluss&lt;br /&gt;
* 27 LEDs, 16x2-LCD-Display, 8 7-Segment-Anzeigen&lt;br /&gt;
* IR-Fernsteuerung&lt;br /&gt;
* HSMC-Stecker&lt;br /&gt;
* Viele Beispiele mit Source Code wie TV, SD Music Player, Audiorecorder&lt;br /&gt;
* Listenpreis US $595,- (academic = $299,-)&lt;br /&gt;
&lt;br /&gt;
==== Cyclone III Embedded Development Kit ====&lt;br /&gt;
* Altera Cyclone III EP3C25 FPGA&lt;br /&gt;
* 640x480 LCD Display mit Touchscreen-Function&lt;br /&gt;
* MiniSD-Card Sockel&lt;br /&gt;
* Audio Interface ADC CODEC&lt;br /&gt;
* 10/100 Mbit Fast Ethernet Schnittstelle&lt;br /&gt;
* FPGA-Konfiguration über USB&lt;br /&gt;
* NIOS II EVAL Lizenz&lt;br /&gt;
* IP LIB Altera&lt;br /&gt;
* Listenpreis US $495,-  über Altera Webseite&lt;br /&gt;
* Bei EBV €349,- inkl. MwSt.&lt;br /&gt;
&lt;br /&gt;
==== DE0-Nano ====&lt;br /&gt;
* Cyclone IV EP4CE22F17C6N &lt;br /&gt;
* 32MB SDRAM&lt;br /&gt;
* 2Kb I2C-EEPROM &lt;br /&gt;
* 64Mb (8MB) SPI-Flash&lt;br /&gt;
* 3-Achsen-Beschleunigungssensor ADXL345 (Analog Devices)&lt;br /&gt;
* AD-Wandler ADC128S022 (National Semiconductor)&lt;br /&gt;
* Zwei 40-Pin-GPIO-Header mit 72 verfügbaren IO-Pins, ein 26-Pin-Header mit 16 digitalen GPIOs und 8 ADC-Inputs&lt;br /&gt;
* On-Board-USB-Blaster zum Programmieren/Debuggen&lt;br /&gt;
* Herstellerpreis (www.terasic.com.tw): $79,- (für Studenten: $59,-)&lt;br /&gt;
* erhältlich bei Digikey&lt;br /&gt;
&lt;br /&gt;
=== devboards GmbH ===&lt;br /&gt;
==== DBM-SOC2 Cyclone V SoC Dimm Modul====&lt;br /&gt;
http://www.devboards.de/de/startseite/boards/produkte-details/article/dbm-soc2/&lt;br /&gt;
* Cyclone V SoC 20K oder 40KLE&lt;br /&gt;
* 1Gbyte DDR3 Memory&lt;br /&gt;
* 256Mbit Konfigurations Flash&lt;br /&gt;
* 4Gbyte eMMC oder SDKarte&lt;br /&gt;
* Gigabit Ethernet&lt;br /&gt;
* USB OTG&lt;br /&gt;
* RTC&lt;br /&gt;
* 152 IO Pins&lt;br /&gt;
* DIMM 200 Formfaktor&lt;br /&gt;
* Made in Germany&lt;br /&gt;
* [http://devboards.de/home/boards/product-details/article/dbm-soc2-base1 Basisboard verfügbar]&lt;br /&gt;
&lt;br /&gt;
=== Andere ===&lt;br /&gt;
==== FPGA-DEV====&lt;br /&gt;
www.fpga-dev.de&lt;br /&gt;
* Altera Cyclone II EP2C35F484C6N&lt;br /&gt;
* DIMM - Sockel&lt;br /&gt;
* Flash&lt;br /&gt;
* Erweiterungssockel&lt;br /&gt;
* nicht mehr hergestellt&lt;br /&gt;
&lt;br /&gt;
==== Sasco Holz PABLO ====&lt;br /&gt;
* Altera Cyclone II EP2C20F484C6N&lt;br /&gt;
* EPCS16SI16N serial configuration Flash&lt;br /&gt;
* 2x32 MByte mDDR-333 RAM (unabhängige Daten-/Adressbusse)&lt;br /&gt;
* externer SMA-Clock-Eingang&lt;br /&gt;
* 25 MHz Oszillator&lt;br /&gt;
* 3 Taster, kleiner Joystick, 4 LEDs&lt;br /&gt;
* AD7843 SPI touch controller&lt;br /&gt;
* RS-232&lt;br /&gt;
* 2x Santa Cruz connector&lt;br /&gt;
* 60-Pin TFT, 14-Pin GPIO Wannenstecker&lt;br /&gt;
* 10-Pin JTAG &amp;amp; 10-Pin Passiv Seriell Wannenstecker&lt;br /&gt;
* Netzteil, CD-ROM&lt;br /&gt;
* [http://web.archive.org/web/20080907191153/http://www.sascoholz.com/designsupport/solutions/pablo http://www.sascoholz.com/designsupport/solutions/pablo]&lt;br /&gt;
* kein Programmierkabel, kein Kaltgerätekabel&lt;br /&gt;
* Restmengen hin und wieder günstig beim großen E&lt;br /&gt;
&lt;br /&gt;
== Boards für Lattice-FPGAs ==&lt;br /&gt;
=== LatticeXP2 Brevia Development Kit ===&lt;br /&gt;
* FPGA: LFXP2-5E-6TN144C (non-volatile Konfiguration!)&lt;br /&gt;
* 2 MBit SPI-Flash, 1 MBit SRAM&lt;br /&gt;
* JTAG-Interface, RS232 (Sub-D-Buchse)&lt;br /&gt;
* Pinleisten: 2x20 und 2x5&lt;br /&gt;
* 4 Taster (+1 Reset-Taster), 4 DIP-Schalter, 8 LEDs&lt;br /&gt;
* Inkl. parallelem ISP-Download-Kabel, seriellem Nullmodem-Kabel, 6V/1A-Schaltnetzteil&lt;br /&gt;
* Offizielle [http://www.latticesemi.com/products/developmenthardware/developmentkits/xp2breviadevelopmentkit.cfm Produktbeschreibung von Lattice]&lt;br /&gt;
* Lieferant: [http://de.mouser.com/ProductDetail/Lattice/LFXP2-5E-B2-EVN/?qs=sGAEpiMZZMtvzEnwIFtdJf1kwhjc34f7 Mouser Electronics] 40,43 Euro +MwSt. (Lieferung nach Deutschland ohne zusätzliche Kosten problemlos möglich)&lt;br /&gt;
* Software kostenlos bei [http://www.latticesemi.com/products/developmenthardware/developmentkits/xp2breviadevelopmentkit.cfm Lattice] (Quick-Start, User&#039;s Guide, EDA, Reference Designs, 8-/32-Bit Soft-Cores Mico8/Mico32 etc.)&lt;br /&gt;
=== Weitere ===&lt;br /&gt;
* www.hardware-design.de&lt;br /&gt;
* bietet verschiedene einfache Boards mit Lattice-Bausteinen an&lt;br /&gt;
* FPGA-Board mit XP2-17/XP2-8/XP2-5 -&amp;gt; 113,- bis 101,- Euro&lt;br /&gt;
* CPLD-Boards u.a. mit MachXO640 -&amp;gt; 89,- Euro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://papilio.cc/ Papilio FPGA]: Ein Arduino-kompatibles (aber nur 3.3V I/O) FPGA Board mit Spartan 3E, recht große Community, viele Beispiele&lt;br /&gt;
* [http://pin4.at/pro_misc.php#fdil Projekt &amp;quot;FDIL v2&amp;quot;]: sehr kleines 5V DIL-Ersatz Board mit Xilinx Spartan II FPGA, open-source, keine Levelshifter erforderlich! (Englisch)&lt;br /&gt;
* [http://www.trenz-electronic.de/de/produkte/fpga-boards/oho-elektronik.html GODIL]: etwas größeres DIL Board mit Xilinx Spartan 3E und 5V Levelshifter (bidirektional, &amp;quot;open-drain-like&amp;quot;) von Trenz Elektronik beziehbar&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA-Boards]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FPGA_und_Co]]&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=82609</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=82609"/>
		<updated>2014-04-11T07:48:41Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: Tippos, Link korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s (genauer gesagt die Konfiguration des FPGA&#039;s) bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-2/index.d.html ZTEX FPGA Boards]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX FPGA-Booards ==&lt;br /&gt;
Die ZTEX FPGA-Boards sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Derartige Dinge können jedoch mittels Erweiterungskarten nachgerüstet werden.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es zwei Serien von FPGA-Boards. Da sich die erste Serie im Auslaufen befindet (Stand April 2014) werden hier nur Board der Serie 2 vorgestellt. Gegenwärtig noch verfügbare Serie-1-Board werden jedoch auf [[Liste_von_FPGA_Eval_boards#ZTEX|Liste der ZTEX FPGA-Boards]] aufgeführt.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 2.13 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
* USB 2.0-Schnittstelle mit Mini-USB-Buchse (Typ B)&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller (100 Pin Version)&lt;br /&gt;
* Vier Artix 7 Varianten: XC7A35T, XC7A50T, XC7A75T und XC7A100T&lt;br /&gt;
* Externer-I/O-Verbinder (bestehend aus zwei 2x32-Pin-Buchsenleisten mit 2.54mm-Raster) liefert:&lt;br /&gt;
** 100 mit dem FPGA verbundene General-Purpose-I/O&#039;s (GPIO&#039;s)&lt;br /&gt;
** JTAG-Signale&lt;br /&gt;
** Reset-Signal&lt;br /&gt;
** Externer Spannungseingang (4,5 V .. 16 V)&lt;br /&gt;
** 3,3V Ausgang&lt;br /&gt;
** I/O-Spannungs-Ausgang oder -Eingang, siehe Externer-I/O-Verbinder&lt;br /&gt;
* 256 MByte DDR3 SDRAM:&lt;br /&gt;
** Bis zu 400 MHz Speichertakt&lt;br /&gt;
** 16 Bit Busbreite&lt;br /&gt;
** Datenrate bis zu 1600 MByte/s&lt;br /&gt;
** Mit dem Xilinx Memory Interface Generator (MIG) nutzbar, Beispiele befinden sim im SDK &lt;br /&gt;
* 128 MBit on-board Flash Speicher&lt;br /&gt;
**  Ermöglicht das Laden des Bitstream vom FPGA (16.5 MByte/s)&lt;br /&gt;
**  Zugreifbar vom EZ-USB FX2 und vom FPGA&lt;br /&gt;
* 128 Kbit EEPROM-Speicher (kann zum Laden der Firmware genutzt werden)&lt;br /&gt;
* 2 Kbit MAC-EEPROM: enthält eindeutige, nicht löschbare MAC-Adresse und wird zum Speichern von Firmware-Einstellungen genutzt&lt;br /&gt;
* Schnelle FPGA configuration via USB mittels CPLD: bis zu 24MByte/s&lt;br /&gt;
* On-Board Stromversorgung:&lt;br /&gt;
** 3,3 V: 2000 mA&lt;br /&gt;
** 1,8 V: 1000 mA&lt;br /&gt;
** 1,5 V: 2000 mA&lt;br /&gt;
** 1,0 V; 4000 mA&lt;br /&gt;
* XC7A50T-, XC7A75T- und XC7A100T-Varianten: Kühlkörper für High-Performance- / Hochgeschwindigkeits-Anwendungen, siehe Abschnitt Kühlkörper&lt;br /&gt;
* Optional:&lt;br /&gt;
** Batterie zum Speichern eines Schlüssels für Bitstream-Verschlüsselung&lt;br /&gt;
** On-board JTAG-Steckverbinder&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/usb-fpga-2.13.d.html Homepage des USB-FPGA-Moduls 2.13 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-fpga-2.13.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 2.16 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
* High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller (128 Pin-Version)&lt;br /&gt;
* Xilinx Artix 7 XC7A200T FPGA (XC7A100T auf Anfrage)&lt;br /&gt;
* Kompatibler externer-I/O-Verbinder (bestehend aus zwei 2x32-Pin-Buchsenleisten mit 2.54mm-Raster) mit:&lt;br /&gt;
** 100 mit dem FPGA verbundene General-Purpose-I/O&#039;s (GPIO&#039;s)&lt;br /&gt;
** JTAG-Signale&lt;br /&gt;
** Reset-Signal&lt;br /&gt;
** Externer Spannungseingang (4,5 V .. 16 V)&lt;br /&gt;
** 3,3V Ausgang&lt;br /&gt;
** I/O-Spannungs-Ausgang oder -Eingang, siehe Externer-I/O-Verbinder&lt;br /&gt;
* 128 MBit on-board Flash Speicher&lt;br /&gt;
** Ermöglicht das Laden des Bitstream vom FPGA (16.5 MByte/s)&lt;br /&gt;
** Zugreifbar vom EZ-USB FX2 und vom FPGA&lt;br /&gt;
* Schnelle FPGA-Konfiguration via USB mittels CPLD: bis zu 24MByte/s&lt;br /&gt;
* Memory-Mapped I/O zwischen EZ-USB FX2 und FPGA&lt;br /&gt;
* 128 Kbit EEPROM-Speicher (kann zum Laden der Firmware genutzt werden)&lt;br /&gt;
* 2 Kbit MAC-EEPROM: enthält eindeutige, nicht löschbare MAC-Adresse und wird zum Speichern von Firmware-Einstellungen genutzt&lt;br /&gt;
* On-Board Stromversorgung:&lt;br /&gt;
** 3.3 V: 2000 mA&lt;br /&gt;
** 1.8 V: 1000 mA&lt;br /&gt;
** 1.0 V; 14000 mA&lt;br /&gt;
* Kühlkörper für High-Performance- / Hochgeschwindigkeits-Anwendungen, siehe Abschnitt Kühlkörper&lt;br /&gt;
* Optional:&lt;br /&gt;
** Batterie zum Speichern eines Schlüssels für Bitstream-Verschlüsselung&lt;br /&gt;
** On-board JTAG-Steckverbinder&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/usb-fpga-2.16.d.html Homepage des USB-FPGA-Moduls 2.16 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-fpga-2.16.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
=== Debug-Board ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
* 30 LED&#039;s: an den I/O-Verbinder der FPGA-Boards angeschlossen und in 5er-Gruppen deaktivierbar&lt;br /&gt;
* 4 Schalter: an den I/O-Verbinder der FPGA-Boards angeschlossen&lt;br /&gt;
* JTAG-Steckverbinder &lt;br /&gt;
* Erhältlich in 2 Varianten:&lt;br /&gt;
** &#039;&#039;&#039;Variante 1&#039;&#039;&#039; ist mit stapelbaren Buchsenleisten ausgerüstet, kann zwischen das FPGA-Board und die Anwendungsschaltung gesteckt werden und dient hauptsächlich zum Debuggen. Die LED&#039;s können deaktiviert werden, falls die GPIO&#039;s in der Anwendungsschaltung Verwendung finden. &lt;br /&gt;
** &#039;&#039;&#039;Variante 2&#039;&#039;&#039;  verfügt über ein Prototypen-Raster und kann alleine oder in Kombination mit weiteren Prototypen-Platinen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/debug.d.html Homepage des Debug-Boards]&lt;br /&gt;
&lt;br /&gt;
=== Bilder ===&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;270&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Bild:Usb-fpga-2.13.jpg|ZTEX USB-FPGA-Modul 2.13 mit Artix 7 XC7A100T FPGA und 256 MB DDR3 SDRAM&lt;br /&gt;
Bild:Usb-fpga-2.16-1600.jpg|ZTEX USB-FPGA-Modul 2.16 mit Artix 7 XC7A200T FPGA&lt;br /&gt;
Bild:usb-fpga-2-debug-1600.jpg|Debug-Board für ZTEX FPGA-Boards der Serie 2. Variante mit Prototypen-Raster.&lt;br /&gt;
Bild:usb-fpga-2-debug-stackable-1600.jpg| Debug-Board für ZTEX FPGA-Boards der Serie 2. Variante mit stapeblaren Buchsenleisten&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:USB]]&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:8051]]&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=82608</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=82608"/>
		<updated>2014-04-11T07:43:45Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: Bilder aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s (genauer gesagt die Konfiguration des FPGA&#039;s) bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX FPGA-Booards ==&lt;br /&gt;
Die ZTEX FPGA-Boards sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Derartige Dinge können jedoch mittels Erweiterungskarten nachgerüstet werden.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es zwei Serien von FPGA-Boards. Da sich die erste Serie im Auslaufen befindet (Stand April 2014) werden hier nur Board der Serie 2 vorgestellt. Gegenwärtig noch verügbare Serie-1-Board werden jedoch auf [[Liste_von_FPGA_Eval_boards#ZTEX|Liste der ZTEX FPGA-Boards]]&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 2.13 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
* USB 2.0-Schnittstelle mit Mini-USB-Buchse (Typ B)&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller (100 Pin Version)&lt;br /&gt;
* Vier Artix 7 Varianten: XC7A35T, XC7A50T, XC7A75T und XC7A100T&lt;br /&gt;
* Externer-I/O-Verbinder (bestehend aus zwei 2x32-Pin-Buchsenleisten mit 2.54mm-Raster) liefert:&lt;br /&gt;
** 100 mit dem FPGA verbundene General-Purpose-I/O&#039;s (GPIO&#039;s)&lt;br /&gt;
** JTAG-Signale&lt;br /&gt;
** Reset-Signal&lt;br /&gt;
** Externer Spannungseingang (4,5 V .. 16 V)&lt;br /&gt;
** 3,3V Ausgang&lt;br /&gt;
** I/O-Spannungs-Ausgang oder -Eingang, siehe Externer-I/O-Verbinder&lt;br /&gt;
* 256 MByte DDR3 SDRAM:&lt;br /&gt;
** Bis zu 400 MHz Speichertakt&lt;br /&gt;
** 16 Bit Busbreite&lt;br /&gt;
** Datenrate bis zu 1600 MByte/s&lt;br /&gt;
** Mit dem Xilinx Memory Interface Generator (MIG) nutzbar, Beispiele befinden sim im SDK &lt;br /&gt;
* 128 MBit on-board Flash Speicher&lt;br /&gt;
**  Ermöglicht das Laden des Bitstream vom FPGA (16.5 MByte/s)&lt;br /&gt;
**  Zugreifbar vom EZ-USB FX2 und vom FPGA&lt;br /&gt;
* 128 Kbit EEPROM-Speicher (kann zum Laden der Firmware genutzt werden)&lt;br /&gt;
* 2 Kbit MAC-EEPROM: enthält eindeutige, nicht löschbare MAC-Adresse und wird zum Speichern von Firmware-Einstellungen genutzt&lt;br /&gt;
* Schnelle FPGA configuration via USB mittels CPLD: bis zu 24MByte/s&lt;br /&gt;
* On-Board Stromversorgung:&lt;br /&gt;
** 3,3 V: 2000 mA&lt;br /&gt;
** 1,8 V: 1000 mA&lt;br /&gt;
** 1,5 V: 2000 mA&lt;br /&gt;
** 1,0 V; 4000 mA&lt;br /&gt;
* XC7A50T-, XC7A75T- und XC7A100T-Varianten: Kühlkörper für High-Performance- / Hochgeschwindigkeits-Anwendungen, siehe Abschnitt Kühlkörper&lt;br /&gt;
* Optional:&lt;br /&gt;
** Batterie zum Speichern eines Schlüssels für Bitstream-Verschlüsselung&lt;br /&gt;
** On-board JTAG-Steckverbinder&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/usb-fpga-2.13.d.html Homepage des USB-FPGA-Moduls 2.13 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-fpga-2.13.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 2.16 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
* High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&lt;br /&gt;
* Cypress CY7C68013A EZ-USB FX2 Mikrocontroller (128 Pin-Version)&lt;br /&gt;
* Xilinx Artix 7 XC7A200T FPGA (XC7A100T auf Anfrage)&lt;br /&gt;
* Kompatibler externer-I/O-Verbinder (bestehend aus zwei 2x32-Pin-Buchsenleisten mit 2.54mm-Raster) mit:&lt;br /&gt;
** 100 mit dem FPGA verbundene General-Purpose-I/O&#039;s (GPIO&#039;s)&lt;br /&gt;
** JTAG-Signale&lt;br /&gt;
** Reset-Signal&lt;br /&gt;
** Externer Spannungseingang (4,5 V .. 16 V)&lt;br /&gt;
** 3,3V Ausgang&lt;br /&gt;
** I/O-Spannungs-Ausgang oder -Eingang, siehe Externer-I/O-Verbinder&lt;br /&gt;
* 128 MBit on-board Flash Speicher&lt;br /&gt;
** Ermöglicht das Laden des Bitstream vom FPGA (16.5 MByte/s)&lt;br /&gt;
** Zugreifbar vom EZ-USB FX2 und vom FPGA&lt;br /&gt;
* Schnelle FPGA-Konfiguration via USB mittels CPLD: bis zu 24MByte/s&lt;br /&gt;
* Memory-Mapped I/O zwischen EZ-USB FX2 und FPGA&lt;br /&gt;
* 128 Kbit EEPROM-Speicher (kann zum Laden der Firmware genutzt werden)&lt;br /&gt;
* 2 Kbit MAC-EEPROM: enthält eindeutige, nicht löschbare MAC-Adresse und wird zum Speichern von Firmware-Einstellungen genutzt&lt;br /&gt;
* On-Board Stromversorgung:&lt;br /&gt;
** 3.3 V: 2000 mA&lt;br /&gt;
** 1.8 V: 1000 mA&lt;br /&gt;
** 1.0 V; 14000 mA&lt;br /&gt;
* Kühlkörper für High-Performance- / Hochgeschwindigkeits-Anwendungen, siehe Abschnitt Kühlkörper&lt;br /&gt;
* Optional:&lt;br /&gt;
** Batterie zum Speichern eines Schlüssels für Bitstream-Verschlüsselung&lt;br /&gt;
** On-board JTAG-Steckverbinder&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/usb-fpga-2.16.d.html Homepage des USB-FPGA-Moduls 2.16 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-fpga-2.16.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
=== Debug-Board ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
* 30 LED&#039;s: an den I/O-Verbinder der FPGA-Boards angeschlossen und in 5er-Gruppen deaktivierbar&lt;br /&gt;
* 4 Schalter: an den I/O-Verbinder der FPGA-Boards angeschlossen&lt;br /&gt;
* JTAG-Steckverbinder &lt;br /&gt;
* Erhältlich in 2 Varianten:&lt;br /&gt;
** &#039;&#039;&#039;Variante 1&#039;&#039;&#039; ist mit stapelbaren Buchsenleisten ausgerüstet, kann zwischen das FPGA-Board und die Anwendungsschaltung gesteckt werden und dient hauptsächlich zum Debuggen. Die LED&#039;s können deaktiviert werden, falls die GPIO&#039;s in der Anwendungsschaltung Verwendung finden. &lt;br /&gt;
** &#039;&#039;&#039;Variante 2&#039;&#039;&#039;  verfügt über ein Prototypen-Raster und kann alleine oder in Kombination mit weiteren Prototypen-Platinen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-2/debug.d.html Homepage des Debug-Boards]&lt;br /&gt;
&lt;br /&gt;
=== Bilder ===&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;270&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Bild:Usb-fpga-2.13.jpg|ZTEX USB-FPGA-Modul 2.13 mit Artix 7 XC7A100T FPGA und 256 MB DDR3 SDRAM&lt;br /&gt;
Bild:Usb-fpga-2.16-1600.jpg|ZTEX USB-FPGA-Modul 2.16 mit Artix 7 XC7A200T FPGA&lt;br /&gt;
Bild:usb-fpga-2-debug-1600.jpg|Debug-Board für ZTEX FPGA-Boards der Serie 2. Variante mit Prototypen-Raster.&lt;br /&gt;
Bild:usb-fpga-2-debug-stackable-1600.jpg| Debug-Board für ZTEX FPGA-Boards der Serie 2. Variante mit stapeblaren Buchsenleisten&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:USB]]&lt;br /&gt;
[[Kategorie:FPGA-Projekte]]&lt;br /&gt;
[[Kategorie:8051]]&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2-debug-stackable-1600.jpg&amp;diff=82607</id>
		<title>Datei:Usb-fpga-2-debug-stackable-1600.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2-debug-stackable-1600.jpg&amp;diff=82607"/>
		<updated>2014-04-11T07:32:29Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX Debug-Board für FPGA-Boards der Serie 2, Variante mit stapelbaren Buchsenleisten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX Debug-Board für FPGA-Boards der Serie 2, Variante mit stapelbaren Buchsenleisten&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2-debug-1600.jpg&amp;diff=82606</id>
		<title>Datei:Usb-fpga-2-debug-1600.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2-debug-1600.jpg&amp;diff=82606"/>
		<updated>2014-04-11T07:30:31Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX Debug-Board für FPGA-Boards der Serie 2, Variante mit Prototypen-Raster&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX Debug-Board für FPGA-Boards der Serie 2, Variante mit Prototypen-Raster&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2.16-1600.jpg&amp;diff=82605</id>
		<title>Datei:Usb-fpga-2.16-1600.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2.16-1600.jpg&amp;diff=82605"/>
		<updated>2014-04-11T07:28:26Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX USB-FPGA Module 2.12 mit Artix 7 XC7A200T FPGA, Oberseite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX USB-FPGA Module 2.12 mit Artix 7 XC7A200T FPGA, Oberseite&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2.13.jpg&amp;diff=82604</id>
		<title>Datei:Usb-fpga-2.13.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-2.13.jpg&amp;diff=82604"/>
		<updated>2014-04-11T07:25:05Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: USB-FPGA Modul 2.13 mit Artix 7 XC7A100 FPGA, Oberseite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;USB-FPGA Modul 2.13 mit Artix 7 XC7A100 FPGA, Oberseite&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38426</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38426"/>
		<updated>2009-08-20T14:43:54Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Ausführen des Beispiels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde, aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
Eine Einführung in das Firmware-Kit und eine Beschreibung der Vorzüge befindet sich bereits im Artikel [[ZTEX_USB-_und_USB-FPGA-Module | ZTEX USB- und USB-FPGA-Module]] und wird hier nicht wiederholt.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Firmware-Kit ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;br /&gt;
[[Kategorie:8051]]&lt;br /&gt;
[[Kategorie:Programmiersprachen]]&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38425</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38425"/>
		<updated>2009-08-20T14:42:56Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde, aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
Eine Einführung in das Firmware-Kit und eine Beschreibung der Vorzüge befindet sich bereits im Artikel [[ZTEX_USB-_und_USB-FPGA-Module | ZTEX USB- und USB-FPGA-Module]] und wird hier nicht wiederholt.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Firmware-Kit ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38424</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38424"/>
		<updated>2009-08-20T14:42:43Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde, aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
Eine Einführung in das Firmware-Kit und eine Beschreibung der Vorzüge befindet sich bereits im Artikel [[ZTEX_USB-_und_USB-FPGA-Module|ZTEX USB- und USB-FPGA-Module]] und wird hier nicht wiederholt.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Firmware-Kit ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38423</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38423"/>
		<updated>2009-08-20T14:42:07Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde, aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
Eine Einführung in das Firmware-Kit und eine Beschreibung der Vorzüge befindet sich im Artikel [[ZTEX_USB-_und_USB-FPGA-Module|ZTEX USB- und USB-FPGA-Module]] und wird hier nicht wiederholt.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Firmware-Kit ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38422</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38422"/>
		<updated>2009-08-20T14:35:15Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Bilder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s (genauer gesagt die Konfiguration des FPGA&#039;s) bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-fpga-1.2.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;br /&gt;
[[Kategorie:FPGA_und_Co]]&lt;br /&gt;
[[Kategorie:Boards]]&lt;br /&gt;
[[Kategorie:8051]]&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38421</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38421"/>
		<updated>2009-08-20T14:25:29Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Verweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s (genauer gesagt die Konfiguration des FPGA&#039;s) bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-fpga-1.2.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38420</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38420"/>
		<updated>2009-08-20T14:24:30Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Verweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s (genauer gesagt die Konfiguration des FPGA&#039;s) bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
*[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38419</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38419"/>
		<updated>2009-08-20T14:22:22Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* FPGA-Programmierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s (genauer gesagt die Konfiguration des FPGA&#039;s) bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38418</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38418"/>
		<updated>2009-08-20T14:21:18Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Firmware-Kit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnes .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38417</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38417"/>
		<updated>2009-08-20T14:19:57Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Firmware-Kit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren und sich ein exzessives Studium der Datenblätter zumindest teilweise ersparen. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnen .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38416</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38416"/>
		<updated>2009-08-20T14:17:19Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Firmware-Kit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit plattformunabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnen .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38415</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38415"/>
		<updated>2009-08-20T14:15:27Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses Artikels zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit Plattform-unabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnen .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38414</id>
		<title>ZTEX USB- und USB-FPGA-Module</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ZTEX_USB-_und_USB-FPGA-Module&amp;diff=38414"/>
		<updated>2009-08-20T14:13:56Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: Die Seite wurde neu angelegt: == Einleitung == Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Die Firma [http://www.ztex.de/index.d.html ZTEX] produziert und vertreibt unter Anderem USB- und USB-FPGA-Module mit EZ-USB Mikrocontroller zum Einsatz in Prototypen, Kleinserien oder als Entwickler bzw. Experimentierboard.&lt;br /&gt;
&lt;br /&gt;
Alle Module haben die Eigenschaft, dass sie dem Entwickler einen schnellen Einstieg ermöglichen. Dies wird durch das auf einem Makro-Ansatz basierende &lt;br /&gt;
[http://www.ztex.de/firmware-kit/index.d.html Firmware-Kit] ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll schwerpunktmäßig einen Überblick über die Vorteile und Eigenschaften des Firmware-Kits liefern. Dies ist auch für Benutzer anderer EZ-USB basierter Hardware (einschließlich FPGA-Boards) interessant, da das Firmware-Kit quelloffen und nicht an eine bestimmte Hardware gebunden ist. (Der EZ-USB Controller anderer Boards wird normalerweise ohne Anpassungen des Firmware-Kits unterstützt, für die Programmierung von FPGA&#039;s müssen normalerweise zusätzliche Routinen ergänzt werden.)&lt;br /&gt;
&lt;br /&gt;
Wer nach der Lektüre dieses Artikel Interesse an dem Firmware-Kit hat, kann &lt;br /&gt;
kann beim [[EZ-USB_Firmware_Kit_-_Tutorial | EZ-USB Firmware Kit - Tutorial]] weiterlesen.&lt;br /&gt;
&lt;br /&gt;
Um diese Wiki nicht mit allzu vielen redundanten Informationen zu fluten, werden die ZTEX-Module, für welche das Firmware-Kit schwerpunktmäßig entwickelt wurde, am Ende dieses nur kurz und zusammengefasst vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Firmware-Kit==&lt;br /&gt;
Für den EZ-USB FX2 Mikrocontroller steht ein quelloffenes Firmware-Kit mit Plattform-unabhängiger Treiber API zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
Die allgemeinen (Modul-unabhängigen) Grundfunktionen sind&lt;br /&gt;
* Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
* EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
* Hochladen der Firmware in den EEPROM&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden firmwareseitig mittels Endpoint 0-Interfaces und dazugehörigen Routinen realisiert, welche automatisch in die mit dem Firmware-Kit entwickelte Firmware eingebunden werden. PC-seitig können diese Interfaces mit einem Werkzeug angesprochen oder mittels der Treiber-API in eigene Programme eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Um einen schnellen Einstieg in die Entwicklung zu ermöglichen, wird die Firmware  mittels eine Makro-Prozessors zusammengebaut. Dieser ermöglicht es Beispielsweise, die Endpoint-Konfiguration mittels weniger Makros (ein Makro pro Endpoint) festzulegen. Alle notwendigen Device-Deskriptoren sowie die notwendigen Routinen zur Ausgabe der Deskriptoren werden vom Firmware-Kit automatisch erstellt.&lt;br /&gt;
&lt;br /&gt;
Im Normalfall kann sich der Entwickler also auf seine selbst benötigten Funktionen konzentrieren. Der Quelltext einer typischen Firmware ist somit recht kompakt, wie im [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|EZ-USB Firmware-Kit Tutorial]] demonstriert wird.&lt;br /&gt;
&lt;br /&gt;
Zum dem Firmware-Kit gehört ferner eine Java Treiber-API. Mit dieser können plattformunabhängige (zurzeit Linux und Windows, weitere Portierungen möglich) PC-Programme zur Kommunikation mit dem Gerät geschrieben werden. Das Interessante daran ist, dass alle benötigten Dateien (Firmware für den Microcontroller, Bitstream für das FPGA, plattformabhängige Bibliotheken, ...) in ein einzelnen .jar-Archiv verfrachtet werden können. Der (End)Benutzter benötigt / sieht somit nur eine einzige Datei, welche von von jedem Verzeichnis aus aufgerufen werden kann und sowohl unter Windows als auch unter Linux funktioniert.&lt;br /&gt;
&lt;br /&gt;
== FPGA-Programmierung ==&lt;br /&gt;
Die Programmierung des FPGA&#039;s bei den&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Modulen]&lt;br /&gt;
erfolgt über den EZ-USB Mikrocontroller und erfordert kein zusätzliches JTAG-Kabel.&lt;br /&gt;
&lt;br /&gt;
Zu diesem Zweck steht ein Endpoint 0-Interface zur Verfügung, welches automatisch in die EZ-USB Firmware für diese Module eingebunden wird. Dieses Interface wird mittels eines zum Firmware-Kit gehörenden Werkzeuges oder mit selbst enwickelter Software mit der JAVA-API angesprochen.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
Interesse? [[EZ-USB_Firmware_Kit_-_Tutorial#ucecho.c|Hier gehts weiter zum EZ-USB Firmware-Kit Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== ZTEX-Module ==&lt;br /&gt;
Die ZTEX-Module sind hauptsächlich zum Einsatz bei Prototypen und Kleinserien gedacht und verfügen deshalb nur über notwendige oder wichtige Funktionen, d.h. keine Taster, Blinklichter, ... . Mittels Erweiterungen können diese Boards aber auch zu vollwertigen Experimentierboards ausgebaut werden.&lt;br /&gt;
&lt;br /&gt;
=== USB-FPGA-Modul 1.2 ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface via Mini-USB-Buchse (Typ B)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress CY7C68013A/14A EZ-USB-Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Xilinx Spartan-3 XC3S400 FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    60 General Purpose I/O&#039;s (GPIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 52 FPGA GPIO&#039;s &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 8 EZ-USB FX2 GPIO&#039;s (4, wenn Flash-Option installiert) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    20 spezial-I/O&#039;s (SIO): &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 6 SIO&#039;s für die FPGA-Konfiguration einschließlich JTAG &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Externe Stromversorgung &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; FPGA-Konfiguration / -Programmierung via USB mittels des [http://www.ztex.de/firmware-kit/index.d.html Firmware-Kits]. (Keine JTAG-Adapter oder andere zusätzliche Hilfsmittel erforderlich.)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Flash-Speicher (optional) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Experimentierboard ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Integrierte Stromversorgung&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
    	    &amp;lt;li&amp;gt; Großer Eingangs-Bereich von 8 bis 25 V &amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; Liefert alle benötigten Spannungen mittels hocheffizienten Schaltreglern:&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 1,2 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 2,5 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		    &amp;lt;li&amp;gt; 3,3 V @ 1,6 A (3 A Spitze) &amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	    &amp;lt;li&amp;gt; I/O-Spannungen VCCO_RIGHT und VCCO_TOP können einfach und unabhängig voneinander auf&lt;br /&gt;
        	3,3 V; 2,5 V; 1,2 V oder eine externe Spannung gesetzt werden &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Alle I/O Ports sind auf einem 2,54 mm-Standard-Raster mittels vier 1x23-Pin-Verbindern verfügbar ([http://localhost/ztex/ztex/usb-fpga-1/exp3.d.html Erweiterungs-Boards] oder [http://localhost/ztex/ztex/usb-fpga-1/accessories.d.html#bread  Breadboards] sind erhältlich) &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; Zwei serielle Interfaces mit Treiber &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt; JTAG-Interface für das FPGA &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html Homepage des USB-FPGA-Moduls 1.2 mit detaillierter Beschreibung]&lt;br /&gt;
[http://www.ztex.de/downloads/exp-1.1.pdf Schaltplan]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/exp-1.1.d.html Experimentierboard]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/pwr-1.0.d.html Stromversorgungsmodul]&lt;br /&gt;
[http://www.ztex.de/usb-fpga-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-fpga-1.2-top1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA Modul im Größenvergleich&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp1.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Erweiterungsplatinen&lt;br /&gt;
&lt;br /&gt;
[[Bild:usb-fpga-1.2-exp2.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;br /&gt;
&lt;br /&gt;
=== USB-Modul ===&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; High-Speed (480 MBit/s) USB-Interface &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Cypress EZ-USB FX2 CY7C68014A Mikrocontroller &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; microSD-Sockel für bis zu 2GB Flash-Speicher &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 36 General-Purpose I/O&#039;s (GPIO); 40, wenn keine microSD-Karte eingesetzt &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &lt;br /&gt;
    28 spezial-I/O&#039;s (SIO):&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 serielle Schnittstellen (4 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C-Interface (2 Pins) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 2 Interrupts &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 3 Timer &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 13 GPIF (General Purpose Interface) Signale (Control, Ready, programmierbare Flags) &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Takt-Ausgang &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Wakeup-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Breakpoint-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; 1 Reset-Pin &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; 128 Kbit EEPROM &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Hocheffizienter onboard 3,3 V / 700 mA (1,3 A Spitze) Schaltregler&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt Stromversorgung via USB &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Unterstützt externe Stromversorgung mit 4,6 bis 20 V &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; Beide Versorgungseingänge sind mit Dioden geschützt und können somit sicher gleichzeitig betrieben werden &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verweise ====&lt;br /&gt;
*[http://www.ztex.de/usb-1/usb-1.0.d.html Homepage des USB-Moduls mit detaillierter Beschreibung]&lt;br /&gt;
*[http://www.ztex.de/downloads/usb-1.0.pdf Schaltplan]&lt;br /&gt;
*[http://www.ztex.de/usb-1/index.d.html Komplette Produktserie]&lt;br /&gt;
&lt;br /&gt;
==== Bilder ====&lt;br /&gt;
[[Bild:usb-1.0-top1.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-1.0-top1.jpg&amp;diff=38413</id>
		<title>Datei:Usb-1.0-top1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-1.0-top1.jpg&amp;diff=38413"/>
		<updated>2009-08-20T14:09:49Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX USB Modul auf 3er-Ketten-Prototypenboard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX USB Modul auf 3er-Ketten-Prototypenboard&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-exp2.jpg&amp;diff=38412</id>
		<title>Datei:Usb-fpga-1.2-exp2.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-exp2.jpg&amp;diff=38412"/>
		<updated>2009-08-20T13:55:59Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;USB-FPGA-Modul auf Experimentierboard mit zwei Steckbrettern / Breadboards&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-exp1.jpg&amp;diff=38411</id>
		<title>Datei:Usb-fpga-1.2-exp1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-exp1.jpg&amp;diff=38411"/>
		<updated>2009-08-20T13:54:39Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: hat eine neue Version von „Bild:Usb-fpga-1.2-exp1.jpg“ hochgeladen: ZTEX USB-FPGA-Modul 1.2 auf Experimentierboard mit zwei Erweiterungsplatinen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX USB-FPGA-Modul 1.2 auf Experimentierboard mit zwei Erweiterungsplatinen&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-exp1.jpg&amp;diff=38410</id>
		<title>Datei:Usb-fpga-1.2-exp1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-exp1.jpg&amp;diff=38410"/>
		<updated>2009-08-20T13:53:57Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX USB-FPGA-Modul 1.2 auf Experimentierboard mit zwei Erweiterungsplatinen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX USB-FPGA-Modul 1.2 auf Experimentierboard mit zwei Erweiterungsplatinen&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-top1.jpg&amp;diff=38409</id>
		<title>Datei:Usb-fpga-1.2-top1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-1.2-top1.jpg&amp;diff=38409"/>
		<updated>2009-08-20T13:51:21Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX USB-FPGA-Modul 1.2, Oberseite, Größenvergleich&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX USB-FPGA-Modul 1.2, Oberseite, Größenvergleich&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-top1.jpg&amp;diff=38407</id>
		<title>Datei:Usb-fpga-top1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Usb-fpga-top1.jpg&amp;diff=38407"/>
		<updated>2009-08-20T11:33:53Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: ZTEX USB-FPGA-Modul 1.2, Oberseite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZTEX USB-FPGA-Modul 1.2, Oberseite&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38399</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38399"/>
		<updated>2009-08-19T14:40:17Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Installation des Pakets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde, aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Firmware-Kit ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38398</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38398"/>
		<updated>2009-08-19T14:39:06Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde, aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Paket ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38397</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38397"/>
		<updated>2009-08-19T14:38:45Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches ursprünglich für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Paket ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38396</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38396"/>
		<updated>2009-08-19T14:37:45Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches speziell für [http://www.ztex.de/usb-1/index.d.html ZTEX USB-Module] und [http://www.ztex.de/usb-fpga-1/index.d.html ZTEX USB-FPGA-Module] entworfen wurde aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Paket ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38395</id>
		<title>EZ-USB Firmware Kit - Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EZ-USB_Firmware_Kit_-_Tutorial&amp;diff=38395"/>
		<updated>2009-08-19T14:35:14Z</updated>

		<summary type="html">&lt;p&gt;Stefan2: initial release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
[http://www.ztex.de ZTEX] stellt ein Firmware-Kit mit zugehörigem Treiber-API zur Verfügung, welches speziell für die ZTEX USB-/FPGA-Module entworfen wurde aber auch mit anderer EZ-USB basierter Hardware zusammen arbeitet.&lt;br /&gt;
&lt;br /&gt;
Das Paket ist quelloffen und wird wird unter GPLv3 vertrieben.&lt;br /&gt;
&lt;br /&gt;
Das Paket läuft unter Linux und Windows. (Die Portierung auf andere Betriebssysteme sollte problemlos möglich sein). Die Java-Treiber-API ermöglicht die Entwicklung von plattformübergreifenden Geräte-Treibern.&lt;br /&gt;
&lt;br /&gt;
== Wichtigste Eigenschaften des Pakets ==&lt;br /&gt;
&lt;br /&gt;
* Firmware-Kit (für EZ-USB Mikrocontroller) in C geschrieben (erfordert SDCC-Compiler).&lt;br /&gt;
* Zusammenbau der Firmware erfolgt mittels Makro-Prozessor. Dieser ermöglicht mit wenigen Makros alle erforderlichen Einstellungen festzulegen. Die benötigten &#039;&#039;&#039;USB-Deskriptoren und die dazugehörigen Routinen werden automatisch generiert&#039;&#039;&#039;.&lt;br /&gt;
* Treiber-API ist in Java geschrieben und ermöglicht Plattform-unabhängige Geräte-Treiber.&lt;br /&gt;
* Open-Source unter GPLv3 lizenziert&lt;br /&gt;
* Hauptfunktionen des Firmware-Kits / Treiber-API&#039;s:&lt;br /&gt;
** Hochladen der Firmware direkt in den EZ-USB Mikrocontroller&lt;br /&gt;
** EEPROM-Interface zum Lesen / Scheiben von Daten in den / aus dem EEPROM-Speicher&lt;br /&gt;
** Hochladen der Firmware in den EEPROM&lt;br /&gt;
** Hochladen des Bitstreams in das FPGA (für [http://http://www.ztex.de/usb-fpga-1/index.e.html ZTEX-USB-FPGA-Module])&lt;br /&gt;
&lt;br /&gt;
== Systemvoraussetzungen ==&lt;br /&gt;
Die Systemvoraussetzungen für das Kompilieren der Firmware und der Treiber sind&lt;br /&gt;
* Java JDK 6 oder später&lt;br /&gt;
* SDCC&lt;br /&gt;
* MSys (nur für Windows)&lt;br /&gt;
&lt;br /&gt;
Die Systemvoraussetzungen für das Ausführen der Beispiele bzw. der selbst erstellten Software sind&lt;br /&gt;
&lt;br /&gt;
* Java JRE 6 oder später&lt;br /&gt;
&lt;br /&gt;
== Download / Homepage / weitere Informationen ==&lt;br /&gt;
* &#039;&#039;&#039;[http://www.ztex.de/downloads/index.d.html#firmware_kit Downloads]&#039;&#039;&#039;&lt;br /&gt;
* [http://www.ztex.de/firmware-kit/index.d.html Homepage des Firmware Kits] &lt;br /&gt;
* [http://wiki.ztex.de/doku.php?id=de:start ZTEX Wiki]&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel für [http://www.ztex.de/usb-fpga-1/usb-fpga-1.2.d.html ZTEX USB-FPGA-Module] demonstriert den verwendeten Makro-Ansatz des Firmware-Kits. Das Beispiel ist ein Bestandteil des Firmware-Kits. &lt;br /&gt;
&lt;br /&gt;
Die Firmware (definiert in [[#ucecho.c| ucecho.c]])&lt;br /&gt;
legt die Endpoints 2 und 4 fest&lt;br /&gt;
(beide 512 Bytes, doppel-gepuffert, Bulk-Transfer, zu Interface 0 gehörig).&lt;br /&gt;
Alle zum Endpoint 4 geschriebenen Daten werden vom FPGA in Großbuchstaben konvertiert und können von Endpoint 2 zurückgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Der Bitstream für die FPGA-Konfiguration wird in [[#ucecho.vhd| ucecho.vhd]] definiert. Das FPGA liest pro Taktzyklus ein Byte von Port &#039;&#039;PC&#039;&#039;, konvertiert es in Großbuchstaben und schreibt es nach Port &#039;&#039;PB&#039;&#039; zurück.&lt;br /&gt;
&lt;br /&gt;
Der Treiber (definiert in [[#UCEcho.java| UCEcho.java]]) lädt bei Bedarf die Firmware in dem EZ-USB-Mikrocontroller&lt;br /&gt;
und den Bitstream in das FPGA hoch, sendet Benutzer-Strings zum Gerät und liest diese zurück.&lt;br /&gt;
&lt;br /&gt;
Das Hochladen der Firmware in den EEPROM wird ebenfalls unterstützt (z.B. mittels des zum Paket gehörenden Werkzeugs &#039;&#039;FWLoader&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== ucecho.c ===&lt;br /&gt;
Das ist der C-Quellcode für die Firmware:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#include[ztex-conf.h]   // Loads the configuration macros, see ztex-conf.h for the available macros&lt;br /&gt;
#include[ztex-utils.h]  // include basic functions&lt;br /&gt;
&lt;br /&gt;
// Cypress vendor ID and product ID may only (!) be used for experimental purposes&lt;br /&gt;
SET_VPID(0x4b4,0x8613);         &lt;br /&gt;
&lt;br /&gt;
// define endpoints 2 and 4, both belong to interface 0 (in/out are from the point of view of the host)&lt;br /&gt;
EP_CONFIG(2,0,BULK,IN,512,2);    &lt;br /&gt;
EP_CONFIG(4,0,BULK,OUT,512,2);   &lt;br /&gt;
&lt;br /&gt;
// identify as ZTEX USB FPGA Module 1.2  (Important for FPGA configuration)&lt;br /&gt;
IDENTITY_UFM_1_2(1.0.0.0,0);     &lt;br /&gt;
&lt;br /&gt;
// give them a nice name&lt;br /&gt;
#define[PRODUCT_STRING][&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
// this is called automatically after FPGA configuration&lt;br /&gt;
#define[POST_FPGA_CONFIG][POST_FPGA_CONFIG&lt;br /&gt;
        OEC = 255;&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
// include the main part of the firmware kit, define the descriptors, ...&lt;br /&gt;
#include[ztex.h]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main(void) &lt;br /&gt;
{&lt;br /&gt;
    WORD i,size;&lt;br /&gt;
    &lt;br /&gt;
// init everything&lt;br /&gt;
    init_USB();&lt;br /&gt;
&lt;br /&gt;
    EP2CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
    SYNCDELAY; &lt;br /&gt;
    EP4CS &amp;amp;= ~bmBIT0;   // stall = 0&lt;br /&gt;
&lt;br /&gt;
    SYNCDELAY;          // first two packages are waste&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
    SYNCDELAY;&lt;br /&gt;
    EP4BCL = 0x80;      // skip package, (re)arm EP4&lt;br /&gt;
&lt;br /&gt;
    while (1) { &lt;br /&gt;
        if ( !(EP4CS &amp;amp; bmBIT2) ) {                              // EP4 is not empty&lt;br /&gt;
            size = (EP4BCH &amp;lt;&amp;lt; 8) | EP4BCL;&lt;br /&gt;
            if ( size&amp;gt;0 &amp;amp;&amp;amp; size&amp;lt;=512 &amp;amp;&amp;amp; !(EP2CS &amp;amp; bmBIT3)) {    // EP2 is not full&lt;br /&gt;
                for ( i=0; i&amp;lt;size; i++ ) {&lt;br /&gt;
                    IOC = EP4FIFOBUF[i];        // data from EP4 is converted to uppercase by the FPGA ...&lt;br /&gt;
                    EP2FIFOBUF[i] = IOB;        // ... and written back to EP2 buffer&lt;br /&gt;
                } &lt;br /&gt;
                EP2BCH = size &amp;gt;&amp;gt; 8;&lt;br /&gt;
                SYNCDELAY; &lt;br /&gt;
                EP2BCL = size &amp;amp; 255;            // arm EP2&lt;br /&gt;
            }&lt;br /&gt;
            SYNCDELAY; &lt;br /&gt;
            EP4BCL = 0x80;                      // skip package, (re)arm EP4&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ucecho.vhd ===&lt;br /&gt;
Das ist der VHDL-Quellcode für die FPGA-Konfiguration:&lt;br /&gt;
&amp;lt;vhdl&amp;gt;&lt;br /&gt;
library ieee;&lt;br /&gt;
use IEEE.std_logic_1164.all;&lt;br /&gt;
use IEEE.numeric_std.all;&lt;br /&gt;
&lt;br /&gt;
entity ucecho is&lt;br /&gt;
   port(&lt;br /&gt;
      pc      : in unsigned(7 downto 0);&lt;br /&gt;
      pb      : out unsigned(7 downto 0);&lt;br /&gt;
      CLK     : in std_logic&lt;br /&gt;
   );&lt;br /&gt;
end ucecho;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--signal declaration&lt;br /&gt;
architecture RTL of ucecho is&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
    dpUCECHO: process(CLK)&lt;br /&gt;
    begin&lt;br /&gt;
         if CLK&#039; event and CLK = &#039;1&#039; then&lt;br /&gt;
	    if ( pc &amp;gt;= 97 ) and ( pc &amp;lt;= 122)&lt;br /&gt;
	    then&lt;br /&gt;
		pb &amp;lt;= pc - 32;&lt;br /&gt;
	    else&lt;br /&gt;
		pb &amp;lt;= pc;&lt;br /&gt;
	    end if;&lt;br /&gt;
	end if;&lt;br /&gt;
    end process dpUCECHO;&lt;br /&gt;
    &lt;br /&gt;
end RTL;&lt;br /&gt;
&amp;lt;/vhdl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UCEcho.java ===&lt;br /&gt;
Das ist der Java-Quellcode für die PC-seitige Software / für den Treiber:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
&lt;br /&gt;
import ch.ntb.usb.*;&lt;br /&gt;
&lt;br /&gt;
import ztex.*;&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* ParameterException **************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// Exception the prints a help message&lt;br /&gt;
class ParameterException extends Exception {&lt;br /&gt;
    public final static String helpMsg = new String (&lt;br /&gt;
                &amp;quot;Parameters:\n&amp;quot;+&lt;br /&gt;
                &amp;quot;    -d &amp;lt;number&amp;gt;       Device Number (default: 0)\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -f                Force uploads\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -p                Print bus info\n&amp;quot; +&lt;br /&gt;
                &amp;quot;    -h                This help&amp;quot; );&lt;br /&gt;
    &lt;br /&gt;
    public ParameterException (String msg) {&lt;br /&gt;
        super( msg + &amp;quot;\n&amp;quot; + helpMsg );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
// ******* Test0 ***************************************************************&lt;br /&gt;
// *****************************************************************************&lt;br /&gt;
class UCEcho extends Ztex1v1 {&lt;br /&gt;
&lt;br /&gt;
// ******* UCEcho **************************************************************&lt;br /&gt;
// constructor&lt;br /&gt;
    public UCEcho ( ZtexDevice1 pDev ) throws UsbException, ZtexDescriptorException {&lt;br /&gt;
        super ( pDev );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* claimInterface ******************************************************&lt;br /&gt;
// claims interface 0&lt;br /&gt;
    public void claimInterface ( ) throws UsbException{&lt;br /&gt;
        if ( LibusbJava.usb_claim_interface(handle(), 0) &amp;lt; 0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Claiming interface 0 failed: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ******* releaseInterface ****************************************************&lt;br /&gt;
// releases interface 0&lt;br /&gt;
    public void releaseInterface ( ) {&lt;br /&gt;
        LibusbJava.usb_release_interface(handle(), 0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* echo ****************************************************************&lt;br /&gt;
// writes a string to Endpoint 4, reads it back from Endpoint 2 and writes the output to System.out&lt;br /&gt;
    public void echo ( String input ) throws UsbException {&lt;br /&gt;
        byte buf[] = input.getBytes(); &lt;br /&gt;
        int i = LibusbJava.usb_bulk_write(handle, 4, buf, buf.length, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error sending data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Send &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+input+&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            Thread.sleep( 10 );&lt;br /&gt;
        }&lt;br /&gt;
            catch ( InterruptedException e ) {&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        buf = new byte[1024];&lt;br /&gt;
        i = LibusbJava.usb_bulk_read(handle, 2, buf, 1024, 1000);&lt;br /&gt;
        if ( i&amp;lt;0 )&lt;br /&gt;
            throw new UsbException(&amp;quot;Error receiving data: &amp;quot; + LibusbJava.usb_strerror());&lt;br /&gt;
        System.out.println(&amp;quot;Read &amp;quot;+i+&amp;quot; bytes: `&amp;quot;+new String(buf,0,i)+&amp;quot;&#039;&amp;quot; );  &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
// ******* main ****************************************************************&lt;br /&gt;
    public static void main (String args[]) {&lt;br /&gt;
    &lt;br /&gt;
        int devNum = 0;&lt;br /&gt;
        boolean force = false;&lt;br /&gt;
        &lt;br /&gt;
        try {&lt;br /&gt;
// init USB stuff&lt;br /&gt;
            LibusbJava.usb_init();&lt;br /&gt;
&lt;br /&gt;
// scan the USB bus&lt;br /&gt;
            ZtexScanBus1 bus = new ZtexScanBus1( ZtexDevice1.cypressVendorId, ZtexDevice1.cypressProductId, true, false, 1);&lt;br /&gt;
            if ( bus.numberOfDevices() &amp;lt;= 0) {&lt;br /&gt;
                System.err.println(&amp;quot;No devices found&amp;quot;);&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// scan the command line arguments&lt;br /&gt;
            for (int i=0; i&amp;lt;args.length; i++ ) {&lt;br /&gt;
                if ( args[i].equals(&amp;quot;-d&amp;quot;) ) {&lt;br /&gt;
                    i++;&lt;br /&gt;
                    try {&lt;br /&gt;
                        if (i&amp;gt;=args.length) throw new Exception();&lt;br /&gt;
                        devNum = Integer.parseInt( args[i] );&lt;br /&gt;
                    } &lt;br /&gt;
                    catch (Exception e) {&lt;br /&gt;
                        throw new ParameterException(&amp;quot;Device number expected after -d&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-f&amp;quot;) ) {&lt;br /&gt;
                    force = true;&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-p&amp;quot;) ) {&lt;br /&gt;
                    bus.printBus(System.out);&lt;br /&gt;
                    System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else if ( args[i].equals(&amp;quot;-h&amp;quot;) ) {&lt;br /&gt;
                        System.err.println(ParameterException.helpMsg);&lt;br /&gt;
                        System.exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                else throw new ParameterException(&amp;quot;Invalid Parameter: &amp;quot;+args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
// create the main class            &lt;br /&gt;
            UCEcho ztex = new UCEcho ( bus.device(devNum) );&lt;br /&gt;
            &lt;br /&gt;
// upload the firmware if necessary&lt;br /&gt;
            if ( force || ! ztex.valid() || ! ztex.dev().productString().equals(&amp;quot;ucecho for USB FPGA MODULE 1.2&amp;quot;)  ) {&lt;br /&gt;
                ztex.uploadFirmware( &amp;quot;ucecho.ihx&amp;quot;, force );&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// upload the bitstream if necessary&lt;br /&gt;
            if ( force || ! ztex.getFpgaConfiguration() ) {&lt;br /&gt;
                System.out.println(&amp;quot;FPGA configuration time: &amp;quot; + ztex.configureFpga( &amp;quot;fpga/ucecho.bin&amp;quot; , force ) + &amp;quot; ms&amp;quot;);&lt;br /&gt;
            } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// claim interface 0&lt;br /&gt;
            ztex.claimInterface();&lt;br /&gt;
            &lt;br /&gt;
// read string from stdin and write it to USB device&lt;br /&gt;
            String str = &amp;quot;&amp;quot;;&lt;br /&gt;
            BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );&lt;br /&gt;
            while ( ! str.equals(&amp;quot;quit&amp;quot;) ) {&lt;br /&gt;
                System.out.print(&amp;quot;Enter a string or `quit&#039; to exit the program: &amp;quot;);&lt;br /&gt;
                str = reader.readLine();&lt;br /&gt;
                ztex.echo(str);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
// release interface 0&lt;br /&gt;
            ztex.releaseInterface();    &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot;+e.getLocalizedMessage() );&lt;br /&gt;
        } &lt;br /&gt;
   } &lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation des Pakets ==&lt;br /&gt;
Das Paket ist als tar.bz2- und als zip-Archiv verfügbar und kann z.B. mittels der Kommandos &lt;br /&gt;
&lt;br /&gt;
  bunzip2 -c ztex-&amp;lt;release number&amp;gt;.tar.bz2 | tar -x&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
  unzip ztex-&amp;lt;release number&amp;gt;.zip,&lt;br /&gt;
&lt;br /&gt;
entpackt werden.&lt;br /&gt;
&lt;br /&gt;
== Kompilieren des Beispiels ==&lt;br /&gt;
&lt;br /&gt;
Die Regeln zum Zusammenbauen der Binaries werden mittels &#039;&#039;Makefile&#039;&#039;&#039;s festgelegt, d.h. eine GNU-Umgebung ist erforderlich. Das Kompilieren geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# Sicherstellen, dass die [[#Systemvoraussetzungen|Systemvoraussetzungen]] erfüllt sind, insbesondere dass &#039;&#039;javac&#039;&#039; bzw. &#039;&#039;javac.exe&#039;&#039; -- der Java-Kompiler gefunden werden kann (per &#039;&#039;PATH&#039;&#039; Umgebungsvariable)&lt;br /&gt;
# Ein Terminal (Linux) öffnen oder MSys (Windows) starten&lt;br /&gt;
# Angenommen das Firmware-Kit wurde im Verzeichnis $HOME/ztex (Linux) oder im Verzeichniss c:\ztex (Windows) installiert. (Das aufgelistete Beispiel befindet sich im Unterverzeichnis &#039;&#039;examples/usb-fpga-1.2/ucecho/&#039;&#039;.) In dieses Verzeichnis kann mittels der Befehle&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;cd $HOME/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Linux, bzw.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;code&amp;gt;   cd /c/ztex/examples/usb-fpga-1.2/ucecho/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; unter Windows+MSys gewechselt werden.&lt;br /&gt;
# Das Kommando&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; baut alles zusammen (einschließlich der Firmware) und packt es in ein .jar-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Ausführen des Beispiels ==&lt;br /&gt;
Zum Ausführen des Beispiels wird nur die .jar-Datei benötigt, welche sowohl unter Linux als auch unter Windows läuft. (Unter Windows muss der Treiber libusb-win32 installiert sein.) Diese .jar-Datei enthält den Java-Bytecode, die Firmware für den EZ-USB Microcontroller, den Bitstream für das FPGA und die Betriebssystem-abhängigen Bibliotheken. Das Ausführen geschieht in folgenden Schritten:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nur Windows:&#039;&#039;&#039; Den Treiber libusb-win32 bei Bedarf installieren, d.h. libusb-win32 dem Gerät wie folgt zuweisen:&lt;br /&gt;
## Das Gerät anstecken&lt;br /&gt;
## Wenn Windows nach dem Treiber fragt, die Datei &#039;&#039;cypress.inf&#039;&#039; aus dem Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039; des Firmware-Kits auswählen. (Diese Datei ist gültig, falls die Cypress Hersteller- und Produkt-ID verwendet wird, was nur zu experimentellen Zwecken bei nichtöffentlicher Verwendung gestattet ist. Im Fall einer anderen Hersteller- und Produkt-ID kann mittels des Werkzeuges &#039;&#039;inf-wizard.exe&#039;&#039; im Unterverzeichnis &#039;&#039;libusb-win32&#039;&#039;eine neue .inf Datei erstellt werden.&lt;br /&gt;
# Das Beispiel mittels des Kommandos &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;java -cp UCEcho.jar UCEcho&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ausführen. Da die .jar-Datei alles enthält, was zum Ausführen des Beispiels notwendig ist, kann die Datei an jede Stelle kopiert / von jeder Stelle aus ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Ein Beispielaufruf sieht wie folgt aus:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
stefan@ws2:/drv_a2/usb-fpga/ztex-1.1/examples/usb-fpga-1.2/ucecho$ java -cp UCEcho.jar UCEcho&lt;br /&gt;
FPGA configuration time: 1353 ms&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: Hello world!&lt;br /&gt;
Send 12 bytes: `Hello world!&#039;&lt;br /&gt;
Read 12 bytes: `HELLO WORLD!&#039;&lt;br /&gt;
&lt;br /&gt;
Enter a string or `quit&#039; to exit the program: quit&lt;br /&gt;
Send 4 bytes: `quit&#039;&lt;br /&gt;
Read 4 bytes: `QUIT&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stefan2</name></author>
	</entry>
</feed>