Forum: Mikrocontroller und Digitale Elektronik Arduino Verbindung USB serielle SS und Programmierung


von fragso (Gast)


Lesenswert?

Hi,

ich habe eine Frage zu der Verbindung zwischen USB und Atmega in einem 
Arduino.
Wenn man den Arduino per USB verbindet kann man ihn programmieren oder 
auch mit der seriellen Schnittstelle kommunizieren.
Wie ist das denn genau?
Wenn man auf "hochladen" klickt wird das Programm über den 
USB-controller an die ISP SS. des Atmegas geschickt ?
Wenn man auf den seriellen Monitor klick, wird dann nur über USB mit RxD 
und TxD kommuniziert.
Schaltet die USB SS. da immer um oder was ?!

Danke :D

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

fragso schrieb:
> Wenn man auf "hochladen" klickt wird das Programm über den
> USB-controller an die ISP SS. des Atmegas geschickt ?

Es wird erst der Controller resettet über einen der zusätzlichen Pins. 
Es startet dann der Arduino-Bootloader, welcher ein paar Sekunden darauf 
wartet, dass der PC ein neues Programm über die serielle Schnittstelle 
schickt. Wenn das nicht passiert, startet das bereits vorhandene 
Programm, welches dann die Schnittstelle zur Kommunikation nutzen kann 
(Serial.print & Co).

Das Programmieren geht dabei nicht über ISP, sondern komplett über die 
serielle Schnittstelle.

fragso schrieb:
> Schaltet die USB SS. da immer um oder was ?!

Die USB- und Serielle-Schnittstelle bekommt da im Prinzip nichts mit; es 
gehen nur mal eigene Daten, mal ein neues Programm drüber.

von fragso (Gast)


Lesenswert?

Danke.
Also der Bootloader merkt dann, dass es sich um Programmierdaten 
handelt.
Warum wird den ISP nicht verwendet ?
Ist die USB SS einfach nur mit RxD und TxD verbunden ?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

fragso schrieb:
> Also der Bootloader merkt dann, dass es sich um Programmierdaten
> handelt.

Daten, die direkt nach einem Reset kommen, müssen "Programmierdaten" 
sein; da darf man nicht mit einem eigenen Programm auf den COM-Port 
zwischenfunken, wobei der Bootloader vermutlich ungültige Daten 
ignoriert.

fragso schrieb:
> Warum wird den ISP nicht verwendet ?

Weil man dann einen zusätzlichen Programmieradapter zwischen ISP-Pins 
und USB bräuchte; die Konstruktion mit der seriellen Schnittstelle 
ermöglicht sowohl Programmieren als auch eigene Kommunikation über die 
selbe Schnittstelle.

fragso schrieb:
> Ist die USB SS einfach nur mit RxD und TxD verbunden ?
Nein, USB ist ein ganz eigenes Protokoll. Der FT232RL auf den Arduino 
Boards (auf neueren ein eigener µC, der sich dem aber ähnlich verhält) 
registriert sich per USB am PC und bildet einen Adapter auf die serielle 
Schnittstelle.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

fragso schrieb:
> Warum wird den ISP nicht verwendet ?

Denn. Mit zwei n.



> Ist die USB SS einfach nur mit RxD
> und TxD verbunden ?

Ja, mit einer zusätzlichen Handshakeleitung für den Reset.

(Sieh Dir den Schaltplan Deines Arduinos an)

Und mit einem USB-Seriell-Adapter kann die ISP-Schnittstelle nicht 
genutzt werden, der müsste dafür ein komplett anderes Protokoll 
unterstützen, was auch die auf dem PC laufende Software unterstützen 
müsste.

von Joachim B. (jar)


Lesenswert?

fragso schrieb:
> Warum wird den ISP nicht verwendet ?

weil es pro OS üblicherweise Treiber braucht für einen ISP Prommer.

> Ist die USB SS einfach nur mit RxD und TxD verbunden ?
ja denn Seriell können (fast) alle Compis. (CBM PET2001 konnte es nicht, 
jedenfalls nicht ab Werk)

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Es gibt aber auch Arduino-Artige die das anders machen, z.B. das 
Olimexino-STM32 verbindet direkt die USB-Pins mit dem Mikrocontroller, 
welcher USB-fähig ist. Mit einem entsprechenden Bootloader kann er dann 
darüber vom PC programmiert werden, und eigene Anwendungen können den 
USB beliebig nutzen. Das ISP-Äquivalent (JTAG/SWD) kann optional mit 
einem externen Programmier/Debug-Adapter genutzt werden. Die serielle 
Schnittstelle wird hier gar nicht genutzt.

von fragso (Gast)


Lesenswert?

Danke sehr !


>die Konstruktion mit der seriellen Schnittstelle
>ermöglicht sowohl Programmieren als auch eigene Kommunikation über die
>selbe Schnittstelle.

