Forum: Mikrocontroller und Digitale Elektronik AVRDude mehrere Instanzen gleichzeit starten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Robert H. (kee4)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Testumgebung PC: Intel G3320 @3GHz 2GB Ram (2 Kerne)
                 Gigabyte B85M D3H
OS: Windows 10 64 Bit
USB-Treiber: libUSB 1.2.6.0 mit libWizard.exe generiert und installiert
Programmer: DIAMAX AllAVR / Den 4 Programmern wurden vier individuelle 
Seriennumern zugewiesen

Wie ihr vielleicht aus meinen anderen Beträgen wisst beschäftige ich 
mich schon länger und immer wieder mit "Controller-Programmierung in der 
Produktion" und zwar auf LowCost-Basis. Momentan ist das Geld für 
richtige Produktionsprogrammer noch nicht frei gegeben.

Als Gang-Programmer habe ich bisher STK500.exe aus AVR-Studio 4 
eingesetzt und das lief als 4-Fach-Gang-Programmer. Unter Win7 
problemlos und dann auf Win10 portiert - und seit dem gibt es Probleme.

Nachdem schon zweimal durch ein Update von Windows 10 der Programmer 
nicht mehr gefunden wird (STK500.exe:Programmer not found) wil ich nun 
diese Gang-Programmer-Station mit AVRDude lösen.

Die Steuersoftware ist "ein PC-Programm" bzw. 4 Programme die vier 
Batchdateien aufrufen. Jeder Batchdatei ist eine eigene Intel-Hex-Datei 
mit Serienummer und Parametern usw. modifiziertes .hex-File zugeordnet. 
Die Steuersoftware liest das Ergebnis der Flashvorgangs aus einer 
Textdatei aus. In der BatchDatei wird diese mit ERRORLEVEL > 
Result.%Instanz%.txt angelegt.

Starte ich jeden Job, wenn der letzte beendet ist, funktioniert alle 4 
Programmer einwandfrei. AVR-Dude beendet immer mit "ERRORLEVEL 0".
Starte ich aber nun alle 4 Instanzen der Programmierung zeitgleich, bzw. 
1-2  Abstand (so schnell wie man auf 4 Buttons klickt) so machen 
mindestens 2 Instanzen beim Programmieren es Flash einen Fehler.
Ab und zu hängt das ganze so, dass sich USB-Kommunikation aufhängt und 
ich die Programmer durch abstecken von USB reseten muss.

Hat jemand Erfahrtung woran das liegen kann, dass sich 4 Instanzen von 
AVR-Dude nicht gleichzeitig starten lassen.

Gruß und Danke euch schon mal
Robert

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Robert H. schrieb:
>
> Hat jemand Erfahrtung woran das liegen kann, dass sich 4 Instanzen von
> AVR-Dude nicht gleichzeitig starten lassen.

Guten Morgen, ja klar deine Programmer haben alle dieselbe ID, konkret 
die USB ID ist dieselbe.

Und es ist wirklich völlig irrelevant welche PC hatte du verwerwendest; 
aber wir-ich nutzen für so etwas Linux. Siehe lsusb.

von Robert H. (kee4)


Lesenswert?

Hallo Karl,
dank für die Antwort. Das hier vier Programmer mit der gleichen USB-ID 
auf sogar den selben Treiber zugreifen ist mir klar.

Aber dafür hat man ja die Möglichkeit den Programmen verschiedene 
Serienummern zu geben und diese auch beim Aufruf von AVR-Dude mit zu 
übergeben.
Beim Öffnen des Programmers verwende ich wie in der Dude-Doku 
geschrieben steht: (zB:) -P USB:00200692123 bzw. -P USB:2123 weil nur 
die letzen 4 Byte von AVRDude verglichen werden.
Es wird auch der richtige Programmer angespochen. Die erste Instanz 
spicht den ersten Programmer und somit die erste Platine an, die zweite 
Instanz den zweiten Programmer und die zweite Platine usw.

