PDA

View Full Version : Programma porte USB !


Goldrake_xyz
26-06-2005, 19:01
:D

Ok, ormai lo sanno anche i bambini come si programmano
(a livello assembler) le porte seriali e le porte parallele.
(registri interrupt e cazzatelle varie)

xò per le porte USB nulla ? :wtf:
come si programmano ?
quali sono i registri ?
Ovviamente prevedo che ci sarà un integrato dedicato apposta,
magari incorporato nell' south bridge ;)

Bene, il fatto è che vorrei controllare il flusso dati in ingresso/uscita
del mio computer, attraverso un' altro computer che fà semplicemente
da trasponder, ma che memorizza tutto flusso di byte.

Questo è facile da fare se ho il modem attaccato ad una porta RS232,
ma se la porta è usb ? :confused:

suggerimenti e link sono sempre molto graditi !

Ciao. :)

Fenomeno85
26-06-2005, 20:13
ecco mi interessa dato che non ho mai trovato nulla a riguardo fatto bene :)

~§~ Sempre E Solo Lei ~§~

71104
26-06-2005, 21:07
ancora gente che pretende di programmare direttamente in assembly in modalità protetta :muro:
e ditemi, come fareste voi (in assembler) ad accedere ad una USB se il suo controller non fosse sulla scheda madre ma su una scheda a parte, un hub USB? e se si trattasse invece di un hub USB attaccato ad una USB di un altro hub, attaccato infine ad una USB di una scheda PCI (sparo)?!?
non sarebbe meglio (come al solito) sfruttare il supporto offerto dal sistema operativo e dai suoi drivers ad hoc? :)
qualsiasi ciofega di sistema operativo permette di accedere alle USB e a molti altri tipi di porte con degli pseudofiles.

Fenomeno85
27-06-2005, 15:41
ehm sai com'è certe volte lavorare a basso livello e vedere tutto come funziona ti fa imparare molte + cose. Cmq ovvio mi basterebbe anche lavorare in c++

~§~ Sempre E Solo Lei ~§~

ilsensine
27-06-2005, 17:11
Bè è distante anni luce dal programmare una seriale. Su una seriale si può accedere, al livello elementare, con un poche porte di i/o.
Un host usb è in genere un dispositivo PCI (anche se "cablato" sulla scheda madre), quindi anche solo per cominciare a parlarci occorre programmare un dispositivo pci.
Quindi, occorre conoscere qualcosa sul protocollo usb. A differenza di una seriale, che si comporta essenzialmente come un pipe, un dispositivo usb ha normalmente più "pipe" logici di comunicazione, chiamati endpoint. Come se non bastasse, ogni endpoint può essere di 4 tipi diversi, ovviamente spesso configurabili dal driver.
Tutto questo per scrivere il driver per l'host; poi occorre scrivere il driver per il device.
La documentazione ufficiale la trovate qui:
http://www.usb.org/developers/docs/

Goldrake_xyz
27-06-2005, 18:16
Grazie x il link :)
Come giustamente ha detto ilsensine la porta USB è
qualcosa di diverso, infatti la linea rx/tx è unica, e quindi facile
intuire che ci deve essere un protocollo di comunicazione abbastanza evoluto,
stile rete ethernet, (a collisione di pacchetto penso di no :asd: )
o per lo meno doverbbe esserci un handshake software frà l'unità master
e l'unità slave. :rolleyes:
Bene, me le studierò con calma ;)

x 71104... vatti a fidare del S.O. Win_xyz :D con tutti i suoi bug,
le patch, le vulnerabilità, e adesso anche il virus che si intrufola
nei documenti di word, sembra quasi che lo fanno apposta a
lasciare molte open-backdoors... :sofico:
Fosse x mè ritornerei ad un bel DOS 64-Bit :rolleyes:

Ciao :)

Fenomeno85
27-06-2005, 18:18
Grazie x il link :)
Come giustamente ha detto ilsensine la porta USB è
qualcosa di diverso, infatti la linea rx/tx è unica, e quindi facile
intuire che ci deve essere un protocollo di comunicazione abbastanza evoluto,
stile rete ethernet, (a collisione di pacchetto penso di no :asd: )
o per lo meno doverbbe esserci un handshake software frà l'unità master
e l'unità slave. :rolleyes:
Bene, me le studierò con calma ;)

x 71104... vatti a fidare del S.O. Win_xyz :D con tutti i suoi bug,
le patch, le vulnerabilità, e adesso anche il virus che si intrufola
nei documenti di word, sembra quasi che lo fanno apposta a
lasciare molte open-backdoors... :sofico:
Fosse x mè ritornerei ad un bel DOS 64-Bit :rolleyes:

