Hallo Foraner, für Firmware-Updates habe ich dem Kunden einen Adapter mit "Arduino as ISP" zur Verfügung gestellt. OS ist Windows. Zu Hause kann ich problemlos die Firmware brennen, aber für den Kunden möchte ich das vereinfachen: 1. muss man in der Komandozeile jeweils die verwendete COM angeben, kann man das vereinfachen? Gibt es was wie "AVR Burn-o-Mat", aber in gut? Das Ziel wäre schon, dass der Kunde einfach ein .bat starten kann, und der Vorgang durchläuft. Maximal einmalig die COM angeben muss. 2. habe ich das Problem, dass der "Arduino as ISP" jeweils nach dem ersten Anstecken beim ersten Kommando einen Fehler ergibt. Ich vermute, dass da noch Zeichen in einem Puffer stecken. Kennt wer das Problem, und wie kann man das umgehen? Mein Workaround wäre ein Dummy-Read als erstes Kommando... Danke und Gruss Chregu
Chregu schrieb: > für Firmware-Updates habe ich dem Kunden einen Adapter mit "Arduino as > ISP" zur Verfügung gestellt Was ist denn das Ziel target? Eigene Platine? Chregu schrieb: > Maximal einmalig die COM angeben muss. Du kannst ja ein BAT schreiben dass den COM Port von einer Umgebungsvariablen zieht. Dann muss er die Variable nur einmalig anlegen.
N. M. schrieb: > Du kannst ja ein BAT schreiben dass den COM Port von einer > Umgebungsvariablen zieht. Dann muss er die Variable nur einmalig > anlegen. Das ist ungeeignet da sich der Port über die Stunden, Tage, Wochen verändern kann. Aktuelle, dynamische Findung ist angesagt, aber mit einem Arduino nicht ganz einfach. Man müsste alle Ports abscannen und eine für den Arduino typische Bootloader Signatur finden.
aduinoistschööön schrieb: > Das ist ungeeignet Ich finde das ganze Konstrukt ungeeignet, bei einem Kunden mit Arduino as ISP rumzuspielen. Es genügt aber seinen Anforderungen solange der Arduino as ISP nicht neu enumeriert wird. Chregu schrieb: > Das Ziel wäre schon, dass der Kunde einfach ein .bat starten kann, und > der Vorgang durchläuft. Maximal einmalig die COM angeben muss.
N. M. schrieb: > Was ist denn das Ziel target? Eigene Platine? Genau. Mit ATtiny2313. N. M. schrieb: > Ich finde das ganze Konstrukt ungeeignet, bei einem Kunden mit Arduino > as ISP rumzuspielen. Kunde ist Händler und technisch gewandt. Gruss Chregu
Chregu schrieb: > 1. muss man in der Komandozeile jeweils die verwendete COM angeben, kann > man das vereinfachen? Christian M. schrieb: > Kunde ist Händler und technisch gewandt. Muss man diesen Widerspruch verstehen?
Kunden-"Lösung" mit einem Rotzekacke-Gemisch aus Arduinos, Windows COM-Ports und BAT-Files? Na Mahlzeit :( Eine Runde Mitleid für deinen Kunden. Soweit ich weiß - vielleicht hat sich das geändert - bekommt man Zugriff auf die COM-Port Benennung über eine Treiber-API Namens "COM Port Database". https://docs.microsoft.com/en-us/windows-hardware/drivers/serports/com-port-database Aber das hilft dir aus einer BAT-Datei wenig. Was du machen kannst ist die Registry untersuchen. Das geht, mit viel Gebastel, auch auch aus einer BAT-Datei raus.
1 | reg query "HKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter" /s |
liefert die aktuellen Daten des COM Name Arbiters. ComDB ist eine Bitmaske die beschreibt welche COM-Ports vergeben sind (schwer mittels BAT zu analysieren). Aber die Schlüssel unter Devices sind die einzelnen, bekannten COM-Ports. Bei COM-Ports von USB-Geräten steht dort u.a. die USB VID und PID und anderes Zeug. Wenn du mehr Infos über das Gerät brauchst, mit der VID und PID kannst du dann unter der Geräte-Enumeration nach dem Gerät suchen. Dazu bastelst du dir einen Registry-Schlüssel der Form HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_<VID Nummer>&PID_<PID Nummer> Unter dem Schlüssel findest du alle Instanzen der jeweiligen Hardware. Für jede Instanz gibt es unter anderem den FriendlyName, in dem noch mal der COM-Port steht. Weiter findest du die COM-Ports auch unter
1 | reg query HKLM\HARDWARE\DEVICEMAP\SERIALCOMM /s |
Dort aber ohne große Zusatzinfos. Viel "Spaß" das mit den Mitteln eines Windows Batch-Jobs auszuwerten.
Hannes J. schrieb: > Viel "Spaß" das mit den Mitteln eines Windows Batch-Jobs auszuwerten. Vielleicht geht es über ein PowerShell Skript leichter? Aber ich finde es auch suboptimal.
Christian M. schrieb: > Hannes J. schrieb: >> Eine Runde Mitleid für deinen Kunden. > > Wie würdest Du es machen? Microchip Snap, MPLABX IPE, und das ganze per ipecmd.exe steuern. fchk
Falls die Herausforderung noch aktuell ist ... Im Zeitalter der Comports, die über einen USB-Konverter simuliert werden gibt es ja noch eine andere Möglichkeit den Kunden-Comport zu bestimmen: Man lässt den Kunden/Anwender die USB-Verbindung einfach unmittelbar vor dem Flashen verbinden. Der neu dazugekommene Comport ist der zu benutzende. Ich habe dazu ein kleines Kommandozeilenprogramm geschrieben, das dieses Prinzip verwendet. Die Nummer des Comports wird als Errorlevel zurückgegeben und ist in einer Batch universell verwendbar. Bei Interesse einfach mal das herunterladen: https://www.franksteinberg.de/ZIPS/eRpmMeter.zip Hier wird ein Brushless-Drehzahmesser-Firmware automatisiert auf einen Arduino-Uno geladen (Batch starten - USB nach Aufforderung verbinden - Flashvorgang beginnt automatisch). Enthalten ist neben der hier nicht interessierenden Firmware das besagte Kommandozeilenprogramm (SayNewComPort.exe) nebst Quelltext in FreeBasic und die steuernde Batch. Brauchst du nur an deine Bedürfnisse anpassen. Vielleicht hilft es ja Frank
Steini63 schrieb: > Man lässt den Kunden/Anwender die USB-Verbindung einfach unmittelbar vor > dem Flashen verbinden. Der neu dazugekommene Comport ist der zu > benutzende. Das ist vermutlich auch das Prinzip, welches viele Gerätetreiber verwenden, bei denen erst an einem bestimmten Punkt der Treiberinstallation das Gerät angesteckt werden darf...
Bernd schrieb: > Das ist vermutlich auch das Prinzip, welches viele Gerätetreiber > verwenden, bei denen erst an einem bestimmten Punkt der > Treiberinstallation das Gerät angesteckt werden darf... Kann ich mir gut vorstellen. Jedenfalls scheint die Ermittlung des benutzten Comports so ziemlich DAU-sicher zu sein. Außerdem geht es schneller, als im Gerätemanager zu suchen und das Ergebnis dann irgendeiner Software einzutragen. Null-Click-Bedienung sozusagen. Frank
Frank S. schrieb: > Null-Click-Bedienung sozusagen. Dagegen ist dann "Einstöpseln des USB Gerätes zum richtigen Zeitpunkt" die High-Tech-Lösung? Boaaaaahhh .....
Schon mal über ein "field programmer" nachgedacht? Ein uC der ein anderen wenn angeschlossen flashed. Das sollte sogar ein trainierter Affe schaffen falls der technich versierte Händler nicht zur Verfugung steht. Einfach vorprogrammiert an den Kunden geben mit Anschlussanweisungen, kein Computer und Comportgebastel nötig... https://www.fischl.de/ispnub/
Thema COM-port: Alle angeschlossen usb Geräte scannen à la "lsusb" und die VID/PID auf die Werte des Arduinos durchsuchen. Der passende COM Port steht direkt dabei. Solange nur ein Arduino angeschlossen ist, ist das failsafe. Evtl mit einem Testkommando kombinieren - Chip ID des Targets auslesen oder so.
Danke Leute! Vorallem an Frank! Ich werde das nächste Woche ausprobieren, dann werde ich wieder zu Hause sein! Gruss Chregu
USB Stöpsler schrieb: > Frank S. schrieb: >> Null-Click-Bedienung sozusagen. > > Dagegen ist dann "Einstöpseln des USB Gerätes zum richtigen > Zeitpunkt" die High-Tech-Lösung? Boaaaaahhh ..... Nur mal zur Klarstellung: Das Programm (bzw. die Batch) fordert zum "Einstöpseln" auf. Der Benutzer hat dann alle Zeit der Welt das zu tun. In der aktuellen Version ist es auch ok, wenn das Gerät noch verbunden war (abstöpseln - einstöpseln - los geht's). Ist vermutlich Low-Tech, macht aber den Charme der Lösung aus. Frank
:
Bearbeitet durch User
Frank S. schrieb: >> Dagegen ist dann "Einstöpseln des USB Gerätes zum richtigen >> Zeitpunkt" die High-Tech-Lösung? Boaaaaahhh ..... > Ist vermutlich Low-Tech, macht aber den Charme der Lösung aus. Na ja. Deswegen habe ich ihm einen Programmer empfohlen, der sich als HID identifiziert. Der wird einfach über die USB VID/PID erkannt, und das ist echtes Plug&Play, das ist so wie eine Maus anstecken. Geht immer. fchk
Steini63 schrieb: > Bei Interesse einfach mal das herunterladen: > https://www.franksteinberg.de/ZIPS/eRpmMeter.zip Danke Frank, das funktioniert! Gruss Chregu
Ansonsten wie wäre es den Mikrocontroller zu sockeln und dem Kunden einfach den fertigen Baustein zum selber einbauen zu schicken?
Tim T. schrieb: > Ansonsten wie wäre es den Mikrocontroller zu sockeln und dem Kunden > einfach den fertigen Baustein zum selber einbauen zu schicken? Chregu schrieb: > für Firmware-Updates
Chregu schrieb: > der "Arduino as ISP" jeweils nach dem > ersten Anstecken beim ersten Kommando einen Fehler ergibt Auch gelöst nach: https://www.mikrocontroller.net/articles/AVRDUDE Konkret:
1 | rem Arduino resetten: |
2 | mode com%NEUERCOMPORT% dtr=on |
3 | ping -n 1 127.0.0.1 > NUL |
4 | mode com%NEUERCOMPORT% dtr=off |
5 | ping -n 3 127.0.0.1 > NUL |
ping ist die einzige sinnvolle Möglichkeit unter allen Windowsen ein funktionierendes Delay zu machen.. Gruss Chregu
Alexander S. schrieb: > Tim T. schrieb: >> Ansonsten wie wäre es den Mikrocontroller zu sockeln und dem Kunden >> einfach den fertigen Baustein zum selber einbauen zu schicken? > > Chregu schrieb: >> für Firmware-Updates Da der OP schon in der Arduino Welt denkt, bin ich einfach mal davon ausgegangen das die Firmware auch auf einem Atmel irgendwas läuft...
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.