Forum: Mikrocontroller und Digitale Elektronik AVR-Programmierung via USB mit FT2232


von ben91 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebes Forum!

Für meine Techniker-Arbeit entwickle ich eine kleine µC-Steuerung für 
einen Radio. Soweit, so gut.
Nun möchte ich den Mikrocontroller(ATmega16) via USB über Pony-Prog 
programmieren. Da ich mit Pony-Prog bisher jedoch nur via 
RS232-Schnittstelle programmiert habe, möchte ich dazu nun einen 
Wandler-IC verwenden. Dabei habe ich mir überlegt, den USB-zu-seriell IC 
FT2232 als RS232-Schnittstellen Interface für USB zu verwenden.
Wenn ich das Datenblatt richtig interpretiert habe,
brauche ich dazu lediglich einen externen 6MHz Qartz (mit entsprechenden 
Kondensatoren, zum Schwingen), eine USB-Buchse, zwei 27Ohm Widerstände, 
einen Pull-Up-Widerstand und natürlich eine entsprechende 
Spannungsversorgung mit EMV-gerechter Entstörung.
Da ich noch nie mit einer USB-Schnittstelle gearbeitet habe,
bin ich mir nicht sicher, ob ich mit meiner Theorie richtig liege?!
Oder benötige ich dazu noch einen externen EEPROM (das bin ich mir trotz 
Datenblatt nicht nicht ganz sicher)??

von Christian R. (supachris)


Lesenswert?

Vergiss es. Der Einfachst-Programmer an der RS232 funktioniert nur mit 
echten RS232-Ports. Mit USB-Serial Wandlern kann es klappen, aber wenn 
überhaupt dann so langsam, dass man etwa 45 min für einen 
Flash-Durchgang benötigt. Das wurde hier jede Woche mindestens 2 mal 
durchgekaut. Kauf dir lieber gleich einen AVR ISP MK II, wenn du 
unbedingt über USB programmieren willst.

von ben91 (Gast)


Lesenswert?

Hallo Christian, erst mal danke für deine Antwort.
Da ich die µC-Steuerung mit einer on-Board USB-programmier-Schnittstelle 
realisieren möchte, kommt für mich nur eine selbstbau USB-Lösung in 
Frage.
Da ich bereits einen fertigen USB-RS232-Wandler (teils erfolglos) für 
die Programmierung von µC benutzt habe, weis ich wie langsam und 
unzuverlässig derartige Lösungen sein können. Diese gekauften Wandler 
enthalten jedoch ebenfalls einen µC (mit MAX232) für die Datenwandlung 
von USB zu RS232.
Somit enthalten diese Applikationen lediglich eine Software-USB-Lösung, 
wodurch sie sehr langsam programmieren. Da ich dies vermeiden möchte,
habe ich mich für einen FT2232 entschieden,
welcher eine "echte" USB-Schnittstelle zur Verfügung stellt.

von Christian R. (supachris)


Lesenswert?

Hä? Der FT2232 stellt zwar 2 Serial-Ports zur Verfügung, aber die sind 
trotzdem virtuell. Ohne "Intelligenz" im Programmer (siehe AVR AN910) 
klappt das Programmieren trotzdem nicht. Diese USB Programmer mit der 
Software-USB sind da sogar noch schneller als jeder USB-Serial Wandler, 
weil sie z.B. das STK500 Protokoll beherrschen. Das Problem ist die 
Übertragungart. Beim einfachen Serial-Programmer ohne extre µC wird für 
jedes Bit ein IO-Befehl gemacht, beim STK500 Protokoll oder dem AVRISP 
MK II werden gleich ganze Blöcke von mehreren Bytes runter geschickt. 
Da USB blockbasiert ist, ist das so elend langsam bei dem Bit-Gewackel. 
Wenn du mit den 45 min. leben kannst, nimm den FT2232, wenn es schneller 
gehen muss, müsstest du einen Bootloader implementieren oder aber noch 
einen Atmel als Protokoll-Umsetzer zwischen den FT2232 und deinen 
Ziel-Prozessor. Das "echte" USB des FT2232 bringt dir an der Stelle 
genau überhaupt gar nix.

von ben91 (Gast)


Lesenswert?

OK ... angenommen ich schließe einen externen EEPROM an den FT2232 an,
werden dann die Daten blockweise abgearbeitet?
Oder ist ein AVR USB-Bootloader (www.fischl.de/avrusbboot) die bessere
Alternative?!

von Simon K. (simon) Benutzerseite