Ciao :)

esagerato :D

~§~ Sempre E Solo Lei ~§~

Goldrake_xyz
27-06-2005, 18:24
Fosse x mè ritornerei ad un bel DOS 64-Bit :rolleyes:
:ops2:


... ....
A livello hardware c'è sicuramente un controller che gestisce le
porte USB e questo chip sicuramente avrà dei registri e degli interrupt
proprietari ... programmabili.
Uhm, mi sembrava che sul sito AMD ci fosse qualcosa al riguardo...
ok, appena posso ci dò uno sguardo, e se trovo qualcosa posto il
link ;)

ri-ciao :)

Goldrake_xyz
27-06-2005, 18:31
esagerato :D


:asd:
A leggere qesto http://www.hwupgrade.it/news/sicurezza/14878.html
c'è da preoccuparsi !

71104
27-06-2005, 20:54
x 71104... vatti a fidare del S.O. Win_xyz :D con tutti i suoi bug,
le patch, le vulnerabilità, e adesso anche il virus che si intrufola
nei documenti di word, sembra quasi che lo fanno apposta a
lasciare molte open-backdoors... :sofico: ma che c'entra... -___-'''
a parte che imho Windows è più bersagliato degli altri sistemi operativi desktop solo perché tra i tanti è l'unico che gira sul 90% delle macchine desktop (:D), ma a parte questo chi aveva parlato di Windows... e poi che c'entra Word... vuoi trasmettere dati sulle porte USB senza usare i driver? ognuno è padrone del suo masochismo, ma non introdurre discorsi che non c'entrano nulla (la tua uscita non mi sembrava altro che un pretesto per gettare fango sul sistema operativo che probabilmente usi anche tu).

ilsensine
28-06-2005, 09:38
A livello hardware c'è sicuramente un controller che gestisce le
porte USB e questo chip sicuramente avrà dei registri e degli interrupt
proprietari ... programmabili.
I controller fortunatamente possono essere di 2-3 tipi standard e documentati.
I device possono essere un problema; sebbene lo standard usb definisca una serie di "classi" (ad es. audio device, mass-storage device ecc.) con protocollo unificato e documentato per ciascuna classe, esistono diversi produttori che preferiscono fare di testa loro e implementarsi i loro protocolli fatti in casa. Questo è vero specialmente nel mondo dei modem, dove lo "standard" usb per questi dispositivi (acm) viene troppo spesso snobbato (e il protocollo proprietario adottato non è in genere documentato neanche a sparargli).

71104
28-06-2005, 10:39
I controller fortunatamente possono essere di 2-3 tipi standard e documentati.
I device possono essere un problema; sebbene lo standard usb definisca una serie di "classi" (ad es. audio device, mass-storage device ecc.) con protocollo unificato e documentato per ciascuna classe, esistono diversi produttori che preferiscono fare di testa loro e implementarsi i loro protocolli fatti in casa. Questo è vero specialmente nel mondo dei modem, dove lo "standard" usb per questi dispositivi (acm) viene troppo spesso snobbato (e il protocollo proprietario adottato non è in genere documentato neanche a sparargli). e be', mi sembra anche giusto.

Goldrake_xyz
29-06-2005, 21:14
ma che c'entra... -___-'''
Forse non hai letto tutta la discussione, io avevo bisogno di realizzare
un Trasponder USB frà il Computer x internet e un computer di controllo
xchè mi sono rotto le :O:O di tutti i software e adware che si intrufolano
nel mio computer passando allegramente Antivirus & CO.
Ma questa è una questione di contorno.


a parte che imho Windows è più bersagliato degli altri sistemi operativi desktop solo perché tra i tanti è l'unico che gira sul 90% delle macchine desktop (:D), ma a parte questo chi aveva parlato di Windows... e poi che c'entra Word...
Questo non è vero, il più bersagliato di tutti è lo UNIX, e a conferma
di questo vai a vedere quanti virus x macchine unix esistono,
all' incirca il doppio di winzzz.


vuoi trasmettere dati sulle porte USB senza usare i driver? ognuno è padrone del suo masochismo,
Ok, se esistono dei driver x compilatore C che gestiscono le USB
con le apposite funzioni, tanto meglio.
Cmq se non c'è altra via si programmano direttamente i registri
del controller USB. L'ho già fatto con la porta parallela e con le
seriali, e non è difficile nè è da masochisti, bisogna solamente
saperlo fare ! ;) :sborone:


