Forum: Compiler & IDEs AVRDude beim Kunden


von Chregu (Gast)


Lesenswert?

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

von N. M. (mani)


Lesenswert?

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.

von aduinoistschööön (Gast)


Lesenswert?

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.

von N. M. (mani)


Lesenswert?

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.

von Christian M. (christian_m280)


Lesenswert?

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

von aduinoistschööön (Gast)


Lesenswert?

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?

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

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.

von N. M. (mani)


Lesenswert?

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.

von Christian M. (christian_m280)


Lesenswert?

Hannes J. schrieb:
> Eine Runde Mitleid für deinen Kunden.

Wie würdest Du es machen?

Gruss Chregu

von Frank K. (fchk)


Lesenswert?

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

von Steini63 (Gast)


Lesenswert?

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

von Bernd (Gast)


Lesenswert?

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...

von Frank S. (steini63)


Lesenswert?

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

von USB Stöpsler (Gast)


Lesenswert?

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 .....

von Anderer Ansatz (Gast)


Lesenswert?

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/

von Moskito (Gast)


Lesenswert?

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.

von Christian M. (christian_m280)


Lesenswert?

Danke Leute! Vorallem an Frank! Ich werde das nächste Woche 
ausprobieren, dann werde ich wieder zu Hause sein!

Gruss Chregu

von Frank S. (steini63)


Lesenswert?

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
von Frank K. (fchk)


Lesenswert?

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

von Christian M. (christian_m280)


Lesenswert?

Steini63 schrieb:
> Bei Interesse einfach mal das herunterladen:
> https://www.franksteinberg.de/ZIPS/eRpmMeter.zip

Danke Frank, das funktioniert!

Gruss Chregu

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Ansonsten wie wäre es den Mikrocontroller zu sockeln und dem Kunden 
einfach den fertigen Baustein zum selber einbauen zu schicken?

von Alexander S. (alesi)


Lesenswert?

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

von Christian M. (christian_m280)


Lesenswert?

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

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.