Projekt
Hardware
Typenliste




UPROG2: Universeller Programmer für Linux

V1.28 (c) 2017 Jörg Wolfram





1 Hinweis und Lizenz

Das Programm unterliegt der GPL (GNU General Public Licence) Version 3 oder höher, jede Nutzung der Software/Informationen nonkonform zur GPL oder ausserhalb des Geltungsbereiches der GPL ist untersagt!
Die Veröffentlichung dieses Projekts erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, auch ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.
Alle im Text genannten Marken sind Eigentum des entsprechenden Inhabers.

Die Software wurde unter und für Linux entwickelt, Unterstützung für andere Betriebssysteme ist nicht vorgesehen.

2 Allgemeines

Angefangen hat es vor ein paar Jahre damit, dass es keine gescheite Software für den TBDML (BDM-Programmer für Freescale/NXP S12(x)) gab, die auch die S12XD und S12XE unterstützt. Nach einigen (vergeblichen) Versuchen, die vorhandene Software anzupassen, habe ich mich letztendlich dazu entschlossen mir einen eigenen Programmer zu bauen.
Inzwischen sind einige andere Controllerfamilien dazugekommen, irgendwann war der Mega168 zu klein und ich habe ein komplettes Re-Design mit einem Mega644 gemacht.
Und da ich wohl nicht er Einzige bin der sich mit deratigen Problemen rumschlägt, habe ich mich entschlossen, das Projekt zu dokumentieren und zu veröffentlichen.

2.1 Unterstützte Controller- und Speicherfamilien

Die Liste der unterstützten Devices ist fest in das Programm integriert und schon recht lang, zusätzliche Devices könen nur durch Neukompilation hinzugefügt werden. Derzeit können Devices aus folgenden Familien programmiert werden:
  • Atmel AVR (SPI)
  • Atmel ATxmega (PDI)
  • Cypress PSOC4 (SWD)
  • Microchip PIC10xx/PIC12xx/PIC16xx
  • Microchip PIC18xx
  • Microchip dsPIC33xx
  • NXP/Freescale MPC56xx (BAM)
  • NXP/Freescale HCS08
  • NXP/Freescale HCS12(X)
  • Renesas R8C
  • Renesas 78K0R
  • Renesas RL78
  • ST Micro SPC56xx (BAM)
  • ST Micro SPC56xx (JTAG)
  • ST Micro ST7FLITE
  • ST Micro STM8 (SWIM)
  • ST Micro STM32 (SWD)
  • TI MSP430 (SBW)
  • TI CC2540/1
  • XILINX XC9500/XL
  • Atmel Dataflash (AT45DBxx)
  • SPI-Flash (25xx)
  • SPI-EEPROM (250xx)
  • I2C-EEPROM (24xx)
Wenn man uprog2 LIST aufruft, werden die aktuelle unterstützten Devices ausgegeben. Geplant sind derzeit noch LPCxxxx von NXP, Freescale ColdFire, Renesas (früher NEC) V850 und TI C2000 (TMS32F28xx). Wann ich letztendlich dazukomme, steht allerdings in den Sternen. Und natürlich die Erweiterung der vorhandenen Listen um weitere Devices.

2.2 Konzept

Das Steuerprogramm auf dem PC ist ein einzelnes Binary, es werden keine witeren Dateien benötigt/angelegt. Auf dem System müssen libbluetooth und libftdi (bzw. libftdi1) vorhanden sein.
Das mit der fest eincompilierten Typenliste ist zwar erstmal etwas unflexibel, für mich aber völlig ausreichend. Beim Start prüft das Programm ob der uprog2d-Dämon schon läuft, ansonsten wird der Prozess geforkt. Die Kommunikation mit dem Dämon findet über Shared Memory statt, Auf die gleiche Weise könnte dann auch ein Debugger über Programmer mit seinem Device kommunizieren.
Updates werden automatisch auf den Programmer übertragen, wenn die PC-Software eine veraltete Version feststellt.

2.3 Installation



2.3.1 Auf dem PC

Momentan werden Intel 32-bit und x86-64 unterstützt. Je nach System sollte uprog-32 oder uprog2-64 nach /usr/local/uprog2 kopiert werden, das war es dann auch schon. Ausserdem müssen libftdi und libbluetooth auf dem Rechner installiert sein.

