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