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
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.
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 ?
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.
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.
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
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.
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
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.
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.
Niklas G. schrieb: > hat eine extra Leitung DTR Die 32U4 machen ihren Reset, wenn für kurze Zeit auf 1200Baud gestellt wird.
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?
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.