ma non introdurre discorsi che non c'entrano nulla (la tua uscita non mi sembrava altro che un pretesto per gettare fango sul sistema operativo che probabilmente usi anche tu).
Calma amico ! ;) Io voglio "gettare fango" solo su quelli che inseriscono
virus e adware e i pingatori che rompono ogni giorno !
Cercherò in ogni modo di castrargli la "connessione" via hardware con
il mio computer !

Good Luck !

Goldrake_xyz
29-06-2005, 21:21
Ok, x rientrare in tema, mi sembra che molti documenti dell' AMD,
in particolare l' am186cc gestisce porte USB.

I Registri per programmare queste porte sono integrati nel
south_bridge, e quindi penso che bisognerà scaricare la
documentazione di questi, almeno x sapere a quali indirizzi fare
riferimento.
Se poi esistono delle librerie di funzioni x C o C++ che si incaricano
della gestione delle porte USB, questo è ancora meglio.
Infatti mi sembra che AMD propone delle funzioni da aggiungere
nell' header del C o C++ per fare questo.

Tchuss :)

71104
29-06-2005, 22:38
Ok, se esistono dei driver x compilatore C che gestiscono le USB
con le apposite funzioni, tanto meglio. te l'ho detto prima, no? qualsiasi sistema operativo permette di accedere a numerosi tipi di porte esterne tramite degli pseudofiles; è così anche in Windows, solo che non ricordo come si fa.
tempo fa su questo forum si è parlato proprio di un esempio in Visual Basic che apriva le porte USB (ce l'ho ancora, se lo ripesco lo metto in attachment).

71104
29-06-2005, 22:41
eccolo; in particolare guarda il codice della funzione OpenUSBdevice nel file hidinterface.bas; tutto il resto è ReadFile, WriteFile e CloseHandle alla fine. :)

Goldrake_xyz
30-06-2005, 18:28
eccolo; in particolare guarda il codice della funzione OpenUSBdevice nel file hidinterface.bas; tutto il resto è ReadFile, WriteFile e CloseHandle alla fine. :)

OK , ti ringrazio x l'interessamento, :mano:

Il mio problema principale era infatti quello di mandare un byte
o word sulla porta USB xx e riceverlo su un' altra.
(Ovviamente non pretendo di scrivere un programma che gestisce
il protocollo e il flusso dati di un HD esterno !)
Questo anche in previsione di usare i nuovi controller programmabili
via USB, o semplicemente x realizzare una connessione da PC a PC.
(Sicuramente le porte del computer sono di tipo master, cioè danno
anche l'alimentazione a 5Vcc, mentre le porte utente non generano
nessun tipo di tensione..)

Tchuss :)