Lesenswert?

Vergiss es einfach. Allein das Prinzip des USB Ports verhindert, dass 
ein Bit Banging einen großen Durchsatz erzielen könnte.

von Christian R. (supachris)


Lesenswert?

ben91 schrieb:
> OK ... angenommen ich schließe einen externen EEPROM an den FT2232 an,
> werden dann die Daten blockweise abgearbeitet?

Nein, das hat mit dem EEPROM überhaupt nix zu tun.

> Oder ist ein AVR USB-Bootloader (www.fischl.de/avrusbboot) die bessere
> Alternative?!

Ja. Aber der Bootloader muss erst mal per ISP irgendwie drauf.

von ben91 (Gast)


Lesenswert?

Ja, natürlich möchte ich den Bootloader am Anfang mithilfe des 
STK500-Programmierinterface via ISP auf den µC laden.
Um jedoch später auch ohne Programmiergerät den Controller programmieren 
zu können, möchte ich dies anschließend auf einer Platine lösen können.
Wäre der Bootloader von fischl.de dann die optimalste Lösung zum Ziel?!

von Gerd E. (robberknight)


Lesenswert?

Hallo,

ich programmiere meine AVRs direkt über nen FT232R (geht natürlich auch 
mit dem FT2232). Dabei verwende ich den Bitbang-Modus und für die 
serielle Kommunikation nicht nötige Pins (z.B. DCD, RI,...). Das RXD, 
TXD, RTS und CTS brauche ich zum Programmieren nicht, damit kann ich den 
selben Port ohne Probleme für serielle Kommunikation verwenden.

Ich brauche auch keinen Bootloader - solange ich also nicht die Fuses 
verzocke, kann ich den AVR immer wieder programmieren ohne ihn irgendwo 
externes anschließen zu müssen.

Ein Patch für avrdude gibts hier, ist allerdings schon etwas älter:

http://www.mail-archive.com/avrdude-dev@nongnu.org/msg00861.html

Ich bin momentan dabei den Patch zu aktualisieren. Allerdings gibt es 
noch Probleme mit der Baudrate vom Bitbang-Modus, da scheint das 
Datenblatt von FTDI nicht zu stimmen. Wenn das geklärt ist, versuche ich 
das in den offiziellen avrdude einfließen zu lassen.

Die Ansteuerung des Bitbang-Modus läuft über die libftdi, die gibts 
hier:
http://www.intra2net.com/en/developer/libftdi/index.php

ist LGPL und kompiliert unter Windows und Linux.

Gruß,

Gerd

von Simon K. (simon) Benutzerseite


Lesenswert?

Gerd E. schrieb:
> Ich bin momentan dabei den Patch zu aktualisieren. Allerdings gibt es
> noch Probleme mit der Baudrate vom Bitbang-Modus, da scheint das
> Datenblatt von FTDI nicht zu stimmen. Wenn das geklärt ist, versuche ich
> das in den offiziellen avrdude einfließen zu lassen.

Was hat Baudrate mit Bit Bang zu tun?

von Gerd E. (robberknight)


Lesenswert?

> Was hat Baudrate mit Bit Bang zu tun?

Wenn Du nicht ne Stunde warten willst bis Dein AVR Programmiert ist, 
schickst Du die benötigten Bits für die ISP-Befehle am Stück zum FTDI 
und der sendet die dann mit der eingestellten Baudrate raus. 
Gleichzeitig (Sync Bitbang) liest er die vom Atmel kommenden Daten rein, 
die werden vom avrdude ja auch gebraucht.

Wenn Du immer nur einen Satz Bits auf einmal setzt, bist Du durch die 
Latenz vom USB massiv in der Geschwindigkeit eingeschränkt.

FTDI schreibt im Datenblatt, daß bei Bitbang die Baudrate 16 mal so hoch 
ist wie eingestellt. Soweit ok. Nur scheint der Chip wohl 4 Baudticks zu 
brauchen um einen Datensatz rauszuschreiben. Das ist aber nirgendwo 
beschrieben und der FTDI-Support hat mir bisher auch noch keine 
brauchbare Erklärung dafür geliefert.

Gruß,

Gerd

von ben91 (Gast)


Lesenswert?

Hallo Gerd!
Erstmal danke für deine Antwort!
Da ich, wie bereits erwähnt, noch nie eine USB-Schnitttelle
realisiert habe, ergeben sich für mich noch folgende Unklarheiten:

     *1. Was ist der Unterschied zwischen dem FT2232 und dem FT232R
        (etwa nur die Anzahl, der verfügbaren RS232-Schnittstellen?!)

     *2.  Was ist mit dem "Patch für AVR-Dude" gemeint?
          Muss ich also auf dem µC erst einmal ein Programm 
