Inhaltsverzeichnis
USB-Blaster
Es soll ein Programmieradapter für FPGAs von Altera(USB-Blaster) entstehen.
Vorgeschichte
Jetzt liegen also noch die Leiterplatten und vorallem auch die teuren USB-Schaltkreise rum. Um den leider fehlgeschlagenen Projekt noch einen Sinn zu geben, werden auf Grundlage dieser Leiterplatten USB-Blaster hergestellt. Dazu wird die Leiterplatte für eine übliche JTAG-Verbindung umgebaut. Als Software läuft auf der Zypresse eine freie Firmware, die den Altera USBBlaster nachbildet.
LOGIC
Zur Referenz die initiale Leiterplatte, wie sie als Logic-Analyzer angedacht war:
Schaltplan
Layout
EEPROM-Inhalt
Anleitung zur Inbetriebnahme
Umbau der Leiterplatte
Es wird die Leiterplatte größtenteils laut Schaltplan von LOGIC aufgebaut. Es wird die Minimalbeschaltung beschrieben und die zu bestückenden BE in der empfohlenen Aufbaureihenfolge aufgelistet:
- X1, U1, C13, C14, C12, C21, R19, H1, R3
- R19 mit 1M bestücken
- H1 mit grüner LED bestücken
- Spannung über C12 soll 3,3V betragen, grüne LED leuchtet
- U2, U3, C1-C11, Q1, C17, C18, R8, R1, R2, R4, R6
- R4 und R5 mit 4k7 bestücken
- R8 mit 1M bestücken
- C18 mit 12p bestücken
- Nach Anstecken von USB wird ein neues Gerät mit VID = 0x04B4 und PID = 0x8613 erkannt
- D5, D7, D4, D8
- JTAG-Stecker bestücken
- mit dünnen Lackdraht die Verbindungen zwischen Steckverbinder und Zypresse herstellen
PC2 - 59 | TCK | 1 | 2 | GND |
PC1 - 58 | TDO | 3 | 4 | V_FPGA |
PC3 - 60 | TMS | 5 | 6 | NC |
NC | 7 | 8 | NC | |
PC0 - 57 | TDI | 9 | 10 | GND |
EEPROM-Programmierung
Zuerst lädt man sich usbjtag.hex aus dem Github. Mit aktuellen Versionen von sdcc habe ich den Code nicht funktionsfähig kompilieren können, deswegen direkt die hex benutzen.
Danach wird das Gerät angeschlossen und die Bus- und Gerätenummer ermittelt:
# lsusb Bus 004 Device 006: ID 04b4:8613 Cypress Semiconductor Corp. CY7C68013 EZ-USB FX2 USB 2.0 Development Kit
In diesem Beispiel ist die Gerätenummer 006 und der Bus 004.
Mit diesen Angaben wird die kompilierte Firmware im Hex-Format auf das Gerät bespielt. Direkt danach enumeriert sich das Gerät neu, diesmal als USBBlaster.
# fxload -I usbjtag.hex -D /dev/bus/usb/004/006 -t fx2lp # dmesg [75309.252135] usb 1-5: new high-speed USB device number 13 using ehci-pci [75309.384450] usb 1-5: config 1 interface 0 altsetting 0 bulk endpoint 0x81 has invalid maxpacket 64 [75309.384463] usb 1-5: config 1 interface 0 altsetting 0 bulk endpoint 0x2 has invalid maxpacket 64 [75309.384937] usb 1-5: New USB device found, idVendor=09fb, idProduct=6001 [75309.384944] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [75309.384951] usb 1-5: Product: USB-Blaster [75309.384957] usb 1-5: Manufacturer: EPFL [75309.384963] usb 1-5: SerialNumber: 00000000
Nun ist das Gerät bereit als USBBlaster zu fungieren
Zu beachten: Dieser Prozess muss bei jedem erneuten Einstecken des USBBlasters gemacht werden. Um die Firmware dauerhaft in das EEPROM zu schreiben, fehlt noch ein 2nd Stage Bootloader.
Für Benutzer von Arch Linux ist ein AUR fxload-libusb verfügbar:
# fxload-libusb -i usbjtag.hex -t fx2lp