MEGA128-USB Programmer

Dirk

Administrator
Teammitglied
28. Jan. 2007
4.328
166
63
Mittelhessen, Giessen
Sprachen
  1. ANSI C
  2. C++
  3. C#
  4. Java
  5. Kotlin
  6. Pascal
  7. Assembler
  8. PHP
EDIT 18.02.2013: Achtung, die Software wird zukünftig nicht mehr unterstützt! Ich schreibe einen neuen Bootloader. Die Programmierung von Flash und Eeprom erfolgt dann über die Windows-Bediensoftware des Nano Developmentboards.

EDIT 20.04.2013: Weitere Informationen zur Programmierung des Mikrocontrollermoduls findet ihr im Thema Neue Version Nano Development Manager.

MEGA128-USB-01.jpg



MEGA128-USB-02.jpg



kap01.jpg

Mega128-USB Programmer ist ein Entwicklungstool und Programmiersystem für das Mikrocontrollermodul MEGA128-USB. Das Flash-Memory des Mikrocontrollers ATmega128-16MU wird über die USB-Schnittstelle programmiert. Das Mikrocontrollermodul wird mit vorinstalliertem Bootloader ausgeliefert, so daß kein zusätzlicher Programmierer erforderlich ist.

screenshot.jpg



kap02.jpg


Der Bootloader benötigt lediglich eine Flash-Memory-Größe von 2 kByte (8 pages). Für Informationen wie Anzahl der Flashzyklen, Zeit und Datum der letzten Programmierung und den Validierungsstatus, werden zusätzlich 128 Byte (1 page) benötigt.

Für das Applikationsprogramm steht eine Flash-Memory-Größe von 128.768 Byte zur Verfügung (0x0000 bis 0x1F6FF).

Aktivierung des Bootloader:

A. Aktivierung des Bootloader durch das Applikationsprogramm

Idealerweise erfolgt die Aktivierung des Bootloader durch das Applikationsprogramm. USART1 des ATmega128 muss wie folgt initialisiert werden:

  • 8 Bit
  • kein Parity
  • 1 Stopp Bit
  • Datenrate 250kBit/s
Empfängt das Applikationsprogramm das Kommando StartBootloader ('b'), muss das Applikationsprogramm durch einen Sprung zu einer definierten Adresse den Bootloader starten (siehe hierzu die Programmbeispiele im Downloadverzeichnis). Das PC-Programm kann nun mit dem Bootloader kommunizieren und zum Beispiel ein neues Applikationsprogramm im Flash-Memory ablegen.


B. Aktivierung des Bootloader durch einen Inputpin

Nun kann es passieren, dass man entweder in dem Sourcecode seines Applikationsprogramms einen Fehler hat, so dass eventuell nicht auf das Kommando StartBootloader des PC-Programms reagiert werden kann oder dass man in seinem Programm USART1 überhaupt nicht initialisiert hat. In beiden Fällen würde der Bootloader nicht mehr starten, so dass eine Programmierung über USB nicht mehr möglich ist.

Abhilfe ermöglicht ein Inputpin des Mikrocontrollers (EnforceBootloaderPin = EB-Pin). Wird dieser Pin bei Reset auf den Pegel logisch low gelegt, startet der Bootloader, dieser startet jedoch nicht mehr das Applikationsprogramm, so dass sich das Mikrocontrollermodul wieder über USB programmieren läßt.

Der EB-Pin der Bootloader-Version 1.30.0 ist der Pin PG4 des ATmega128. Der Pin PG4 dient auch als Oszillator-Pin (TOSC1). Wird hier der Oszillator genutzt oder wird der Pin für andere Zwecke benötigt, kann ein anderer Bootloader verwendet werden, bei dem der EB-Pin einem anderen IO-Pin des Mikrocontrollers zugewiesen ist.


kap03.jpg


Nachdem ein Programmfile (Intel Hex) im PC-Programm geladen und der Button Program Flash File betätigt wurde, wird der Programmiervorgang gestartet. Folgende Schritte werden durchgeführt:
  • Flash Erase (führt ausschließlich der Bootloader durch)
  • Program Flash
  • Verify Flash
  • Write Info Page (bei erfolgreichem Verify)
  • Start Applikation (bei erfolgreichem Verify)