Goldrake_xyz
30-06-2005, 19:24
:(
non riesco a scaricare dal sito AMD i Datasheet dell' AM186CC
http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2496_8999,00.html

Boh ? :confused:

ilsensine
01-07-2005, 07:45
Il mio problema principale era infatti quello di mandare un byte
o word sulla porta USB xx e riceverlo su un' altra.
Allora il problema è molto più semplice (si fa per dire); non devi gestire il controller, ci pensa il s/o. Sevi semplicemente usare le API userspace per accedere ai dispositivi. L'esempio indicato da 71104 può esserti di aiuto.

Nota che non è comunque così banale come con la seriale; ricorda che hai diversi "canali", di tipo diverso.

SilverXXX
12-07-2005, 14:55
Ragazi, scusate se mi infilo nella discussione, ma sono disperato e ho bisongo di una mano (grossa).
Dovrei costruire una periferica usb ( :muro: e non vi dico per cosa che è meglio...) e non so da dove partire. Dove si trovano dei documenti a riguardo?

Fenomeno85
12-07-2005, 14:57
prova a vedere se qui trovi qualcosa

http://www.usb.org/developers/docs/

~§~ Sempre E Solo Lei ~§~

SilverXXX
13-07-2005, 10:17
Qualcosa ho trovato (non è proprio semplice, ma usando qualche integrato prefatto si dovrebbero risolverre molti problemi), solo che è sorto l'ennesimo problema. A meno che non si usino device standard (che magari danno altri problemi, o non sono adatti per il progetto) si deve scrivere un driver apposito :mc: solo che dal sito microsoft il ddk è diventato a pagamento! :cry:
Immagino non ci siano versioni gratis o qualcosa di sostitutivo, giusto?

ilsensine
13-07-2005, 11:43
Puoi dirci di cosa si tratta? Un modem, scheda audio...?

SilverXXX
13-07-2005, 11:46
Promettette di non ridere......



una fresa cnc controllata via usb

ilsensine
13-07-2005, 11:50
Perché dovremmo ridere?

Non puoi usare una soluzione standard basata su usb serial converter + uart di ricezione + pic per la gestione del protocollo seriale e il controllo per la fresa? Così riduci il tutto a un (più semplice) protocollo seriale canonico...

SilverXXX
13-07-2005, 12:07
Ad essere sincero penso che per essere sia possibile, solo che il progettista non sono io, io devo solo modificare delle elettroniche esistenti e fare il programma (e oltretutto al momento non ho in mano una specifica che sia una :muro: ).
Lasciando stare per il momento il problema dei driver, l'usb poteva venire comodo per avere un protocollo più semplice, dato che le differenti parti del sistema potevano stare su endpoint diversi (per es. una per il movimento del pezzo, una per il controllo del mandrino, uno per la pompa, etc.).

ilsensine
13-07-2005, 12:09
Io ti consiglierei di premere per una soluzione standard. I costi si riducono dall'infinito all'infinitesimo.

SilverXXX
13-07-2005, 12:12
Stasera vedo il progettista folle (mio fratello) e parlo con lui. Solo che non ho neanche idea della velocità richiesta per la comunicazione: se il controllo dei motori deve essere continuamente fatto da pc (per avere una circuiteria di controllo più semplice) basta la velocità della seriale?

ilsensine
13-07-2005, 12:17
Se stavate studiando una soluzione usb, probabilmente di sì.
Il problema potrebbe essere la latenza (ovvero il tempo da quando vuoi inviare il comando al motore a quando il comando viene eseguito), ma se avete vincoli rigidi su questo punto, anche la soluzione usb a massima velocità potrebbe non bastare, a seconda dei tempi di latenza tollerati.

Fenomeno85
13-07-2005, 12:34
con la seriale si gestisce tranquillamente motori passo passo ;) e la gestione è davvero una scemata e non devi crearti nessun driver.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
13-07-2005, 12:35
l'unico tuo problema dopo è scrivere il codice per il pic che gestisce l'input inviato e gestisca l'output

~§~ Sempre E Solo Lei ~§~

Fenomeno85
13-07-2005, 12:36
Se stavate studiando una soluzione usb, probabilmente di sì.
Il problema potrebbe essere la latenza (ovvero il tempo da quando vuoi inviare il comando al motore a quando il comando viene eseguito), ma se avete vincoli rigidi su questo punto, anche la soluzione usb a massima velocità potrebbe non bastare, a seconda dei tempi di latenza tollerati.

va be glielo fai gestire dal pic

~§~ Sempre E Solo Lei ~§~

ilsensine
13-07-2005, 14:18
va be glielo fai gestire dal pic

In questo caso un computer potrebbe diventare superfluo, se metti tutta l'intelligenza nel pic. E' anch'essa una soluzione.

Fenomeno85
13-07-2005, 14:20
In questo caso un computer potrebbe diventare superfluo, se metti tutta l'intelligenza nel pic. E' anch'essa una soluzione.

no dipende se devi fare qualche calcolo e da una elaborazione di dati invii i dati al pic

~§~ Sempre E Solo Lei ~§~

ilsensine
13-07-2005, 14:24
no dipende se devi fare qualche calcolo e da una elaborazione di dati invii i dati al pic

Per "latenza" intendevo proprio questo caso; il pic qui entra poco nel computo della latenza (o comunque è quantificabile con una certa precisione).

SilverXXX
13-07-2005, 16:10
In teoria i calcoli di base (prendi il disegno in dxf, poi calcola tutti gli spostamenti (e le velocità necessarie) + operazioni varie come liquido, cambio utensile, etc,) li deve fare il pc. Poi i dati vanno inviati alla ciruiteria di controllo che li deve eseguire. Soprattutto tra i motori che si occupano dello spostamento sugli assi X e Y non ci devono essere problemi di temporizzazione, dato che non sempre si ha che fare con linee dritte (ovviamente). Stasera mi dovrebbe passare anche alcune circuiterie di controllo parallele per sapere come muoversi, ci guardo per bene poi magari le posto.

OT
Tra l'altro vuole fare un sistema di cambio utensili molto figo (me lo ha spiegato in breve), che complicherà (seconod me) un casino la progettazione meccanica, ma tanto quella la fa lui :p
/OT