usb multiplexer als kvm

Stijnos

Golden Member

Ik moet een usb muis en toetsenbord kunnen schakelen naar 8 verschillende pc's. Eigenlijk een zogenaamd kvm switch.
Het switchen moet ook via een pc gebeuren. Nu zullen er inderdaad wel bestaande kastjes zijn, maar ik wil toch graag kijken of ik het zelf redelijk eenvoudig kan maken, gezien ik dan wat flexibeler ben in de aansturing en maatvoering.

Nu zie ik dat er usb multiplexers zijn zoals de MAX4899E. Heeft iemand ervaring met soortgelijke ic's? werkt dit zowel voor host als client? Of enkel voor meerdere devices aan 1 host?

ik zou aan 3 1:4 multiplexers dan genoeg hebben en moet ik nog een redelijk eenvoudig hub IC'tje hebben zonder teveel poespas.

Moet ik nog rekening houden met het koppelen van de ground van 8 verschillende pc's? ideaal zou het allemaal geisoleerd zijn lijkt me?

om in 1 microcontroller 8 HID clients te implementeren en intern de 2 aangesloten host HID commando's door te sturen lijkt me onnodig complex.

Je kan je realiseren dat muis-en-keyboard waarschijnlijk lowspeed USB gebruikt. Dat is maar 1.5mps.

Dus eventueel "zelf" wat maken misschien zelfs gewoon in een microcontroller is misschien ook iets. Ik dacht eerst: gewoon een snelle interrupt op pin change en dan snel doorsluizen. Dan introduceer je iets 100-200ns aan delay, maar misschien komt het goed. Maar het is ingewikkelder: de data-richting draait natuurlijk steeds om. Tja, dat maakt eea tricky.

Ik denk dat de MAX4899 truuk zou moeten werken. Ik heb de "intro" pagina van het datasheet gelezen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Stijnos

Golden Member

ja dat denk ik ook. Nog beter zou zijn om per pc een HID client continu geconnect te hebben (dat kan elke arduino of usb microcontroller redelijk eenvoudig) en dat 1 van die 8 dan van 2 usb hosts te HId commands krijgen.
Alleen het afhandelijk van 2 usb hosts lijkt me wat lastiger.
Met deze opstelling heb ik niet conitnu het probleem dat de pc's weer moeten handshaken met het usb device om dat de verbinding simpelweg fysiek verbroken wordt.

Stijn

Hoe wou je de video dan schakelen? (een HDMI of Displayport switch is niet echt eenvoudig...)
(of je moet een KVM-over-IP gebruiken)