Es wird der gesamte Programmspeicher verifiziert, auch wenn das eigentliche Applikationsprogramm nur einen Bruchteil des Programmspeichers belegt. Bei erfolgreichem Verify erfolgt ein Statuseintrag in der Info Page, so dass der Bootloader den Verifizierungsstatus auswerten kann und bei fehlerfrei programmiertem Applikationsprogramm dieses nach einem Reset startet. Bei nicht vorhandenem oder nicht fehlerfrei programmiertem Applikationsprogramm, startet der Bootloader das Applikationsprogramm nicht, sondern bleibt selbst aktiv, so dass eine neue Programmierung sofort erolgen kann.


kap04.jpg


Das Entwicklungstool Mega128-USB Programmer läuft auf den Betriebssystemen Windows 2000/XP/Server2003/Vista. Damit Windows das Mikrocontrollermodul richtig erkennt, muss zuerst der USB-Treiber vorinstalliert werden. Ist der Treiber einmal vorinstalliert, installiert Windows den Treiber nach dem erstmaligen Anschließen des Mikrocontrollermoduls an USB vollständig. Das Installationsprogramm des USB-Treibers ist im Download-Verzeichnis enthalten.

Mega128-USB Programmer erkennt automatisch ein angeschlossenes Mikrocontrollermodul. Wird ein Mikrocontrollermodul an USB angeschlossen und befindet sich ein Applikationsprogramm im Flash-Memory, wird die Anzahl der Flashzyklen des Moduls, sowie Zeit und Datum der letzten Programmierung ausgelesen und angezeigt.


kap05.jpg


Das Mikrocontrollermodul wird mit einem installiertem Bootloader ausgeliefert, so dass eine Programmierung des Bootloader nicht mehr notwendig ist.

Es kann aber vorkommen, dass man eine andere Position des EB-Pins benötigt (siehe Punkt 2 B) und somit einen anderen Bootloader installieren möchte. Sicherlich wird auch das PC-Programm und der Bootloader weiterentwickelt und mit neuen Features ausgestattet, so daß eine Programmierung hier ggf. sinnvoll ist.

Möchte man den Bootloader programmieren, sind folgende Fuse-Einstellungen wichtig:

Fuse.jpg



kap06.jpg


Habt ihr Fragen, Kritik oder Anregungen, dann könnt ihr in diesem Unterforum eure Beiträge schreiben.



kap07.jpg


Mega128-USB Programmer

Revision 1.0 [16.08.2008]
- Erstversion

Revision 1.2 [31.08.2010]
- Überarbeitung von Routinen, welche auf die neue Silabs SiUSBXp.dll [3.2.2.0] zugreifen

Bootloader

Revision 1.30.0 [16.08.2008]
- Erstversion



kap08.jpg


Wenn ihr das Programmpaket downloaden möchtet, müsst ihr registrierter Benutzer sein. Wenn ihr euch in unserem Forum registrieren möchtet, könnt ihr diesem link folgen.

Aktuelle Version: 1.2 [31.08.2010]
(Überarbeitung von Routinen, welche auf die neue Silabs SiUSBXp.dll [3.2.2.0] zugreifen)

EDIT 18.02.2013: Achtung, die Software wird zukünftig nicht mehr unterstützt! Ich schreibe einen neuen Bootloader. Die Programmierung von Flash und Eeprom erfolgt dann über die Windows-Bediensoftware des Nano Developmentboards.
 

Anhänge

  • MEGA128-USB Programmer 12.zip
    876,2 KB · Aufrufe: 361
  • Bootloader_1300.zip
    1,8 KB · Aufrufe: 72
Protokoll des Avr-Programmer

Hallo!
Wir vom VSBS-Lehrstuhl der TU-Cottbus wollten gerne unser Betriebssystem "Reflex" auf den Atmega128 portieren. Reflex ist in Standard-C++ geschrieben und es wird der g++ verwendet.
Es ergaben sich bei der laufenden Portierung einige Fragen.


1. Benutzt der BootLoader ein standardisiertes Protokoll bei der Kommunikation mit dem PC, z.B. stk500v1. Dann wäre es möglich das Entwicklerboard auch mittels avrdude und linux zu programmieren. (Zugriff zum Quellcode kann an dieser Stelle auch helfen)

