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
H.Joachim S. schrieb: > mehrere mehrere USB-Geräte kann man kürzer schreiben als "mehrere^2 USB-Geräte"
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.
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.
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.
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
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. ;-)
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.
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.
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
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.
Allerdings muß man beim Firmware-Update dann auch vorsehen, daß die schon vorhandene Seriennummer über das Update rübergerettet wird.
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 :=-._
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.