2.3.2 Auf dem AVR

Zuerst sollten die Fuses prorammiert werden. Für den Mega644 ist folgende Einstellung vorgesehen:
  • LOW FUSE: 0xe6
  • HIGH FUSE: 0xd0
  • EXT FUSE: 0xff
Danach muss das entsprechende Hexfile (main-bt.hex, main-usb.hex) programmiert werden. Die Bluetooth-Variante führt beim erstmaligen Start eine Initialisation des Bluetooth-Modules durch, danach muss das Pairing durchgeführt werden. Als Pin ist 55309 fest im Programm codiert. Soll diese geändert werden, muß das AVR-Programm anschließend neu übersetzt werden.

2.4 Compilieren und Erweitern

Eine Erweiterung auf zusätzliche Controller ist derzeit nur durch eine Neucompilation möglich. Soweit möglich, werde ich entsprechende Anfragen in zukünftigen Softwareversionen berücksichtigen.
Bei vielen Controllerfamilien lassen sich als "Workaround" ähnliche Typen finden. Wenn dabei die ID-Abfrage zu einem Abbruch führt, lässt sich diese meist auch über das Kommando "ii" (ignore ID) entschärfen.
Für das Übersetzen der Firmware benötigt man AVRA, für die PC-Seite ist eine Standard-Toolchain mit make und gcc ausreichend. Für die Übersetzung der EXEC-Files (z.B. PowerPC und STM32) wird dafür auch noch die entsprechende Binutils-Variante benötigt.

2.5 Benutzung des Programmes



2.5.1 Aufruf über Kommandozeile

Die Benutzung über die Kommandozeile erfolgt nach einem festen Schema und ist dafür ausgelegt, möglichst einfach in Makefiles integriert zu werden. Das erste Argument ist immer der Controller- oder Speichertyp. Danach folgen die Kommandos mit einem vorangestellten Minuszeichen. Zwischen den einzelnen Kommandos sind keine Leerzeichen etc. zugelassen. Je nach auszuführenden Kommandos muss noch ein dritter Parameter folgen. Dies ist meist ein Dateiname oder ein numerischer Wert. Die möglichen Kommandos können mittels uprog2 CONTROLLERTYP -help angezeigt werden.
#################################################################################
#                                                                               #
#  UNI-Programmer UPROG2 V1.28                                                  #
#                                                                               #
#  (c) 2012-2017 Joerg Wolfram                                                  #
#                                                                               #
#  usage: uprog2 device -commands [file/data]                                   #
#         uprog2 KILL                            kill active daemon             #
#         uprog2 LIST                            for device list                #
#         uprog2 device -help                    for device specific commands   #
#                                                                               #
#   497 types in database                                                       #
#                                                                               #
#################################################################################
>> USB programmer is active.
*** ATMEGA328P can be programmed with: (1=VSS  2=VDD  3=RST  4=SCK  5=MISO  6=MOSI) ***
Version =  1.2
Sysver  =  0007
V-Ext   =  0.0V
V-PROG  =  4.9V
-- 5v -- set VDD to 5V
-- ls -- low spi speed
-- ea -- chip erase
-- pm -- main flash program
-- vm -- main flash verify
-- rm -- main flash readout
-- pe -- eeprom program
-- ve -- eeprom verify
-- re -- eeprom readout
-- lf -- set low fuse
-- hf -- set high fuse
-- ef -- set ext fuse
-- lb -- set lock bits
-- st -- start device
-- ii -- ignore wrong ID
Soweit möglich, sind die Kommandos für alle Typen einheitlich. Wenn sich Kommandos gegenseitig ausschließen (z.B. Verify und Readout), wird das Kommando, welches Dateien überschreiben würde, deaktiviert.

2.5.2 Ein Beispiel