2. Beim Programmieren erscheint eine Fehlermeldung, welche aussagt, dass der Flash-Speicher zu klein ist. "Address space above $01F700 is used for the bootloader". Es ist uns nicht klar warum diese Meldung erscheint. Scheinbar ist das .data - Segment an dieser Stelle problematisch. Dieses wird an die Adresse (0x800000) gelinkt.

Derzeit haben wir ein nicht deterministisches Verhalten und möchten gerne sicher sein, dass der Programmer richtig läuft. Leider sind wir auf den Bootloader angewiesen, da noch kein ISP vorhanden ist.
 
Hallo Soeren,

1. Benutzt der BootLoader ein standardisiertes Protokoll bei der Kommunikation mit dem PC, z.B. stk500v1. Dann wäre es möglich das Entwicklerboard auch mittels avrdude und linux zu programmieren.

der Bootloader nutzt ein eigenes Protokoll. An ein standardisiertes Protokoll hatte ich zwar auch schon mal gedacht, nur fehlt mir im Moment die Zeit, dies zu realisieren. Um via COM programmieren zu können, müßte man die PID des CP2102 umstellen, um den VCP-Treiber nutzen zu können.

2. Beim Programmieren erscheint eine Fehlermeldung, welche aussagt, dass der Flash-Speicher zu klein ist. "Address space above $01F700 is used for the bootloader". Es ist uns nicht klar warum diese Meldung erscheint. Scheinbar ist das .data - Segment an dieser Stelle problematisch. Dieses wird an die Adresse (0x800000) gelinkt.

Der 2kByte große Bootloader befinded sich ab Byte-Adresse 1F800h (129.024d) im Flash-Speicher. Vor dem Bootloader werden noch 256Byte für den Info-Block benötigt (256 Byte entsprechen einer Flash-Page des ATmega128). Die Startadresse des Info-Blocks ist 1F700h. Es darf also nichts ab Byteadresse 1F700h im Flash-Speicher abgelegt werden, was anscheinend bei euch der Fall ist, da die Programmiersoftware dieses meldet.

Grüße,
Dirk
 
Bootlader

Hallo Dirk,

ich habe mir auch ein solches Modul angeschafft und habe nun eine für mich wichtige Frage.- Kann ich das Modul einfach über USB anschliessen, ohne befürchten zu müssen, dass ich durch einen Fehler (Löschen) den Bootlader auch lösche, worauf muss ich achten??. (ist mir leider schon mal passiert)...
-- Ohne Bootlader ist keine Kommunikation über RS232 oder USB mehr möglich ..

-Sollte es mir trotzdem Passieren, dass ich den Bootlader zerstöre, ist es dann möglich den "neu zu laden" oder hat mann dann Pech gehabt und muss .......(neu kaufen)

Wolfgang
 
Hallo Umsteiger,
Kann ich das Modul einfach über USB anschliessen, ohne befürchten zu müssen, dass ich durch einen Fehler (Löschen) den Bootlader auch lösche, worauf muss ich achten??. (ist mir leider schon mal passiert)..
Sollte es mir trotzdem Passieren, dass ich den Bootlader zerstöre, ist es dann möglich den "neu zu laden" oder hat mann dann Pech gehabt und muss .......(neu kaufen)...

wenn du die Programmiersoftware verwendest, kannst du den Bootloader nicht löschen, da der Bootloader selbst den Flash-Speicher für deine Applikation löscht, nicht aber seinen eigenen Speicherbereich.

Wie in dem Forumbereich bereits beschrieben, musst du zuvor den USBxpress-Treiber von Silabs installieren, dann kannst du das Mikrocontrollermodul an USB anschließen und die Programmersoftware erkennt das Modul und den Bootloader.

Falls ein Applikationsprogramm im Flash ist, wird dieses gestartet. Damit die Programmiersoftware den Bootloader wieder starten kann, muss in deiner Applikationssoftware der Usart initialisiert sein und du musst entsprechend auf das Kommando von der Programmiersoftware reagieren. In diesem Forumbereich sind hierzu Beispielprogramme.

Falls du dich mal "abhängst", also nicht mehr in den Bootloader kommst, kannst du beim RESET einen Pin auf low halten (ebenfalls hier schon mal beschrieben), dann wird der Bootloader gestartet, dieser startet dann nicht die Applikation falls vorhanden. So kannst du das Modul immer wieder über den Bootloader programmieren.

