mikrocontroller.net

Forum: Projekte & Code "Universalprogrammer" für Linux


Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
13 lesenswert
nicht lesenswert
Nachdem es entsprechende Nachfrage gab, habe ich mein 
Universalprogrammer-Projekt etwas aufgeräumt und dokumentiert.

http://www.jcwolfram.de/projekte/uprog2/main.php

Hauptgrund für die Entwicklung war damals, dass es für die 
Programmierung von HCS12XE-Controllern nichts Brauchbares unter Linux 
gab, nach und nach sind dann weitere Controllerfamilien dazugekommen.

Als Controller kommte ein ATMega644 zum Einsatz, derzeit sind noch etwa 
20K Flash frei. Von der Hardware her ist derzeit nur die USB-Variante 
ausführlich dokumentiert, es gibt auch noch eine Bluetooth-Variante mit 
eingebautem Akku (derzeit nur als Lochraster ohne Dokumentation und mit 
etwas anderer Pinbelegung), die ich bei Bedarf noch dokumentieren kann.

Die Liste der programmierbaren Devices umfasst derzeit etwa 400 Typen, 
wobei teilweise auch generische dabei sind (z.B. STM32F0xx-32K), die 
meherere Typen abdecken.
Programmiert werden können:

- 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 ST7FLITE
- ST Micro STM8 (SWIM)
- ST Micro STM32 (SWD)
- TI MSP430 (SBW)
- TI CC2540/1
- XILINX XC9500/XL
- Atmel Dataflash (AT45DBxx)
- SPI-Flash (25xx)
- I2C-EEPROM (24xx)

Die Liste ist fest im Programm integriert (über Header-Files), ich habe 
mir sie bis jetzt einfach erweitert und neu compiliert, wenn es nötig 
war. Eine Auslagerung in eine externe Datei ist derzeit nicht 
vorgesehen, das Projekt war eigentlich auch nie zur Veröffentlichung 
geplant...

Jörg