[Bericht gewijzigd door Arco op 15 november 2021 12:03:28 (18%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Stijnos

Golden Member

het video gedeelte is al geregeld. dit gaat puur om de usb.
Moeten de 8 pc's geisoleerd zitten? ik heb even gekeken naar de adum4150, maar met zo'n 10.- per stuk wordt dat wel erg veel van het goede misschien.

KVM switches hebben we voor het laatst in de jaren '90 gebruikt, voor Windows PC's is remote desktop handiger...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Stijnos

Golden Member

klopt, maar voor deze toepassing niet.
Er moet bijna instant naar 1 van 8 pc's overgeschakeld kunnen worden. Een remote desktop, VNC of teamview achtige oplossing past hier niet

In Remote Desktop kun je met Alt+Tab de gewenste verbinding kiezen... (da's in 2 seconden gebeurd...)
Als 't niet full-screen hoeft kun je ze alle 4 tegelijk op scherm zetten...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Stijnos

Golden Member

Dit moet echt iets hardware matigs worden.
Kan iemand iets zinnigs zeggen over benodigde isolatie als ik 8 x de ground van de 8 pcs koppel? Of hoe ik dat goedkoop op een nette manier kan doen zonder dure highspeed opto isolators?

Iemand ervaring met het monitoren/doorgeven van hid protocol in een micro?
Dus een host interface aan de microcontroller voor muis en keyboard en vervolgens een (of meerdere) hid device interface simuleren?

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Stijnos

Golden Member

Die optie ga ik ook even bekijken maar dan met stm32, ik las echter dat de hid mouse class lang niet door alle muizen geïmplementeerd wordt en veel.muizen hun eigen sausje hebben, het moet redelijk zonder uitzonderingen werken. Het mooist zou zijn de ruwe hid commando via uart of spi door te geven naar een 2e micro die dan usb hid device embleem.

Op 15 november 2021 14:55:26 schreef Stijnos:
Kan iemand iets zinnigs zeggen over benodigde isolatie als ik 8 x de ground van de 8 pcs koppel? Of hoe ik dat goedkoop op een nette manier kan doen zonder dure highspeed opto isolators?

"Gewone" PC's hebben de signal ground meestal aan de aarde hangen.
Als je 8 van zulke PC's op een verdeelsteker hebt zitten kun je de USB-grounds veilig aan elkaar knopen, zeker als de afstanden kort (paar meter) zijn.

Als de PC's verspreid rond een concertpodium staan, of langs een kippenslachtlijn (om maar een zijstraat te noemen) zou ik het niet ongeisoleerd aan elkaar knopen, gegarandeerd dat dat je meer problemen kost dan een 8-tal chinezen om elk op commando het juiste toetsenbord te bedienen ;-) (En je wou een Hardware oplossing, geen Wetware)

High met Henk

Special Member

Gewoon 8 poort kvm kopen en klaar.

Zo duur zijn die niet.

https://www.budget-computers.nl/home/569-compaq-eo1004b-kvm-8-channel-…

[Bericht gewijzigd door High met Henk op 16 november 2021 07:28:55 (52%)]

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???
Stijnos

Golden Member

helaas
1. het beeld loopt via hdmi en daar hebben we al een oplossing voor.
2. Het moet dmv usb of tcp of whatever software matig geschakeld kunnen worden

Ik zie inderdaad wel chinese kastjes voor 1:2 hdmi/usb, maar dan moet ik daar weer aan gaan knutselen om hem software matig te laten schakelen.
Ik zou eerst liever voor een eigen ontwerpje gaan en ik snap dat dat veel duurder is inderdaad, maar dan wel alles mooi op 1 pcb

fripster

Golden Member

Misschien een idee om een aantal microcontrollers te nemen (1 per PC), deze met Arduino Leonardo bootloaders firmwares te flashen en te voorzien van USB connectie naar de PC toe. Dan heb je daarmee de HID USB kant voor de PCs klaar. Beetje bruut maar wel overzichtelijk.

Dan deze allen in een multidrop serial bus hangen (op de Pcb zelf, I2C misschien?), met een busmaster die ook weer op een losse microcontroller zit. Deze 'pakt op' wat de muis en het toetsenbord doen, en stuurt dit naar de respectievelijke controller.

Omschakelen zou dan op het master keyboard kunnen met een toetsencombinatie. Of natuurlijk via een externe RS232 of Ethernet connectie. (Een Ethernet naar serial converter is ook niet duur).

Het kan zelfs met een zooitje Arduino micros die allemaal op een soort carrier PCB worden geprikt (hoef je alleen die maar te engineeren, de rest is van de plank), heb je meteen een oplossing voor de Ethernet naar serial, want die koop je ook van de plank. Niet het goedkoopst, wel snel!

Just my two cents.

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
Stijnos

Golden Member

he Fripster,

Ja dat is wat ik min of meer in gedachte heb, als ik niet met de MAX4899 multiplexers zou werken. En die aanpak geniet eigenlijk ook inderdaad mijn voorkeur.
Ik heb alleen al wel gelezen dat het vaak lastig om 2 hid devices aan een usb host interface van een micro te hangen. Ook de arduino hid device kan maar 1 device emuleren tegelijkertijd dacht ik.
Die supporten geen usb HUB en daarnaast is de usb mouse HID class nogal naar eigen smaak geimplementeerd voor veel muizen schijnbaar, maar dat ga ik eens bekijken.
Ik twijfel of het snel genoeg gaat zijn als ik alle keyboard toetsaanslagen of muis bewegingen via uart naar de clients moet sturen, maar dat gaan we onderzoeken.

Desnoods maak ik mijn ontwerp 2x, 1x voor het toetsenbord en 1x voor de muis

Op 16 november 2021 08:02:51 schreef fripster:
Misschien een idee om een aantal microcontrollers te nemen (1 per PC), deze met Arduino Leonardo bootloaders te flashen en te voorzien van USB connectie naar de PC toe.

Het feit dat die "bootloader" zich als HID device presenteert richting de PC wil niet zeggen dat de PC dat dan als toetsenbord kan gebruiken, of dat die driver zich makkelijk tot toetsenbord laat omprogrammeren.

Dat van HID als bootloader dateert van vroeger toen "men" het lastig vond als je een driver moest installeren op windows. En HID klasse was dan de enige USB device waarvan windows zei: daar heb ik een driver voor en klaar. Met een windows call kon je dan: "stuur dit naar <mijn> HID device" bijvoorbeeld de bootloader besturen en z'n werk laten doen. Tegenwoordig implementeert men een USB-storage-device op devices als MBED.

@stijn: Gewoon die multiplexers inzetten. Des noods even een enkel-stuks als prototype snel in mekaar klussen om te kijken of de PCs het trekken als je live het keyboard en muis d'r uit trekt.

Of even wat in mekaar klussen met het evaluatieboard. MAX4899AEEVKIT+

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Stijnos

Golden Member

die heb ik inmiddels 2 besteld ja. Dat lijkt me momenteel gezien de tijds druk de makkelijkste en veiligste oplossing. Die andere is wel leuker, maarja wellicht een andere keer.

Tja. Als je de STM-code voor "Hoi, ik ben een hub en.... " op de plank zou hebben liggen dan is een microcontroller oplossing waarschijnlijk haalbaar. Maar ik heb dat niet. :-(

En dan moet je nog host spelen naar het toetsenbord en muis. Da's echt een maandje werk om dat softwarematig af te krijgen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
fripster

Golden Member

@rew: ik bedoel de firmware, niet de bootloader. Sorry verkeerde woord gebruikt. Een Leonardo heeft standaard HID aan boord voor muis en toetsenbord. Heb er een eenhandig toetsenbord mee gebouwd, werkt prima.

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
Stijnos

Golden Member

Maar die doet muis EN keyboard hid of enkel keyboard?

Langzame USB kan je eventueel ook gewoon lomp schakelen met relays.

https://www.robot-electronics.co.uk/products/relay-modules/eth8020-20-…

Wordt geleverd inclusief probleemloze software.

fripster

Golden Member

hi Stijnos,

Muis en Keyboard (en tegelijk)

voorbeelden: https://www.sparkfun.com/tutorials/337

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
Stijnos

Golden Member

@fripster
ik zie in dat artikel nog steeds niet dat ze muis en keyboard hid tegelijkertijd doen volgens mij, maar goed.

Ik heb inmiddels de MAX4899AE dev kits binnen en even snel wat mee getest.
Dat lijkt wel te werken, al haf ik even geen rekening gehouden met de 5V.
DAt bordje is echt bedoel om 4 devices aan 1 host te hangen eigenlijk. Duis de vbus van de host gaat naar de 4 device connectors.
Bij mij hanger er dus 4 pc's aan die usb A connectoren en een hub met huis en keyboard aan de usb B connector. Die moet ik dan dus extern voeden met 5V of van 1 van de 8 pc's
Het duurt echter nog wat lang 2 tot 3 sec, voor het toetsenbord operationeel is op de desbetreffende pc na het switchen van de mux. Dat zou eigenlijk sneller moeten, maar ben bang dat ik daar weinig invloed op heb. DAt is puur het gedrag van het OS die de usb handshake steeds weer opnieuw moet doen, omdat die het weer gewoon ziet als een nieuw aangesloten apparaat.

ik wil de andere optie nog kort bekijken, maar ik ben bang dat als ik alle hid commando's van muis en keyboard moet afhandelen en via een uart door moet sturen naar 1 van 8 micro's die een usb hid client vormen, ik meer iritatie krijg van haperende toetsen of langzame response dan dat ik initieel even 3 tellen moet wachten.

Handshake delay is misschien ook afhankelijk van het toetsenbord. Even getest: Mijn Logitech "K120 for business" toetsenbord stuurt binnen 0.5 seconde na inpluggen de eerste toets door. Doorsnee laptop met Windows 10 hier.