Ich habe den Atmega zb immer über ISP programmiert und dachte es wäre 
einer von wenigen Möglichkeiten.

Hier sind ja noch mehr Informationen:
https://www.mikrocontroller.net/articles/AVR_In_System_Programmer

Also dort steht ja: *ISP,TPI,PDI,JTAG,Bootloader*
--
Bootloader
Einige wenige AVRs kommen bereits mit einem einprogrammierten 
Bootloader. Bei diesen kann man ein zum Bootloader passendes Programm 
nutzen um den AVR über eine im Bootloader definierte Schnittstelle zu 
programmieren. Auf Bootloadern basierende Systeme haben ansonsten ein 
Henne-Ei Problem. Irgendwie muss der Bootloader einmal konventionell in 
den AVR programmiert werden, zum Beispiel mit ISP.
--
Ok jetzt verstehe ich das schon etwas besser:
Der Hersteller definiert am Anfang eine Schnittstelle im Bootloader 
durch welche Programmcode auf den µC direkt nach dem Start 
einprogrammiert werden kann.
Wenn der Fall auftritt, dass keine Programmdaten nach einem Reset 
auftreten, wird auch nichts neues einprogrammiert und der µC geht in den 
normalen Betrieb.

Wenn man auf "Hochladen" klickt, wird der Arduino dann zuerst 
zurückgesetzt ?
Wie wird dieser Befehl "Reset" denn an den Arduino geschickt.
Oder wird einfach der Strom kurz unterbrochen ? xD

Danke :D

von Einer K. (Gast)


Lesenswert?

Niklas G. schrieb:
> Es gibt aber auch Arduino-Artige die das anders machen,

Genau!
Arduinos mit Atmega328P und 2560 nutzen verschiedenste Seriel zu USB 
Adapter/Chips.

Arduinos mit ATmega32U4 können USB direkt, und haben eine zusätzliche 
native Serielle

Der DUE kann beides, Seriell zu USB über einen Atmege16U2
Und USB direkt.

Das waren jetzt nur die wichtigsten....

Bei den China Nachbauten und sonstigen Fremdprodukten kommen 
verschiedenste  Seriel zu USB Adapter/Chips zum Einsatz. Gibt sicherlich 
1/2 Dutzend üblicher Varianten.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

fragso schrieb:
> Wenn man auf "Hochladen" klickt, wird der Arduino dann zuerst
> zurückgesetzt ?
Ja
> Wie wird dieser Befehl "Reset" denn an den Arduino geschickt.
> Oder wird einfach der Strom kurz unterbrochen ? xD
Nein, dafür ist keine Schaltung vorhanden. Der USB-Seriell-Adapter (bei 
älteren Arduinos der FT232RL) hat eine extra Leitung (bei FT232RL: Eine 
der Handshake-Leitungen), über welche der RESET-Eingang des AVR kurz auf 
"Low" gezogen wird, was den Controller resettet. Nach dem Reset startet 
als Erstes der Bootloader, welcher dann ein neues Programm in Empfang 
nehmen und flashen kann.

von Einer K. (Gast)


Lesenswert?

Niklas G. schrieb:
> hat eine extra Leitung
DTR


Die 32U4 machen ihren Reset, wenn für kurze Zeit auf 1200Baud gestellt 
wird.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Die 32U4 machen ihren Reset, wenn für kurze Zeit auf 1200Baud gestellt
> wird.

Uhm, was für ein Hack. Man möchte sagen, Arduino-Typisch... Hätte es da 
kein eigener USB-Request getan? Oder ein richtiger USB-Reset?

von Einer K. (Gast)


Lesenswert?

Niklas G. schrieb:
> Hätte es da
> kein eigener USB-Request getan? Oder ein richtiger USB-Reset?
Dürfte einen eigenen Treiber erfordern.

So gehts über den generischen USB-Seriell Treiber für virtuelle COM 
Ports.
Betriebssystem übergreifend.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Betriebssystem übergreifend.

Ginge es mit libusb auch, unter Windows mit WinUSB. Die 
Signatur-Problematik besteht so oder so; auch für einen Seriell-Port 
braucht's bis Win7 eine signierte .cat+.inf, wenn man eine eigene 
VID+PID nutzt, was glaube ich bei Arduino der Fall ist. Mit einem 
Composite Device ginge das parallel zum "normalen" Parallel-Port...

von Einer K. (Gast)


Lesenswert?

Es sind zwei paar Schuhe, was man sich wünscht, und was man bekommt.

Oder anders Formuliert:
> Hätte, hätte, Fahrradkette.

Nein, es kann nicht meine Rolle sein, die getroffenen Entscheidungen zu 
rechtfertigen.
Kann nur sagen, wie es jetzt ist.
Das bewerten überlasse ich gerne dir, und anderen.

Bin aber recht sicher, dass das Thema ausufernd diskutiert wurde.

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.