Möchtest du den Bootloader nicht nutzen, also direkt deine Applikation via ISP programmieren oder eine neue Bootloader-Version programmieren, kannst du das mit einem ISP-Programmer (z.B AVRISPmkII) über die 6polige Stiftleiste machen. Fusebiteinstellung BOOTRST beachten.

Im Forumbereich ist noch ein Tool, mit dem du die USB-UART-Bridge auf VirtuellenComPort (VCP) umschalten kannst, dann ist es allerdings nicht mehr möglich, über den Bootloader zu programmieren.

Grüße,
Dirk
 
Hi,

Oje. Wenn ich die Beiträge zum Stress mit USB- Anschlüssen/AVR's so lese, bleib ich doch lieber beim LPT- Programmer. und der guten, alten RS232. Veraltete "Technik"? Vielleicht. Geht jedoch immer fehlerfrei, selbst bei einer 80cm- Leitung zum Atmel- Board. Und kann angesteckt bleiben.
Da nehm ich die kurze Wartezeit doch gern in kauf. Und sollte ich irgendwann mal ein 16k- Programm brennen - fahr ich solange halt ein paar Runden mit dem Mustang...:D


Grüsse,

Michael

P.S.:
NEIN!!!. Nicht der oben links - in 1/43 natürlich! Ha - den Shelby hätt' ich schon gern...
 
Hallo Grandpa,
Oje. Wenn ich die Beiträge zum Stress mit USB- Anschlüssen/AVR's so lese, bleib ich doch lieber beim LPT- Programmer. und der guten, alten RS232.

du meinst das sicherlich allgemein ich kann die Stelle mit den entsprechenden Beiträgen nämlich nicht finden.

Bei der verwendeten USB-UART-Bridge ist das eigentlich ziemlich problemlos! Einfach den USB-Treiber installieren, fertig. Ein Programmer wird nicht mehr benötigt und es werden zum Programmieren lediglich zwei IO-Pins des Mikrocontrollers belegt.

Übrigens, die Programmierung über USB/Bootloader ist lediglich ein Feature, man kann natürlich auch über ISP oder JTAG programmieren und dafür alle möglichen Programmer verwenden, auch einen LPT-Programmer.
Ich habe ein kleines Tool geschrieben, mit dem ist es möglich das USB-Interface ganz schnell auf VCP (virtueller COM Port) umzuschalten, und schon hat man einen COM-Port. So ist es möglich, sich zum Beispiel Debuginformationen in einem Terminalprogramm auszugeben. Bei dem XMega-Modul macht das bereits schon die Programmersoftware, es handelt sich inzwischen also nicht mehr nur um einen Programmer. Das nächste Feature wird ein 8 Kanal Temperaturlogger für Dallas Temperatursensoren sein, der die Daten in einem T(t) Diagram grafisch darstellt, die man dann auch zum Beispiel mit Excel weiterverarbeiten kann.

Dirk
 
Hallo Dirk,

alle Informationen habe ich mir schon von Eurer HP heruntergeladen. nur eines ist sofort wichtig, das ich nicht durch Versehen den "Bootlader" lösche..
- Mit dieser Materie muss ich mich noch auseinandersetzten, habe vorerst verstanden, ohne einen "Bootlader ist es nicht möglich, über die Serielle Schnittstelle (USB) die AVR´s (seriell) zu programmieren...
-- Mit der Materie der "Fuses, u. Lookbits" der AVR´s habe ich mich auch grad eben auseinandergesetzt......

--Das sind eben die Probleme eines Umsteigers...

Wolfgang
 
Hallo Dirk,

du meinst das sicherlich allgemein

natürlich.
Bislang funktioniert mein Selbstbausystem einwandfrei und ich habe kenen Bedarf einer Änderung. Wer's braucht, soll es natürlich verwenden.
Ich bin jedoch sicher, über einen Mega16/32 niemals hinauszukommen, in diesem Leben...:rolleyes: Schliess soll die Rennbahnsteuerung irgandwann mal fertig sein. Einzig die Online- Verfolgung eines Rennens auf meiner Site als Abschluss wäre interressant zu realisieren...mal sehen.


Grüsse,

Michael
 
Hallo Dirk,

wenn Du sagst das der Bootloader auch angesprungen wird wenn man den PG4 während eines Resets auf Masse hält stellt sich mir folgende Frage: Stellt der Bootloader selbst die Schnittstellenparameter so ein das alles funktioniert? Ich möchte für meine Applikation nämlich eine höhere Baudrate verwenden.
 