Autor: Sven K. (svenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

Wahnsinn wieviel Arbeit Du in den Programmer gesteckt hast.
Vielen Dank dass Du das Projekt veröffentlichst.

Einen kleinen Schaltungsfehler habe ich gefunden: der 10k Widerstand um 
den AVR ist in der Zeichnung kurzgeschlossen.

Gruß Sven

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis, ich habe das korrigiert und gleich noch ein 
Changelog mit auf die Seite gemacht. Der andere Anschluss des 
Widerstands muss natürlich an PA3. Damit wird die Device-Spannung 
gemessen, wenn sie einen gewissen Wert übersteigt, wird VDD auf Pin2 der 
Leiste nicht angesteuert. Über die Schottky-Diode werden dann ggf. die 
Pegel auf die der externen Spannungsquelle angehoben.

Was momentan noch fehlt, sind die dsPIC30. Der Code dafür ist auch schon 
drin, lediglich die Device-Definitionen fehlen. Werde ich aber demnächst 
noch ergänzen.

Jörg

Autor: Axel Schwenke (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nett. Und sehr vorbildlich alles mit Quellcode. Werde ich mir bei 
Gelegenheit mal näher ansehen.

Autor: Thomas Winkler (Firma: privat) (diddl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tolles Projekt, danke! 😅

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Es gibt ein kleines Update (V1.26). Es sind ein paar Bugfixes dabei, 
beim MSP430 kann man jetzt festlegen, ob das INFO-A Segment mit gelöscht 
werden soll. SPI-Flashes können jetzt auch im Quad-Mode angesprochen 
werden, das bringt etwas mehr Geschwindigkeit, insbesondere beim 
Lesen/Verify. Außerdem kann man jetzt 3D-Magnetfeldsensoren (MLX90363) 
direkt auslesen. das Ganze wieder unter:

http://www.jcwolfram.de/projekte/uprog2/main.php

Jörg

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach längerer Zeit gibt es wieder mal ein Update. Hinzugekommen sind 
SPI-EEPROMs (AT25010...) und  Programmierung der SPC56xxx über JTAG. 
Daneben gibt es noch ein paar Bugfixes und Ergänzungen, z.B. Erase und 
Programm für die MSP430F5xxx wobei letzteres noch relativ langsam ist, 
da ich die Register noch direkt über SBW beschreibe.

Und es gibt einen Funktionsgenerator, einstellbar von 153Hz bis 2,5MHz. 
Dabei stehen neben der eingestellten Frequenz auch noch geteilte (1/2, 
1/4, 1/8, 1/16 und 1/32) zur Verfügung.
Mittelfristig geplant ist ein Web-Interface für die meisten Funktionen 
und ein kleiner Logik-Analysator mit max. 1 MHz Abtastrate. Über das 
Webinterface lässt sich zur Zeit nur der Frequenzgenerator steuern, dazu 
wird der Webserver mit

uprog2 WSERVER

gestartet (Programmer muss angeschlossen sein) und im Browser die Seite 
http://localhost:48512 aufgerufen. Im Moment ist das Ganze aber nur 
experimentell, da ich für mich selbst das Webinterface eigentlich (noch) 
nicht brauche.

Jörg

Autor: Zweifel (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Wenn es noch eine Windows Oberfläche dafür gäbe, wäre das der beste 
Programmer, den es gibt!

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tolles Teil, absolut!

Auf der Seite http://www.jcwolfram.de/projekte/uprog2/reference.php 
scheint mir bei 25.1 die Signalbelegung unvollständig zu sein.

Gibt es auch ein Layout für ein PCB?

Autor: Vancouver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cooles Projekt und sorgfältig dokumentiert, Respekt.

Wäre es prinzipiell möglich, das Teil basierend auf einen Arduino nano 
aufzubauen (AtMega328)? Oder ist ein AtMega644 zwingend erforderlich? 
Man könnte sonst ein kleines Shield mit den notwendigen diskreten 
Bauteilen draufstecken und würde sich den Aufbau des Prozessorsystems 
sparen, die Nanos gibts ja beim Chinesen fast umsonst. Anpassungen der 
Software wären natürlich zu machen.

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Eine Windows-Version wird es von mir nicht geben. Dazu müsste ich mich 
damit beschäftigen, dafür ist mir aber meine Zeit zu schade und der 
Mehrwert wäre Null (Ich benutze kein Windows). Beim AX81 ließen sich die 
Programme via MinGW relativ einfach übersetzen, hier müsste man aber das 
Konzept zum großen Teil überarbeiten (forking, shared memory). Und 
selbst dann hat man "nur" ein Kommandozeilentool und keine grafische 
Oberfläche.

Eine Idee wäre, das Projekt auf einen Raspberry Pi zu portieren (mit 
direkter Kommunikation über UART) und dazu ein minimales, schnell 
bootendes Image zu erstellen. Mit entsprechend ausgebautem Webinterface 
könnte man dann per Ethernet oder WLAN programmieren und wäre vom OS 
unabhängig.

Das Problem mit der Pinbelegung habe ich korrigiert. Es lag an meinem 
Latex->HTML Konverter, da hat der Tabellenumbruch gefehlt. In der 
PDF-Doku war es richtig drin.

Layout für ein PCB gibt es schon (gEDA PCB), das kann ich auch 
hochladen. Allerdings habe ich teilweise Bauteile genommen, die halt 
sich halt gerade in der Bastelkiste befunden haben. So sind zum Beispiel 
die FETs total überdimensioniert, aber ich hatte halt zu dem Zeitpunkt 
nix passenderes da. Und auch beim Doppel-OPV musste ich auf einen 
anderen Typ gehen, da der original vorgesehene defekt war und ich keinen 
neuen kaufen wollte. Daher auch die Drahtbrücken in dem Bereich.


Das ursprüngliche Projekt lief sogar auf einem Mega168/Mega328P, war 
aber sehr eingeschränkt. Die aktuelle Version belegt aber bei mir 
inzwischen 52K Flash. Also müsste ein Teil der unterstützten Typen 
wegfallen. Außerdem müsste man generell die Blockgröße ändern, da sonst 
der RAM nicht ausreicht. Also müsste man noch eine zweite PC-Version 
pflegen oder eine Programmer-Erkennung nebst Blockgrößen-Umschaltung 
einbauen. Und da ich die Libftdi verwende, würden Arduinos mit anderem 
USB-Seriell Wandler auch nicht gehen.


Jörg

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt den Arduino Mega mit 128k, der müsste doch auch gehen, hat einen 
FT232 an Bord. Oder gleich einen Arduino Mega 2560 (die haben aber meist 
einen CH340 drauf, der wird aber von Linux verstanden).

Autor: Andreas Rückert (daybyter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns billig sein soll einen stm32f103 ? Braucht mal aber wohl 
Levelshifter.

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher könnte man zumindest Teilfunktionen auf einen Arduino portieren. 
Aber da geht es schon los beim Quarz. Der UPROG2 hat 20MHz, Arduino 
16MHz. Einfach anpassen ist nicht, da z.B bei allen seriellen 
Protokollen das Timing über die Anzahl der Takte geht. Und auch die 
Spannungsversorgung müsste angepasst oder auf die 3,3V/5V Umschaltung 
verzichtet werden.

Auch wenn der CH430 unter Linux als serieller Port ansteuerbar ist, über 
die libftdi lässt er sich meines Wissens nach nicht ansteuern. Die habe 
ich aber gebraucht, weil ich über den seriellen Port die 1,25MBps nicht 
gescheit hinbekommen habe. Da hat sich der Rechner hin und wieder 
verschluckt, trotz RTS-Auswertung im Controller. Mit der libftdi kann 
ich über chunk_size und latency_timer das Verhalten an meine 2K-Pakete 
viel besser anpassen. Auch bei Bluetooth gehe ich direkt über ein Socket 
und nicht über /dev/rfcommxx.

Und, da bin ich mir ziemlich sicher, sobald das Projekt auf einem 
Arduino läuft kommen früher oder später Forderungen, dass der Quellcode 
auch mit der Arduino-IDE übersetzbar und flashbar ist...


STM32: Bevor ich über 20000 Zeilen Assemblercode von AVR nach Thumb2 
übersetze, fallen mir sicher sinnvollere Projekte ein :-)

Jörg

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Erläuterungen, ist verständlich.

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz vor Weihnachten gibt es noch ein kleines Update auf Version 1.29. 
Neben ein paar Fehlerbereinigungen (Data-Flash bei den S12XE lag an der 
falschen Adresse) habe ich u.a. die Trimm-Funktion für die HCS08 
verbessert. Das Trimmen des internen Oszillators dauert jetzt zwar etwas 
länger, dafür ist es genauer und die Frequenz lässt sich auf 8, 9 oder 
10MHz einstellen.

Außerdem werden jetzt einige V850 / RH850 von Renesas unterstützt.


Bei den Sensoren ist der Rotary-Magnetsensor MLX90316 sowie der 
Drucksensor LPS25H dazugekommen, hier lassen sich Druck und Temperatur 
auslesen. Die Sensoren habe ich mit dazugenommen, auch wenn sie sich 
meist nicht programmieren lassen. Aber es hat mir schon das Debugging 
bei anderen Projekten erleichtert.


http://www.jcwolfram.de/projekte/uprog2/main.php


Jörg

: Bearbeitet durch User
Autor: Philipp Klaus Krause (Firma: Albert-Ludwigs-Universität) (pkk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mit stm8flash-Unterstützung?
Dann könnten STM8-Anwender den UPROG2 mit ihnen vertrauter Software 
nutzen.

Philipp

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Direkt über stm8flash wird es wohl nicht gehen, da die Kommunikation 
zwischen Programmer und Steuerprogramm nicht direkt sondern über einen 
Daemon erfolgt.
 Man könnte aber das Steuerprogramm (uprog2) dahingehend erweitern, dass 
es sich wie ein stm8flash verhält, wenn es als stm8flash aufgerufen wird 
(über Softlink). Wenn dazu dann noch parallel das "richtige" stm8flash 
installiert ist/wird, kann es aber zu Problemen und Missverständnissen 
führen, gegen die die abweichende Syntax von uprog2 wahrscheinlich das 
kleinere Übel ist.


Jörg

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die PIC18xxxx (ohne J und K) z.B. 18F2455 18F2550 etc. werden wohl nicht 
unterstützt?

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich fehlen sie nur in der Liste. Ich habe halt erstmal nur 
das eingetragen, was zu meinem "Mustern" irgendwie ähnlich war. Aber bei 
den PICs scheint es ja wohl hunderte von Typen zu geben.
Wenn man einen Typ mit gleicher Speicherausstattung nimmt und ii (ignore 
ID) als Parameter mit angibt, sollte es auch so gehen. Ich mache fast 
nichts mit PICs, wenn Du mir eine Liste mit gängigen Typen auflisten 
würdest, kann ich sie beim nächsten Release mit aufnehmen.

Jörg

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MS hat ja in Win10 eine Funktion eingebaut das Linux Programme direkt 
laufen können. Hat das Jemand schon mit der Soft hier versucht ?

Autor: MaWin (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Zweifel schrieb:
> Wenn es noch eine Windows Oberfläche dafür gäbe, wäre das der
> beste Programmer, den es gibt!

Schreib sie doch, ist doch alles dolumentiert.

Autor: Peter Sieg (petersieg)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Eine schöne Weihnachtsüberraschung wäre es, wenn jemand eine Platine 
dazu erstellt (für mich gerne auch als Through hole - muss aber nicht) 
und das Layout zum Bestellen bei den günstigen CN Lieferanten hier 
einstellt.
Gerne auch mit Sammelbestellung hier über das Forum ;-)

(Man darf sich ja aktuell gerade auch mal etwas wünschen ;-)

Peter

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joerg W. schrieb:
> wenn Du mir eine Liste mit gängigen Typen auflisten
> würdest, kann ich sie beim nächsten Release mit aufnehmen.

Von den PICs gibt es generell sehr viele Typen, m.W. mehrere Hundert.

In der 18er Serie gibt es die J und K-Typen, da hast Du ja schon einige, 
die laufen aber nur bis 3.6 Volt. Die Typen 18Fxxx und 18Fxxxx (ohne J 
oder K) sind 5-Volt-Typen und werden von Bastlern oft benutzt, wobei die 
Serie mit 3 Zahlen schon etwas antik sind, da wird geleg. noch der 
18F242 verbaut, aber auch dafür gibt es neuere Typen in der Serie mit 4 
Zahlen, auch da sehr viele Varianten.

Sehr oft verbaut werden 18F1320, 18F2455, 18F2550, 18F2620 sowie ihre 
Pendants die statt der führenden 2 eine 4 haben und statt 18 Pins dann 
40 bzw. 44 Pins haben.

Eine gute Übersicht findest Du unter 
http://www.sprut.de/electronic/pic/18f.htm und 
http://www.sprut.de/electronic/soft/usburn/usburn.htm#typen

Autor: Peter Sieg (petersieg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Ich weiß, ein wenig off topic für uprog2 - trotzdem evtl. für den einen 
oder anderen hilfreich.. und für uprog2 hoffentlich nicht störend.. 
sonst bitte verschieben.)

Ich bin auch auf der Suche nach Programmierwerkzeugen unter Linux. 
USBasp mit avrdude klappt einwandfrei.

Für meinen K150 Kitrus PIC Programmer aus CN für 7€ läuft die Win$ 
Software aber nicht unter Wine. Hier gibt es es ein Python Script was 
funktioniert:

https://eliasandrade.wordpress.com/2015/01/20/como...

Und hier wird ein Parallel EEprommer mit Arduino Mega2560 und Adapter 
vorgestellt (auch dafür wird unten in den Kommentaren ein Python Script 
vorgestellt):
http://danceswithferrets.org/geekblog/?p=496
Link zu Python Script:
http://kildall.apana.org.au/~cjb/Arduino/megaprogrammer.py

Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.