Will man z.B. einen ATMega328 mit der Datei main.hex flashen mit anschließendem Verify, würde die Kommendozeile folgendermaßen lauten: uprog2 ATMEGA328P -eapmvm main.hex
#################################################################################
#                                                                               #
#  UNI-Programmer UPROG2 V1.28                                                  #
#                                                                               #
#  (c) 2012-2017 Joerg Wolfram                                                  #
#                                                                               #
#  usage: uprog2 device -commands [file/data]                                   #
#         uprog2 KILL                            kill active daemon             #
#         uprog2 LIST                            for device list                #
#         uprog2 device -help                    for device specific commands   #
#                                                                               #
#   497 types in database                                                       #
#                                                                               #
#################################################################################
>> USB programmer is active.
*** ATMEGA328P can be programmed with: (1=VSS  2=VDD  3=RST  4=SCK  5=MISO  6=MOSI) ***
Version =  1.2
Sysver  =  0007
V-Ext   =  0.0V
V-PROG  =  4.9V
## using high speed spi mode
## Action: chip erase
## Action: flash program using main.hex
## Action: flash verify using main.hex
INIT
READ ID
SIGNATURE  = 1E 95 0F
FUSE LOW       = 0xE6
FUSE HIGH      = 0xD0
FUSE EXT       = 0xFD
Lock Bits      = 0xFF
Calibration    = 0x93
CHIP ERASE
MAIN PROG    |**************************************************|
MAIN READ    |**************************************************|
OK                                                                                                 
Bei länger dauernden Operationen wird, soweit möglich, ein Fortschrittsbalken angezeigt.

2.5.3 Das Webinterface

Das Web-Interface ist zur Zeit noch im Experimentierstadium, lediglich der Frequenzgenerator lässt sich damit steuern. Der Logik-Analyzer zeigt zur Zeit nur feste Demo-Daten an und Aufgerufen wird mittels uprog WSERVER, die aktuelle Kommunikation wird zu Debug-Zwecken auf der Kommandozeile angezeigt. Das Hauptmenü enthält nur einige Buttons mit denen die einzelnen Unterfunktionen aufgerufen werden können. Mittels Shut Down lässt sich der Webserver wieder stoppen.



die Programmer-Funktion lässt sich momentan nicht über das Web-Interface nutzen. Hier ist auch der Nutzen fraglich, da die Bedienung via Kommandozeile wesentlich praktischer ist, als Dateien hochzuladen und diese dann per klick zu programmieren. Richtig sinnvoll würde das erst in Zusammenarbeit mit einer Web-IDE.
Der Frequenzgenerator ist schon über das Interface benutzbar.



Der Logik-Analyzer zeigt zur Zeit nur feste Demo-Daten an. Zurück ins Hauptmenü kommt man, wenn man auf das UPROG-Icon klickt. Das Ganze ist noch in Arbeit, geplant sind Abtastraten von 1MHz und 100KHz, dabei wird mit Datenkompression gearbeitet. Klickt man in das Waveform-Fenster, wird an die Stelle ein Marker gesetzt. Wird mit gedrückter Control/Strg Taste geklickt, wird oberhalb die Zeitdifferenz zur aktuellen Marker-Position sowie die der Periodendauer entsprechende Frequenz angezeigt.





3 Changelog

5.10.2017 Version 1.28
  • System-Version ist jetzt 0007, Update erfolgt automatisch
  • Bugfix: Leerblock-Erkennung bei PIC16xxx entfernt (wird sequentiell programmmiert)
  • MSP430F5xx fehlende Funktionalität beim Löschen/Schreiben integriert
  • MSP430 Flash löschen mit/ohne INFO-A
  • Single-Core SPC56xx können jetzt auch über JTAG programmiert werden
  • SPC56xx Programmierung über BAM hat jetzt andere Typbezeichhnungen (SPC56XX-BL)
  • Unterstützung für SPI-EEPROMs (AT25010...AT25640)
  • Neue Funktion: Frequenzgenerator
  • Neue Funktion: Web-Interface
25.2.2017 Version 1.26
  • Anzeige über Debug-LEDs beim SPC56xx deaktiviert
  • Bugfix: Pageoffset bei SPI-Flashes stimmte nicht
  • Bugfix: beim MSP430 wurden falsche Programmerpins angesteuert
  • Bugfix: Erase Dataflash beim RL78 brach mit Fehler ab, obwohl alles OK war
  • 64MB SPI-Flash und Quad-Mode hinzugefügt
  • MLX90363 readout (EEPROM write noch nicht implementiert
8.11.2016 Version 1.25a
  • DOC: Fehler in der Controllerbeschaltung behoben (10K-Widerstand an PA3)
7.11.2016 Version 1.25
  • Initiale Version


created with latex2web.pl v0.64 © 2006-2016 Joerg Wolfram