Hallo Flocke,

der Bootloader konfiguriert die Schnittstelle selber. Bootloader und Updatesoftware kommunizieren mit 250kbit/s (8N1), das ist eigentlich schon ziemlich schnell. Welche Baudrate möchtest du denn nutzen und möchtest du über USBxpress-Treiber Daten senden, wenn ja, hast du eine eigene PC-Software geschrieben, die die Daten empfängt/sendet?

Gruß,
Dirk
 
Hallo Dirk,
ich nutze den VCP unter LabView und muß leider bei jedem Programmierversuch die Umstellung von VCP auf USBxpress und und wieder zurück zu VCP gehen. Aber es funktioniert ja trotzdem ganz gut dank eurer Tools.
 
Hallo Flocke,

wenn du öfters programmieren mußt, ist das aber schon umständlich. Such doch mal im Internet nach einer Bootloaderlösung mit COM-Schnittstelle, das müsste es doch eigentlich etwas geben, gerade für den ATmega128, dann könntest du das Device immer auf VCP lassen.

Dirk
 
Hallo Dirk,
wenn ich wüsste wie das Protokoll (Handshake Befehlsformat Wartezeiten) aussieht würde ich mir das Programm schnell selbst schreiben.
 
Hallo Flocke,

ich kann ja mal nachsehen, wie das Protokoll ist, habe die Software allerdings im Moment nicht hier auf meinem Rechner. Ich weiß auch nicht, ob 250kBit/s mit VCP möglich sind (ich vermute aber schon, muss nochmal im Datenblatt nachsehen) und ob du mit dieser Bitrate zurechtkommst.

Dirk
 
Hallo Dirk,
ich habe gestern kurze Versuche mit 500kBaud über den VCP ohne Probleme laufen lassen. 1000kBaud waren dann aber fehlerbehaftet.
 
Hallo Flocke,

ich könnte folgendes machen
  • ich schaue mal nach und schreibe das Protokoll vom aktuellen Bootloader zusammen (der Bootloader hat allerdings noch einige Features, Programmier-Datum, -Zyklen ... ist also etwas aufwändiger) oder
  • ich ändere den Bootloader gleich auf 500kbps und vereinfachere ihn etwas.
Was hältst du davon? Falls du eine Programmiersoftware hinbekommst, würdest du sie auch in das Forum stellen, wäre sicherlich sehr hilfreich für andere Anwender, die ausschließlich VCP nutzen? Ich habe zwar auch schon daran gedacht, über VCP zu programmieren (ist in meiner Software bereits vorgesehen), allerdings wegen Zeitmangel habe ich es noch nicht "eingebaut".

Gruß,
Dirk
 
Hallo Dirk,
ich glaube wenn Du den Bootloader so belässt wie er momentan ist ist die Kompatibilität eher gewährleistet. Oder sind es so wenige Benutzer? Das Tool kann ich euch dann gerne zur Verfügung stellen.
 
Neue Programmversion

MEGA128-USB Programmer

Aktuelle Version: 1.2 [31.08.2010]

Ich habe Teile der Routinen, welche auf die neue Silabs
SiUSBXp.dll [3.2.2.0] zugreifen überarbeitet.

Die neue Programmversion und die aktuelle Silabs DLL befindet sich im Anhang des ersten Beitrages dieses Threads.



Bitte die aktuellen Silabs-Treiber verwenden, diese könnt ihr hier downloaden:

USBXpress:
Download for Windows 2000/XP/Server2003/Vista/Win7 (v3.2.2)

CP210x USB to UART Bridge VCP Drivers:
Download for Windows XP/Server 2003/Vista/7 (v6.1)

Produktseite:
CP210x USB to UART Bridge



Das Mikrocontrollermodul könnt ihr wie gewohnt mit unserem Tool Change MC-Module PID zwischen VCP und USBxpress umschalten. Download im Anhang des ersten Beitrages des Threads Tool: USB-PID der Mikrocontrollermodule ändern


Dirk
 
hy

Funktioniert der USB Programmer auch unter Windows 7 ???

was wahren gleich nochmal die Pins vom Atxmega zum Uart für RX = ?
TX = ?

könnt ihr auch die Quell Dateien vom Bootloader hochladen oder gibts nur den hex_file


Grüße
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)