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)??
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.
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.
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.
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?!
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.
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?!
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
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?
> 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
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?!
> *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
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?!
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 :-)
> 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