Forum: PC Hard- und Software AVR - USB CDC


von H.Joachim S. (crazyhorse)


Lesenswert?

Was passiert eigentlich, wenn ich mehrere mehrere USB-Geräte mit 
identischer firmware (und damit identischer serial number) an einen PC 
anstecke?
Habe im Moment leider nur einen einzigen Mega32UC4 hier...

: Verschoben durch Moderator
von Max M. (jens2001)


Lesenswert?

H.Joachim S. schrieb:
> mehrere mehrere USB-Geräte

kann man kürzer schreiben als "mehrere^2 USB-Geräte"

von Jim M. (turboj)


Lesenswert?

Das gibt dann ein heiteres Ratespiel Gerät <-> COM Port Nummer.
Übrigens muss identische Firmware nicht auch identische Seriennummer 
bedeuten, viele µCs haben intern Seriennummern hinterlegt aus denen man 
Seriennummer-Strings generieren könnte.

von H.Joachim S. (crazyhorse)


Lesenswert?

viele != alle.
Beim Mega32UC4 habe ich nichts in dieser Richtung gefunden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jim M. schrieb:
> Das gibt dann ein heiteres Ratespiel Gerät <-> COM Port Nummer.

Es gibt hier zwei Algorithmen.
Hat jedes Gerät eine eindeutige Seriennummer, so ist die 
Schnittstellnummer an die Seriennummer gekoppelt.

Gibt es keine Seriennummer, so ist die Schnittstellennummer an den 
USB-Port im USB-Gerätebaum gekoppelt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Es gibt hier zwei Algorithmen.

Das ist das Windows-Prinzip.

Andere machen das u. U. anders, bei Linux bekommst du die Teile
normalerweise in der Reihenfolge ihres Ansteckens einsortiert.
Parallel dazu existieren Symlinks in den Verzeichnissen
/dev/serial/by-id und /dev/serial/by-path:
1
jwunsch@mani 1418% ls -l /dev/serial/by-id/
2
total 0
3
lrwxrwxrwx 1 root root 13 Sep 25 10:15 usb-dresden_elektronik_deUSB_Levelshifter-if00-port0 -> ../../ttyUSB2
4
lrwxrwxrwx 1 root root 13 Sep 23 17:27 usb-dresden_elektronik_SensorTerminalBoard_DEG4UEJL-if00-port0 -> ../../ttyUSB1
5
jwunsch@mani 1419% ls -l /dev/serial/by-path/
6
total 0
7
lrwxrwxrwx 1 root root 13 Sep 23 17:27 pci-0000:00:1d.0-usb-0:1.6.3:1.0-port0 -> ../../ttyUSB1
8
lrwxrwxrwx 1 root root 13 Sep 25 10:13 pci-0000:00:1d.0-usb-0:1.6.6:1.0-port0 -> ../../ttyUSB0
9
lrwxrwxrwx 1 root root 13 Sep 25 10:15 pci-0000:00:1d.0-usb-0:1.6.7.3:1.0-port0 -> ../../ttyUSB2

Wie man sieht, gibt es eigentlich zweimal den deUSB_Levelshifter,
aber die haben (was mich jetzt etwas verwundert) keine Seriennummer
hinterlegt, sodass natürlich nur eins von beiden unter "by-id"
verlinkt worden ist.

Andere Betriebssysteme mögen das wieder anders handhaben.

Da das ein reines Problem der PC-Seite ist, habe ich das mal hierher
geschoben.  Die Firmware auf dem AVR hat darauf (abgesehen von der
Möglichkeit, sich per Seriennummer eindeutig bekannt zu machen)
keine Einflussmöglichkeit.

von H.Joachim S. (crazyhorse)


Lesenswert?

So, heute kam Nachschub :-)

Es funktioniert problemlos.
Werden die Geräte einzeln eingesteckt, bekommen sie logischerweise alle 
denselben COM-Port (bei mir aktuell COM13, Windows). Weitere Geräte dann 
andere. Also erstmal keine Konflikte. Unschön ist natürlich, dass man 
aufpassen muss, welches Gerät nun tatsächlich welches ist, aber das war 
ja eh klar.

