Domanda:
Come fa un dispositivo (dash cam) a riconoscere se è collegato a un computer oa una fonte di alimentazione?
A.S.
2018-04-10 18:13:04 UTC
view on stackexchange narkive permalink

Ho questa dashcam A118, che voglio integrare con un Pi.

Desidero registrare sulla scheda SD montata durante la guida e, una volta a casa entro la portata del WiFi, scaricare i file sulla scheda SD tramite il Pi sulla mia rete domestica.

Questa videocamera, quando è collegata a una fonte da 5 V dell'accendisigari del mio veicolo, inizia subito a registrare.

Quando la collego al mio computer, mi chiede (sullo schermo della dash cam) se operare in modalità "Mass Storage" o "PC Camera".

Questo video mostra come è stato risolto un problema di una telecamera diversa isolando i terminali TX e RX dalla connessione.

Come fa la fotocamera (o un normale dispositivo USB, come anche un telefono) a sapere se è collegata a una semplice fonte di alimentazione oa un computer?

Inoltre, come potrei quindi utilizzare questo fatto per controllare la dashcam, quindi quando fuori dal mio raggio di WiFi, registra come farebbe quando viene fornita solo l'alimentazione e quando è nell'intervallo di Wifi per tornare a "Memoria di massa", quindi Pi può accedere ai file video e trasferirli.

Immagino che i relè funzionerebbero, ma le loro grandi dimensioni non lo rendono pratico. I fotoaccoppiatori rappresenterebbero un'alternativa migliore o ci sono altri suggerimenti che potrei esaminare?

Stavo pensando alla stessa cosa prima mentre tornavo a casa dal lavoro.Penso che potrebbe essere meglio usare solo una dash cam che lo supporti in primo luogo.Anche se dovrebbe essere un convertitore buck con protezione a bassa tensione cablato.
Cinque risposte:
user4574
2018-04-10 19:08:10 UTC
view on stackexchange narkive permalink

La specifica di ricarica della batteria USB viene utilizzata da molti dispositivi USB per determinare il tipo di porta a cui sono collegati.

I principali tipi di porte sono ...

Porta di ricarica dedicata: il caricabatterie indica che si tratta di una porta di ricarica dedicata mettendo in cortocircuito le linee D + e D- insieme.

Porta downstream standard: una porta USB che supporta fino a 500 mA di corrente di carica (per una porta USB 2.0), più dati USB. Il dispositivo enumera sul bus USB per determinare la quantità di corrente che può assorbire. Il campo bMaxPower nel descrittore del dispositivo USB viene utilizzato per richiedere l'alimentazione all'host.

Porta di ricarica a valle: una porta USB che supporta una corrente di ricarica fino a 1,5 A, più dati USB. Il dispositivo determina che è collegato a un CDP attivando prima la linea D. Se la linea D + segue la linea D, il dispositivo sa di essere collegato a una sorta di caricatore. Quindi il dispositivo esegue il rilevamento secondario alternando la linea D +. Se la linea D rimane bassa, il dispositivo sa che le linee non sono in cortocircuito, quindi deve essere collegata a una porta di ricarica a valle.

http://www.usb.org/developers/docs/devclass_docs/batt_charging_1_1.zip

