USB: Zwei gleiche Geräte an einem PC

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • USB: Zwei gleiche Geräte an einem PC

      Jetzt habe ich das zwar so gebaut aber wie verhält sich eigentlich ein USB Gerät bzw. der PC, wenn zwei gleiche USB Geräte mit dem selben VID und PID angeschlossen sind?
      Bekommen alle beide die selben Daten, was mein VB Programm sendet?

      Schade, das ich kein zweites Gerät mit dem AT90USB162 da habe, sonst hätte ich es ausprobieren können.
    • Hi Sinan,

      katipefendi schrieb:

      Jetzt habe ich das zwar so gebaut aber wie verhält sich eigentlich ein USB Gerät bzw. der PC, wenn zwei gleiche USB Geräte mit dem selben VID und PID angeschlossen sind?
      Bekommen alle beide die selben Daten, was mein VB Programm sendet?
      wie meinst du das?

      Wenn du z.B. zwei identische Festplatten anschließt sind die in System ja auch nicht "eine" Festplatte.
      Ich denke Windows wird das schon managen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • djmsc schrieb:

      Hi Sinan,

      katipefendi schrieb:

      Jetzt habe ich das zwar so gebaut aber wie verhält sich eigentlich ein USB Gerät bzw. der PC, wenn zwei gleiche USB Geräte mit dem selben VID und PID angeschlossen sind?
      Bekommen alle beide die selben Daten, was mein VB Programm sendet?
      wie meinst du das?
      Wenn du z.B. zwei identische Festplatten anschließt sind die in System ja auch nicht "eine" Festplatte.
      Ich denke Windows wird das schon managen.

      Wenn ich an meinem Rechner zwei HID Mäuse anschließe, dann kann ich beides bedienen und es funktioniert auch.
      Da sagt das Windows nicht, "ich habe bereits eine Maus" und ignoriert den zweiten.

      Daher wollte ich auch wissen, wie würde Windows mein Programm den ich in VB.net erstellt habe darauf regieren?
      Würde die Software alle beide mit den Daten bombardieren, weil sie die selbe VID und PID haben?




      vg
      katipefendi
    • Hallo,

      ich möchte das Thema wieder auffrischen, da ich ein zweites Gerät gebastelt habe, wo der selbe VID und PID drauf sind.
      Nun, wie reagiert da mein PC bzw. die Software auf dem PC?!

      Je nach dem, welches Gerät als erstes in den USB Buchse gesteckt wird, dessen Kontrolle wird durch die Software (PC) übernommen.
      Ich aber dachte, das alle beide Geräte gleichzeitig angesprochen werden können.

      Oder

      liege ich da falsch?

      VG
      Katipefendi
    • Ich denke, du liegst falsch.
      USB ist ja ein Protokoll, welches über Adressen angesprochen wird, der angeschlossene Slave meldet sich ja auf die Anfragen vom PC und gibt Antwortpakete zurück. Etwa so wie bei I2C. Das würde ja ein heilloses Durcheinander geben, wenn beide Slaves gleichzeitig die Antwort senden.
      Das ist jetzt nur mein Verständnis. Möglicherweise hast du aber Glück, und der PC merkt, dass 2 Geräte mit gleicher Kennung dran sind und kann es trotzdem managen.
      Warum probierst du es nicht einfach aus? ;)
    • Du könntest im Gerätemanager von windows die Eigenschaften anzeigen lassen und vergleichen. Wenn man 2x dieselbe Datei runter läd, wird ja auch automatisch (1) am Namen dran gehängt. Vielleicht ist das bei deinen Geräten auch so. Ob dir das jetzt weiter hilft, glaub' ich jetzt nicht, aber man erkennt vielleicht, wo win identische Geräte auseinander hält oder auch nicht.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich wage mich zu erinnern ich hatte es schon einmal in einem deiner anderen Threads beantwortet.
      Zuerst einmal meldet sich ein usb Gerät anhand der vergebenen VID/PID und der Klasse, aufgrund dieser sucht sich Windows auch den Treiber.
      Wen es ein HID klasse Gerät ist wie z.b. ein Keyboard wird dann ein Windos interner Treiber genommen, ansonsten musst du einen Treiber bereitstellen und installieren. VID/PID brauchts nicht für jedes Gerät neu, sie entsprechen eher einer Artikelnummer, ist also für die ganze Serie gleich.
      Zusätzlich zur VID/PID und der Klasse ist dann noch eine Seriennummer möglich. Ist diese vorhanden unterscheidet Windows dann zwischen den beiden Geräten und legt die Geräte entsprechend separat an. Mit den entsprechenden befehlen lässt sich dann jedes Gerät auch einzeln ansprechen.
      Ist keine Seriennummer vorhanden generiert sich Windows selber eine aus :VID/PID, port und der Adresse auf dem USB Bus.
      Du musst also prüfen ob du den Identfier für die Seriennummer in Bascom ändern kannst, wirst dann für jeden Chip aber neu compilen müssen wenn dies nicht als EEPROM Variable geht. Dann sind deine Geräte schonmal näher an der Spezifikation als ohne oder mit doppelter Seriennummer.

      Deine jetzige Software wird das Gerät einfachst ansprechen, man könnte das zum Verständnis mit Seriell beschreiben.
      Deine jetziges Windows Programm wird momentan nicht serial1, serial2 ...etc ansprechen sondern den ersten verfügbaren seriellen port. Funktioniert immer, wenn z.b. serial1 oder serial2 nicht vorhandden sind, dann würde der nächste verfügbare benutzt, also z.b. dann serial3 .
      Wie gesagt dies nur zur Verdeutlichung.
      Du musst jetzt suchen wie Windows die Geräte unterscheidet, dann musst dein Windows Programm auslesen können welche deiner Geräte verfügbar sind und dann wählen welches davon du ansprechen willst.
      Da sich wie gesagt ohne Seriennummer Windows eine pseudo Seriennummer generiert ändert sich diese natürlich sobald du dein Gerät an einem anderen USB port anschliesst, daher solltest du auch jeden fall die Seriennummern identifier setzen, Dann ist es unerheblich an welchem USB Port dein Gerät angeschlossen ist, es wird immer gleich aus deinem Programm ansprechbar sein.

      Dein beispiel mit der Maus funktioniert anders, Windows weiss das zwei Mäuse da sind und fragt diese nacheinander ab, selbst wenn diese ganz unterschiedlich Anschlüsse und Protokolle haben, z.b. einmal USB, einmal PS2. Ist also in der Mausfunktion in Windows hinterlegt, nicht im Maustreiber oder in der Maus selber.

      Ich hoffe ich konnte es halbwegs erklären, mit USB hast du dir zum anfangen was extrem komplexes ausgesucht.

      Tobias

      ...für die "Windows nicht möger": Verhalten ist bei allen Betriebssystemen gleich, da ich mein Geld bisher im Windows umfeld verdienst habe kenn ich mich damit halt zwangsweise am besten aus.

      Nachtrag:
      Die seriennummer kannst du setzen mit (0 bedeutet nicht es gibt den descriptor nicht, ist in fast allen Beispielen so gesetzt)
      _usb_iserial = 0

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Schraubbaer ()

    • Bei Heise.de gibt es einen Artikel der beschreibt wie Windows (ab Vista) die USB-Geräte installiert und verwaltet.
      Die Seriennummer interessiert Windows dabei nicht mehr, da es in den früheren Versionen von Windows Probleme damit gab weil Hersteller bei gleichen Geräten auch die gleiche Seriennummer vergeben haben und einige Hersteller haben diese auch komplett weg gelassen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Das Hauptwort ist das "Container ID".

      heise.de schrieb:

      Windows 7 geht noch einen Schritt weiter: Hier hat Microsoft die Container-ID eingeführt (siehe c’t-Link unten), die vom Hardwarehersteller mitgegeben werden kann (USB 3.0) oder vom USBus-Treiber erstellt wird. Für die Hardware-Container-ID ist festgelegt, dass sie eindeutig sein muss und immer nur für ein einziges Gerät gelten darf. Verfügt ein Gerät über eine solche ID, wird es von Windows als ein und dasselbe Gerät erkannt, sogar wenn es über verschiedene Kanäle wie USB, FireWire oder Netzwerk angeschlossen ist – sofern das Gerät über diese Schnittstellen verfügt


      Nun, ist es möglich, die Container ID zu beeinflussen?

      vg
      katipefendi
    • So wie das geschrieben steht gibts die Container ID nur bei USB 3 Geräten, Du hast aber keines, also erstellt sich Windows wohl weiterhin für USB 1.1 und 2 Geräte eine anhand der von mir beschriebenen Methode. Bleibt nur der Weg über die Seriennummer dies überhaupt von aussen zu beeinflussen.
      Aber beide Optinen ändern nichts daran das du über deinen Treiber bzw Programm in Windows abfragen musst wieviele Geräte da sind, dann anhand des (wie auch immer gearteten) Identifier das entsprechende Gerät ansprechen. Ich habe die lib und den Treiber bzw Testprogramm nicht, um (falls das überhaupt möglich ist) rauszufinden ob das Demoprogramm und Treiber das überhaupt können. Hat alles nichts mit Bascom an sich zu tun. Reines Windows gewurschtel.

      Tobias
    • Ich habe das Problem mit zwei Arduino Nano (China Clones), da steht sogar die gleiche Seriennummer drin.
      Einen direkt angeschlossen zweiten mit einen aktiven Hub, im Gerätemanager tauchen die jetzt mit
      USB-SERIAL CH340 (COM4) und USB-SERIAL CH340 (COM11) auf.

      Irgendwo gab es mal eine Anleitung wie man mit diesen Tool die .INF manipulieren kann, da ich aber eh den Hub dran habe habe ich das noch nicht getestet.

      Tutorium zu USB-basierten Geräten mit NI-VISA

      ni.com/tutorial/4478/de/#toc1
    • Hallo,

      Ich habe den AT90USB162 im Einsatz. Die Schaltung ist mittlerweile bekannt. Aber hier noch einmal.
      Ich habe meine Applikation in VB.net sowohl auch in C# geschrieben. Funktioniert auch sehr gut, ich kann Daten an den Chip senden und anzeigen.

      Jetzt aber habe ich das Problem, wenn ich zwei gleiche Geräte am USB Port anschließe, wird nur der erste angeschlossene Chip erkannt.
      Also, kann ich auch nur den einen ansteuern.

      Wenn ich aber den ersten vom USB Port abstecke, dann erst lässt ich die zweite angeschlossene Chip ansteuern.

      Ich wollte das aber, dass ich ohne einen von beiden abstecken muss, ansteuern.


      Const Vendor_id = &H16D0 ' MCS Vendor ID
      Const Product_id = &H201D ' MCS product ID, you can buy a PID in the MCS shop
      Config Usb = Device , Language = &H0409 , Manufact = "katip" , Product = "USB-Lauftschriftanzeige" , Serial = "00001"


      Schraubbaer schrieb:

      Hat alles nichts mit Bascom an sich zu tun. Reines Windows gewurschtel.

      Tobias
      Und dieses Windows gewurschtel muss doch im Internet zu finden sein!?


      six1 schrieb:


      Mir ist nur nicht ganz klar, was du vorhast.... a_56_df238249
      Ich hoffe jetzt ist es klar was ich vorhabe :thumbsup:


      Schraubbaer schrieb:

      Ich denke mal katipefendi will das mit der Lib mitgelieferte beispiel und Treiber benutzen, welche aber wohl nicht auf betrieb mit mehreren gleichen Devices ausgelegt ist.

      Katipefendi: mit welcher Software bzw Programm schreibst du deine Windows Applikation? C# , Java? VB?

      Tobias

      Lib? von welcher Lib redest du? ich kenne keinen Lib oder meinst du etwa den USBinc von Mark? denn den habe ich bereits im Einsatz.


      Hoffe jetzt ist es verständlich geworden was mein Anliegen ist.

      VG
      katipefendi
      Dateien
      • Unbenannt.PNG

        (127,76 kB, 9 mal heruntergeladen, zuletzt: )
    • katipefendi schrieb:

      Const Vendor_id = &H16D0 ' MCS Vendor ID
      Const Product_id = &H201D ' MCS product ID, you can buy a PID in the MCS shop
      Config Usb = Device , Language = &H0409 , Manufact = "katip" , Product = "USB-Lauftschriftanzeige" , Serial = "00001"
      Hast du das so in beiden µCs konfiguriert? Oder hast du auch verschiedene Serial-Nummern vergeben.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Wie schon geschrieben, die Schaltung hat damit rein gar nichts zu tun. Zeig doch mal das Programm/zeilen mit denen du das Gerät von Windows aus ansprichst. Da liegt das grundproblem. Infos gibts für sowas eigentlich en mass. So vertraulich kann dein programm nicht sein, ansoonsten kürz es bis auf die ansprechsequenz, änder die variablen,namen etc. Ohne programm ist alles nur raterei für uns.

      Hab mir mal die mühe gemacht und dir nen sceenshot erstellt. Ähnliche vorraussetzung wie bei dir, abgesehen davon das man diese als Seriell einfach per COMx ansprechen würde.
      Zwei Geräte (CP210x Serial converter) komplett gleich, ohne serialnumber. Es tauchen zwei Geräte in der Systemsteuerung auf, einmal Port 8, einmal Port 21; VID 10C4 PID EA60
      Schaust du in die Registry:
      serial.PNG

      ein Gerät taucht unter 0001 auf, wird die default Seriennummer sein (die der Hersteller des converters nicht geändert hat)
      Stecke ich ein zweites rein kann diese Seriennummer nicht nochmals angelegt werden, also wird wie schon beschrieben eine anhand von BUS/Port etc. generiert. Keine Seriennummer merkt man wenn man die Geräte untereinander tauscht, der COMx bleibt an der USB Buchse, mit richtiger Seriennummer wandert er mit dem Gerät mit.
      In den Keys findst du einige werte, einen davon benutzt du bestimmt bewusst/unbewusst, den musst du finden und entsprechend des zweiten Gerätes konfigurieren.

      Tobias