Forum: Projekte & Code SPIUSB - AVR über GPIOs von FT232R programmieren


von Bernhard M. (bernhard84)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich möchte hier kurz mein Projekt vorstellen, bei dem man einen AVR über 
die GPIOs von einem FT232R programmieren kann.

Ausführliche Beschreibung:
AVR-Mikrocontroller werden häufig zusammen mit dem USB-UART-Konverter 
FT232R von FTDI eingesetzt. Bevor der Mikrocontroller allerdings seinen 
Dienst verrichten kann, muss er erst programmiert werden. Dies geschieht 
meistens mit einem zusätzlichen Programmiergerät. Ein Alternative dazu 
bietet ein Bootloader im Mikrocontroller mit dem das Programm über die 
serielle Schnittstelle und somit über USB in den AVR geladen kann. Dies 
hat den Vorteil, dass das keine zusätzliche Hardware erfordert und somit 
auch beim Endanwender geschehen kann. Allerdings muss auch dieser 
Bootloader erst einmal in den AVR gelangen.
An diesem Punkt setzt die hier vorgestellte Lösung an. 
AVR-Mikrocontroller können über ihre ISP-Schnittstelle mit einem 
SPI-ähnlichem Protokoll programmiert werden. Die Datenübertragung 
erfolgt seriell mit einer Taktrate, die von wenigen Hertz bis zum halben 
Controllertakt reichen kann. Eine solche serielle Schnittstelle kann mit 
einer speziellen Hardware erzeugt werden oder auch von einfachen 
IO-Pins.
Auch der FT232R besitzt solche meist ungenutzte Pins (CBUS0 - CBUS3). 
Diese Pins werden mit den ISP-Pins des Mikrocontrollers verbunden. Die 
erreichbare Geschwindigkeit ist allerdings sehr niedrig. Pro 
ISP-Taktzyklus müssen 3 USB-Zugriffe auf den FT232R ausgeführt werden, 
um die Signale zu erzeugen und das Bit einzulesen. Allerdings vergehen 
zwischen 2 Zugriffen aufgrund der Beschaffenheit von USB 1 bis mehrere 
ms. Um ein Byte aus dem Controller zu lesen oder in ihn zu schreiben, 
werden 32 Taktzyklen benötigt. Ein Byte dauert somit in etwa 0,3 sec. 
Dadurch ist das Programmieren von größeren Dateien unverhältnismäßig 
langsam.
Trotzdem bietet die Verwendung des FT232R zum Programmieren eines 
AVR-Mikrocontroller Vorteile. So muss der Controller vor dem Einbau 
nicht programmiert werden und es müssen keine zusätzlichen 
Steckverbinder verbaut werden.
Wenn diese Funktion zusammen mit einem Bootloader verwendet wird, ergibt 
sich ein weiterer Vorteil. So kann ein minimaler Bootloader mit dem FTDI 
programmiert werden. die Übertragung des eigentlichen Programms 
geschieht dann in hoher Geschwindigkeit über die serielle Schnittstelle. 
So kann ein unprogrammiertes Bauteil ausgeliefert werden, ohne dass der 
Endanwender lange Programmierzeiten ertragen muss.

Ein Blockschaltbild habe ich angehängt, genauso wie den Quellcode. Der 
ist bis jetzt nur unter Windows XP und mit mingw getestet, sollte aber 
auch mit anderen Betriebssystemen und Compilern funktionieren.

Im FT232R müssen die verwendeten IO-Pins (CBUS0 - CBUS3) in den IO-Mode 
programmiert werden.

Es würde mich freuen, wenn das jemand nachbaut und dann berichtet, wie 
es funktioniert hat.

Bernhard

von Bernhard M. (bernhard84)


Angehängte Dateien:

Lesenswert?

hier noch eine zip datei mit Quellcode, Projektdatei für programmers 
notepad, makefile, header files für den FT232 und eine fertig 
compilierte, ausführbare exe.

Dann noch zum Programm:
Es ist von Programmierinterface an avrdude angelehnt.
Bis jetzt unterstützt read, verify und write von flash und zwar nur mit 
Intel hex files.
außerdem das Programmieren der Fusebits.
mehr ist bis jetzt noch nicht drin, aber es reicht, dass man ein 
Programm oder einen Bootloader in einen nagelneuen AVR bringt und die 
Fusebits entsprechend gesetzt werden können.
Wenn noch mehr benötigt wird, kann ich das evtl. noch anpassen.

Es kann auch sein, dass nicht alle Fehler 100 %ig abgefangen werden, 
aber der AVR kann zumindest nicht so leicht kaputt gehen.

Bernhard

von didadu (Gast)


Lesenswert?

Interessantes Konzept!

von Einhart P. (einhart)


Lesenswert?

Danke Bernhard!

Das ist eine super Idee! Hätt' ich das doch schon vor einem halben jahr 
gehabt... Bei der nächsten Layoutänderung kommt das bestimmt mit 'rein.

Gruß
Einhart

von CDU-Hasser (Gast)


Lesenswert?

Hey Bernhard,

es funktioniert nicht mit einem attiny2313 :(!

error init programming (0x00)

Die Idee ist perfekt, aber es funktioniert nicht :'(

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.