Un convertitore USB per auto standard da 12 V a 5 V sarebbe una porta di ricarica dedicata, giusto?Che potrei facilmente implementare con il suggerimento mux nell'altra risposta collegando le linee D + e D-?
Sì, un adattatore da 12V a 5V è una porta di ricarica dedicata.
@user96037, non necessariamente, alcuni adattatori per auto possono avere la firma di ricarica Apple, che è molto diversa dalla firma DCP cinese.
-1 La descrizione della porta downstream standard è capovolta.Un dispositivo "non enumera", è l'host USB che tenta di enumerare un dispositivo. Il dispositivo non "determina ora quanta corrente può assorbire", è l'host USB che determina se ha abbastanza potenza nel suobudget per CONSENTIRE il funzionamento del dispositivo.Il campo bMaxPower è quello di INFORMARE l'ospite sul potenziale consumo di energia, sebbene si possa interpretare questo meccanismo come "domanda".
@AliChen Ho letto una buona parte delle specifiche USB e penso che la mia descrizione fosse accurata.La mia spiegazione potrebbe non essere stata chiara quando l'hai letto.Quando ho detto che il dispositivo "enumera" intendevo solo che partecipa al processo di enumerazione controllato dall'host.Non ho mai detto che il dispositivo controlla il processo di enumerazione.Inoltre, ho familiarità con il funzionamento dei descrittori dei dispositivi.Sono stato attento a dire che il campo bMaxPower viene utilizzato dal dispositivo per "RICHIEDERE" l'alimentazione all'host.L'host può sempre decidere se vuole consentire a quel dispositivo di averlo.
@user96037 continua a studiare le specifiche.Ho completato questo processo 18 anni fa.Un altro punto da leggere per te: una porta USB standard non supporta "fino a 500 mA", deve supportare "almeno 5 unità di carico", vedere la Sezione 7.2.1 Nota: ALMENO.Ho svalutato la tua risposta perché contiene così tante imprecisioni di questo tipo.
@AliChen ma non è il carico dell'unità in USB 2.0 100mA.Quindi 100 mA x 5 = 500 mA.Non sembra che il dispositivo sia collegato a un hub in cui entrerebbe in gioco l'assorbimento di corrente da parte di altri dispositivi.
nschurando
2018-04-10 18:54:29 UTC
view on stackexchange narkive permalink

Per essere molto concisi, i dispositivi USB utilizzano le linee D + / D- per rilevare se sono collegati o meno a un host USB o a un caricabatterie.

Se volessi che il dispositivo alternasse le due modalità che hai descritto, potrei suggerire di utilizzare un IC mux USB 2: 1 come FSUSB43 cablato a gpios del Raspberry Pi.Qualcosa del genere:

enter image description here

Come ha sottolineato @dwizum nel commento qui sotto, dovresti anche aggiungere un transistor sulla linea VBUS 5V in esecuzione alla dash cam per spegnerla, poiché la commutazione solo D + / D- potrebbe comportare un comportamento indefinito.Per semplificare, spegnere e riaccendere la linea VBUS al dispositivo USB durante il passaggio costringerà il dispositivo a essere pronto per una nuova scoperta.

Da lì potresti facilmente scrivere i tuoi script in esecuzione sul Raspberry Pi cambiando gli stati di quei GPIOS, magari con l'aiuto di WiringPi, in base a diversi eventi come l'elenco di punti di accesso Wi-Fi disponibili.