Stellt sich die Frage, wie man eine eindeutige oder zumindest 
ausreichend grosse Anzahl von Seriennummern in der Produktion 
hinbekommt. ID-Chips wären natürlich eine prima Möglichkeit, kostet aber 
extra. Gibt bestimmt irgendeine Software, die bei jedem 
Programmiervorgang einen Zähler in das Hex- oder eep-file einbaut. Zur 
Not aber auch schnell selbst geschrieben.


Danke für die Antworten

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Reservier' dir ein paar Bytes am Ende des Flashs dafür.  Die
programmierst du dann nach der eigentlichen Firmware, natürlich
ohne den Rest des Flashs zu löschen. ;-)

von Max D. (max_d)


Lesenswert?

H.Joachim S. schrieb:
> Stellt sich die Frage, wie man eine eindeutige oder zumindest
> ausreichend grosse Anzahl von Seriennummern in der Produktion
> hinbekommt.

Wenn es wirklich nur darum geht: jeder AVR wird mit Seriennummer = 0 
ausgeliefert und wählt sich eine zufällige aus wenn man das ihn das 
erste mal bestromt. Bei Längen >= 32Bit dürfte das zu Lebzeiten keine 
doppelten geben (ausser du verkaufst Millionen von deinen Dingern).

Ansonsten: Das eep mit paar Zeilen Python hingebogen für jeden Lauf.

von Amateur (Gast)


Lesenswert?

Völlig gleiche USB-Devices sollte es nicht geben.
Das ist im Grunde genommen dasselbe wie bei zwei gleichen IPs usw.
Die Behandlung dieses Sonderfalles wird sich auch von Implementierung zu 
Implementierung, des USB-Treibers, unterscheiden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

H.Joachim S. schrieb:
> Stellt sich die Frage, wie man eine eindeutige oder zumindest
> ausreichend grosse Anzahl von Seriennummern in der Produktion
> hinbekommt.

Wenn nicht mehr als 100 Stück am Tag produziert werden, kann man den
alten Seriennummern-Trick benutzen, der gern im DNS genommen wird:

YYYYMMDDNN (Jahr, Monat, Tag, Nummer am Tag)

also das erste heute hergestellte Gerät bekommt die

2015092500

von Amateur (Gast)


Lesenswert?

Denk aber bitte daran, die Nummern zu protokollieren.

Benötigt der Kunde: Z.B. Max Mustermann ein Update, so sollte die 
aktuelle Nummer bekannt sein. Andernfalls kommt Dein System 
durcheinander.

Du kannst natürlich auch sagen: "Sch* drauf" und Du gibst ihm eine 
Nummer von heute, aber damit nimmst Du Dir die Möglichkeit eventuell die 
Hardwareversion zu erraten. Letztere ist ja indirekt mit dem 
Produktionsdatum verknüpft und sollte beim Update im Auge behalten 
werden.

von Rolf M. (rmagnus)


Lesenswert?

Allerdings muß man beim Firmware-Update dann auch vorsehen, daß die 
schon vorhandene Seriennummer über das Update rübergerettet wird.

von Markus -. (mrmccrash)


Lesenswert?

Und wenn man große Serien fertigen will:

http://www.atmel.com/devices/AT24CS01.aspx

fertige I2C EEPROMs mit fester, vom Hersteller vergebener Seriennummer.

Setzt natürlich voraus, dass man in seinem System einen I2C Bus im 
Einsatz bzw. dafür frei hat.

_.-=: MFG :=-._

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Markus -. schrieb:
> Und wenn man große Serien fertigen will:

… kann man auch noch die Dallas (jetzt Maxim) Onewire-Chips für
sowas benutzen, die brauchen nur ein Controllerpin. ;-)

Aber ich denke schon, dass man es in seiner Fertigung auf die Reihe
bekommen sollte, eine eindeutige Seriennummer im Flash oder EEPROM
zu hinterlegen, wenn man das will.

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.