programmieren,
          um den FTDI-Chip als Programmierschnittstelle nutzen zu 
können?!

von Gerd E. (robberknight)


Lesenswert?

>      *1. Was ist der Unterschied zwischen dem FT2232 und dem FT232R
>         (etwa nur die Anzahl, der verfügbaren RS232-Schnittstellen?!)

wenn Du's genau wissen willst, mußt Du schon sagen, welchen FT2232 Du 
meinst! Also der FT2232D z.B. hat 2 Schnittstellen statt einer wie der 
FT232R, außerdem hat er noch MPSSE (damit kann man z.B. I2C, SPI und 
JTAG machen) und noch nen paar andere Kleinigkeiten.

Der FT232R hat dagegen den Vorteil, daß er so gut wir gar keine externe 
Beschaltung wie z.B. Quarz, EEPROM etc. braucht. Also im Grunde nur der 
Chip, 2-3 Kondensatoren und gut ist.

>      *2.  Was ist mit dem "Patch für AVR-Dude" gemeint?
>           Muss ich also auf dem µC erst einmal ein Programm
> programmieren,
>           um den FTDI-Chip als Programmierschnittstelle nutzen zu
> können?!

Es ist gerade der Vorteil dieser Lösung, daß Du auf dem Atmel vorher 
kein Programm brauchst. Viele andere Lösungen brauchen einen sog. 
Bootloader den man vorher erst irgendwie in den Atmel reinkriegen muß.

avrdude ist ein Programm um AVRs zu programmieren. Es kann das oben 
beschriebene von Haus aus nicht, dazu braucht es eine Erweiterung: das 
ist der Patch. Und momentan brauchts auch noch etwas Erfahrung im Umgang 
mit Patches, Compiler, Abhängigkeiten etc.

Gruß,

Gerd

von ben91 (Gast)


Lesenswert?

Um deine Informationen mit meinen Theorien zusammenfassen zu können:

Ich benötige zum Programmieren des Mikrocontrollers (ATmega16)
lediglich den FT232R, welchen ich mit der ISP-Schnittstelle des 
Controllers verbinde und natürlich diverse externe Komponenten für den 
Betrieb des FTDI-Chips. Soweit ich das aus Recherchen ermitteln konnte,
kann ich den Chip somit am PC, wie einen normalen USB-RS232-Converter 
installieren und mithilfe von PonyProg den µC programmieren?!
Kann das so funktionieren?!

von Gast (Gast) (Gast)


Lesenswert?

Also, um jetzt mal ein bisschen Ordnung reinzubringen:

Du willst nen AVR der in deinem Gerät eingebaut ist später ohne 
Programmieradapter über USB programmieren können. Die seit Jahren 
bewährte Lösung ist dafür einen UART-Bootloader zu verwenden. Wenn der 
dann USB statt RS232 können soll tüddelst einen FT232RL an den UART und 
schiebst das Programm mit avrdude (ohne Patch etc.) rüber. Fertig.
Wie sowas geht kannst du dir am einfachsten bei http://www.arduino.cc/ 
abschauen. Atmel mit STK500-kompatiblem Bootloader, FT232, avrdude.

Du kannst natürlich auch für das einmalige erste Programmieren einen 
USB-Programmieradapter auf die Platine packen und avrdude patchen. Warum 
einfach wenns auch kompliziert geht :-)

von Gerd E. (robberknight)


Lesenswert?

> Ich benötige zum Programmieren des Mikrocontrollers (ATmega16)
> lediglich den FT232R, welchen ich mit der ISP-Schnittstelle des
> Controllers verbinde und natürlich diverse externe Komponenten für den
> Betrieb des FTDI-Chips.

korrekt.

> Soweit ich das aus Recherchen ermitteln konnte,
> kann ich den Chip somit am PC, wie einen normalen USB-RS232-Converter
> installieren

korrekt

> und mithilfe von PonyProg den µC programmieren?!

falsch. Statt PonyProg mußt Du avrdude mit dem Patch verwenden.

Gruß,

Gerd

von Christian R. (supachris)


Lesenswert?

Jetzt mal was ganz ketzerisches. Nimm doch einen MSP430, die haben 
alle schon einen UART Bootloader eingebaut. Das macht vieles 
einfacher. :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.