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
0 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.

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.