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?!
Vergiss es einfach. Allein das Prinzip des USB Ports verhindert, dass ein Bit Banging einen großen Durchsatz erzielen könnte.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.