Vai al contenuto
PLC Forum


HUB USB autocostruito


maurog66

Messaggi consigliati

Buongiorno a tutti.

Ho progettato e realizzato un hub usb  che da una porta upstream (da connettore al PC) si ricavano 4 port downstream per altrettanti device. La funzione dell'hub viene realizzata tramite il Microchip USB2504A. Ciascuna porta downstream ha poi la possibilità di essere attivata o disattivata da un segnale digitale 0-24v fornito da un PLC; quest'ultima attivazione/disattivazione viene realizzata tagliando le linee date tramite uno switch Microchip USB3740B.

In generale funziona tutto correttamente con tutti i dispositivi salvo una eccezione: quando ad una porta downstream collego una tastiera industriale che include anche un mouse. In questo caso, alla connessione tastiera e mouse funzionano regolarmente, tuttavia quando disattivo e riattivo il corrispondente port downstream, il sistema operativo Windows 10 non riconosce più le periferiche. Sconnettendo e riconnettendo il cavo USB oppure disalimentando o rialimentando la scheda hub, la periferica torna a funzionare correttamente (viene riconosciuta la tastiera HID e mouse compatibile HID).

La cosa strana è che il problema si manifesta solo con PC con so Windows; viceversa, con PC linux non ho alcun problema.

Ritengo dunque che dal punto di vista hardware non vi siano problemi.

I driver della periferica risultano correttamente aggiornati.

Qualcuno avrebbe qualche idea? Grazie.

Link al commento
Condividi su altri siti


4 minuti fa, maurog66 ha scritto:

Sconnettendo e riconnettendo il cavo USB oppure disalimentando o rialimentando la scheda hub, la periferica torna a funzionare correttamente (viene riconosciuta la tastiera HID e mouse compatibile HID).

 

E abbastanza ovvio, con queste operazioni si reinizializza il driver che, quasi certamente, si è "impallato" quando è stato disconnesso il dispositivo esterno.

 

6 minuti fa, maurog66 ha scritto:

con PC linux non ho alcun problema.

 

La filosofia di base di Linux è più sicura di quella di Win specie nella gestione della memoria.

La causa probabile è proprio una corruzione della memoria dedicata al drive, quando disconnetti il solo dispositivo tastiera+mouse; disconnettendo il cavo dal connettore del PC provochi una reinizializzazione del drive e della memoria dedicata allo stesso.

Link al commento
Condividi su altri siti

@patatino59: probabilmente dovrei interrompere sia la linea dati che l'alimentazione. Se taglio solo l'alimentazione, alcuni dispositivi (come i touch screen) continuano a funzionare.

Link al commento
Condividi su altri siti

17 ore fa, Dumah Brazorf ha scritto:

Perchè non usi i pin PRTPWR (da 1 a 4) dell'USB2504A per spegnere e riaccendere le porte dell'hub?

 

http://ww1.microchip.com/downloads/en/DeviceDoc/00002250A.pdf

In realtà utilizzo i pin PRTPWR connessi ai chip  MIC2026.

Il fatto è che questa linea è sempre attiva indipendentemente dal fatto che la corrispondente port sia occupata o meno; si disabilita solo in caso di sovraccarico.

 

Link al commento
Condividi su altri siti

19 ore fa, Livio Orsini ha scritto:

 

E abbastanza ovvio, con queste operazioni si reinizializza il driver che, quasi certamente, si è "impallato" quando è stato disconnesso il dispositivo esterno.

 

 

La filosofia di base di Linux è più sicura di quella di Win specie nella gestione della memoria.

La causa probabile è proprio una corruzione della memoria dedicata al drive, quando disconnetti il solo dispositivo tastiera+mouse; disconnettendo il cavo dal connettore del PC provochi una reinizializzazione del drive e della memoria dedicata allo stesso.

Grazie sig. Livio per la risposta.

Avevo pure io ipotizzato una simile conclusione, tuttavia ne ho scoperto una nuova: se ad una delle porte lascio sempre inserito un dispositivo sempre attivo (ad esempio una pen drive), anche la tastiera+trackball funziona regolarmente ad ogni attivazione/disattivazione del ciclo corrispondente. Ripeto, questo purchè la porta cui è connessa la pen drive rimane sempre attiva. Viceversa se anche la la port della pen drive è disattivata quando tento di riattivare la porta della tastiera, quest'ultima non funziona.

Link al commento
Condividi su altri siti

Hai ragione, sono pin di output non di input.

Prova ad aggiungere dei transistor per sezionare anche i 5v in uscita.

Modificato: da Dumah Brazorf
Link al commento
Condividi su altri siti

29 minuti fa, Dumah Brazorf ha scritto:

Hai ragione, sono pin di output non di input.

Prova ad aggiungere dei transistor per sezionare anche i 5v in uscita.

Sì già fatto, sezionando i 5v il tutto funziona. Una alternativa sarebbe quella di mettere in "AND" il segnale PRTPWR con il segnale esterno prima di inviarlo al MIC2026

Tuttavia, io sto cercando una soluzione che mi eviti di mettere mano al progetto per evitare le spese aggiuntive dell'attrezzatura per la realizzazione del nuovo PCB. Sono già fuori badget con questo progetto... 

 

Link al commento
Condividi su altri siti

55 minuti fa, Dumah Brazorf ha scritto:

Oppure ad ogni attivazione di una porta triggerare il pin di RESET?

 

Questo comporterebbe una disattivazione temporanea di alcune secondi di tutte le periferiche connesse ai port; anche di quelle che non intendo disattivare. Non è elegante: prova a pensare se durante la scrittura di un file in una pen drive, si manifestasse il reset solo perchè devo disattivare un mouse...

Link al commento
Condividi su altri siti

4 ore fa, maurog66 ha scritto:

Ripeto, questo purchè la porta cui è connessa la pen drive rimane sempre attiva.

 

Anche questo rientra nella normalità perchè la porta usb del PC ha sempre un dispositivo connesso e funzionante, quindi c'è colloquio. E quando la porta rimane connessa solo al multiplex che s'impalla perchè non riceve risposte.

 

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...