In questo caso, le connessioni D1 + e D1- potrebbero essere semplicemente lasciate fluttuanti?O sono collegati (a GND per esempio) in un caricatore tradizionale (anche se non mi aspetto che sia così)?
Consiglio vivamente di collegarli alle linee D + / D- del caricatore per auto USB, poiché anche se in realtà non trasferiscono dati, potrebbero comunque essere utilizzati dal caricabatteria per auto per pubblicizzare quanta corrente è in grado di fornirealla dash cam che presumo richieda più dei 500 mA predefiniti per funzionare.Vedere questa [panoramica della revisione 1.2 della ricarica della batteria USB] (https://www.maximintegrated.com/en/app-notes/index.mvp/id/5801).
Solo un commento: cambiare i pin dei dati della dashcam tra le due USB (Pi vs caricatore per auto) senza cambiare anche i pin di alimentazione USB della dashcam potrebbe non funzionare o potrebbe causare un comportamento strano: per quanto ne so, non esiste un protocollo standard per lo scambioPin dati USB a un nuovo host mentre i pin di alimentazione vengono mantenuti attivi.Qualcuno può correggermi se sbaglio.Spegnendolo, cambiando i pin dei dati, quindi riaccendendolo, si avvierà nuovamente l'handshake e gli consentirà di riconoscere l'interruttore.
Grazie per averlo fatto notare.Ho modificato la mia risposta di conseguenza.
Bimpelrekkie
2018-04-10 18:34:06 UTC
view on stackexchange narkive permalink

Come fa la fotocamera (o un normale dispositivo USB, come anche un telefono) a sapere se è collegata a una semplice fonte di alimentazione oa un computer?

USB ha 4 connessioni: 2 per l'alimentazione a 5 V e 2 per i dati.

Un alimentatore generalmente non risponde ai segnali sulle linee dati (ad eccezione dei protocolli di ricarica rapida, ma questo è più un rilevamento del livello rispetto ai dati trasferiti).

Un PC risponde ai segnali sulle linee dati. La fotocamera può richiedere una connessione USB e quindi il PC accetterà tale richiesta (o meno). Alcune informazioni verranno scambiate.

Quindi, in pratica, la fotocamera "parla" tramite le linee dati USB non appena rileva l'alimentazione sull'ingresso USB. Se non c'è risposta, deve essere un alimentatore "stupido". Se c'è una risposta, deve essere un PC (host USB).

Il controllo del comportamento della fotocamera a seconda del WiFi che si trova nel raggio d'azione è qualcosa che potrebbe essere fatto dal software (firmware) in esecuzione all'interno della fotocamera. In generale non puoi e non dovresti cambiarlo. Se sbagli, la fotocamera diventerà inutile (inutilizzabile).

Stavo per iniziare a scrivere la mia risposta quando è saltato fuori questo messaggio!Copriva praticamente tutto quello che stavo per dire!+1!
Quindi il dispositivo è quello che avvia la comunicazione e quando riceve una risposta sa che è un computer?Non ho intenzione di fare scherzi con il firmware, non ho la più pallida idea di come.Quello che voglio fare è controllare la connessione in modo che quando lo stato del Wifi cambia, la telecamera si ripristina, con il TX RX connesso quando è nel raggio d'azione e disconnesso quando fuori dal raggio d'azione.Come potrei farlo?O c'è un motivo per cui questo potrebbe non funzionare?
Quella parte della domanda a mio parere rientra nella categoria * "Voglio qualcosa di complesso ma non ho idea di come farlo e non ho nemmeno esperienza in elettronica". * Il tuo primo passo dovrebbe essere quello di fare in modo che l'RPi attivi un pin IOa seconda che la rete sia presente o meno.Quindi controlla un relè con quel segnale del pin IO e attiva / disattiva l'USB.Consiglierei un relè poiché la commutazione USB con l'elettronica richiederà un chip, è facile rovinare i segnali USB in modo che non funzioni più o danneggi la fotocamera.
La rete e altre parti di un tale sistema sono solo informazioni di base, le persone tendono a chiederle in modo che sappiano meglio di cosa si tratta esattamente.La mia domanda specifica in questo caso era come cambiare la comunicazione tra il Pi e la fotocamera.Come hanno sottolineato le altre risposte, userò un mux per passare tra le linee Pi e D + D in cortocircuito.
JimmyB
2018-04-10 19:39:03 UTC
view on stackexchange narkive permalink

Puoi provare a disabilitare / abilitare le porte USB del Raspberry a seconda che tu voglia o meno che la fotocamera rilevi una connessione dati,

Per disattivare l'alimentazione sulle porte USB (questo interrompe l'alimentazione anche su Ethernet):

echo '1-1' |sudo tee / sys / bus / usb / drivers / usb / unbind

Per riaccendere

echo '1-1' |sudo tee / sys / bus / usb / drivers / usb / bind

( https://www.raspberrypi.org/forums/viewtopic.php?t=172313#p1217773)

IIRC, almeno sui vecchi Pi questo non spegnerebbe le linee di alimentazione delle porte USB ma solo l'alimentazione al chip USB / Ethernet del Pi, disabilitando efficacemente qualsiasi comunicazione e enumerazione su quelle porte USB / Ethernet;un dispositivo collegato a una delle porte disattivate non sarà in grado di rilevare che è collegato a qualcosa di diverso da una fonte di alimentazione USB.

Ale..chenski
2018-04-11 00:19:13 UTC
view on stackexchange narkive permalink

I dispositivi USB (e in particolare le dashcam) sono dispositivi intelligenti.Quando sono collegati all'host USB, l'host esegue l'enumerazione e invia tutte le altre attività dell'interfaccia USB.E un dispositivo USB ne prende nota.

Quando è collegato a un caricatore stupido, non c'è enumerazione / comunicazione USB.Ecco come la dashcam / qualunque cosa conosce la differenza.

Per quanto riguarda il problema reale, perché la dash cam non registra internamente quando è collegata a un host USB funzionante, questa è una questione di progettazione del software della dashcam: è progettata in questo modo.Ovviamente quando si tagliano i cavi D + / D- nella connessione PC-dashcam (non Tx e Rx !!!), la comunicazione USB cessa e la dashcam entra nella modalità standard alimentata dal caricatore.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...