Wenn's an der USB-ID liegt - gäbe es dann ein Lösung? (außer Linux)

Unter AVR Studio wenn mehrere Programmer angeschlossen sind, wird man ja 
auch gefragt welchen Programmer mit welcher Serienummern man verwenden 
will.

Hier fehlen mir wahrscheinlich die weitergehenden Systemnahen 
USB-Kenntnisse gerade im Zusammenhang mit libUSB.

Die Angaben zum PC usw. schreibe ich in meine meisten Foreneinträge 
rein, einfach dass noch zusaätliche Informationen vorhanden sind.

Das Thema Linux hatte ich schon, das geht nicht, da in der Ferigung auf 
diesen PCs viele andere (Win-)Programme laufen.

Darf ich aber fragen was ich mit dem Hinweis auf "lsusb" machen soll?

Gruß und Danke
Robert

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hallo Robert,

Der einfache Aufruf liefert die USB IDs.
# https://linux.die.net/man/8/lsusb

$ lsusb
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 045e:00cb Microsoft Corp. Basic Optical Mouse 
v2.0
Bus 004 Device 002: ID 04f3:0103 Elan Microelectronics Corp. ActiveJet 
K-2024 Multimedia Keyboard
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0b05:17cb ASUSTek Computer, Inc. Broadcom 
BCM20702A0 Bluetooth
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


In deinem geschlossenen Produktion, würde ich zur Lösung jedem AVR 
Programmer eine eineindeutige USB ID zuweisen.
Z.B. durch fortschreiben der eigentlichen ID 03eb:????.

Das geht natürlich nur, wenn man Zugriff auf die Firmware hätte.

Über lokale avrdude.conf dann jeweils die neuen, weiteren Programm 
hinzufügen (nicht getestet):
1
programmer parent "<Name deines Programmers>"
2
  connection_type = usb;
3
  usbvid     = 0x03eb;
4
  usbpid     = 0x????;

von Robert H. (kee4)


Lesenswert?

Hallo Karl,
Danke für die Info aber den Source für die FW habe ich leider nicht zur 
Verfügung.

Gruß
Robert

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hallo Robert,

nicht gleich aufgeben.

Hast Du mal nachgesehen welche USB ID hier korrekt ist?

Mit einem binär Editor kann Mann/ Frau auch die USB ID direkt in der 
Firmware ändern. So viele Möglichkeiten je eine 16 Bit Zahl (usbvid und 
usbpid) zu speichern, wird es nicht geben.

von tommy (Gast)


Lesenswert?

Hallo Robert,

wenn ich nicht irre, dann hat:

Jörg W. (dl8dtl) (Moderator)

von 2007 bis 2014 am AVRDude gearbeitet.
Vielleicht hat er einen Tip für dich.

Mal per PN anschreiben oder laut rufen: Jööööööörg?

von Robert H. (kee4)


Lesenswert?

Hallo Karl,

Karl M. schrieb:
> Mit einem binär Editor kann Mann/ Frau auch die USB ID direkt in der
> Firmware ändern. So viele Möglichkeiten je eine 16 Bit Zahl (usbvid und
> usbpid) zu speichern, wird es nicht geben.

Auf dem Programmer ist ein NPX LPC1343, da müsste ich zuerst 
Revers-Engeniering machen und schauen wo auf der Platine JTAG oder SPI 
ist. Und ich denke mal der Hersteller hat das Flash sicher geschützt 
gegen auslesen.

Danke, Gruß
Robert

von Robert H. (kee4)


Lesenswert?

Danke Tommy,

Jörg hat mir in anderen Threads rund um das Thmea "Production 
Programmer" schon viel geantwortet.
Er kommt, wie er selbst sagt aus der Liunux Welt - und ich denke mal das 
ganze hängt wirklich am libUSB-Treiber unter Windows.

Ich warte mal ob er sich zu Wort, meldet.

Gruß
Robert

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.