Implementazione microchip firmware cdc ed Easyu: velocità di trasmissione scarsa

  • Di_Fi
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
8 Anni 3 Settimane fa - 8 Anni 3 Settimane fa #1 da Di_Fi
Salve a tutti

Da poco tempo sono riuscito a compilare e caricare sul modulo easy usb di Mauro il firmware che implementa il protocollo usb cdc. E tutto funziona alla grande. Certamente non grazie a me. Grazie al visual studio ho la possibilità di modificare la parte host della comunicazione ossia la visualizzazione dei dati trasmessi. Ma qui viene la delusione. Ho fatto un test sulla velocità di trasmissione inviando in un loop senza ritardo la frase ciao mondo. E, sorpresa,la velocità di trasmissione è di 12000 bit al secondo circa. Ho settato la velocità parte host a 115200 bit al secondo e lo stesso ho fatto nella parte firmware. La velocità è inchiodata. Quindi mi chiedo: a cosa serve utilizzare l'usb 2.0 se poi la velocità è quella di una seriale scarsa? Sono io che ignoro qualcosa? Probabile. Qualcuno mi indirizzi. Ho letto un centinaio di pagine di usb complete ma credo che qualcuno che ci lavora potrebbe chiarirmi qualche dubbio.


Grazie a tutti

Davide
Ultima Modifica 8 Anni 3 Settimane fa da Di_Fi. Motivo: Titolo errato

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
8 Anni 2 Settimane fa #2 da Mauro Laurenti
Salve Davide,

...ignori qualcosa! :)

Premetto che non so come tu misuri la velocità e i bit trasmessi.

La classe CDC fa uso della modalità di trasmissione USB di tipo Bulk.
questa è la più veloce ma può essere anche la più lenta visto che non ti garantisce una trasmissione dati costante.
Il tutto viene a dipendere dal bus. Se sullo stesso hub hai più periferiche, il controller divide le risorse per ogni periferica.

Detto questo, quando imposti per esempio 115200 bits/s non significa che ne hai altrettanti ogni secondo ma solo che i byte trasmessi avranno quella frequenza.
Per cui potresti avere due soli byte inviati a 115200 bits/s come anche di più.
Questo significa che al variare del bit rate sicuro cambia l'ampiezza del bit ma non necessariamente la mole dei dati trasmessi.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Di_Fi
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
8 Anni 2 Settimane fa #3 da Di_Fi
Ti ringrazio per la risposta

La EasyUsb è collegata sull'host in modo diretto, niente Hub. Potrebbe essere un problema di misura visto che sul mio portatile diventa 48000 bit/sec con lo stesso firmware.

La porzione di codice che misura la velocità è questa (USB_serial_terminal microchip).
Code:
//Periodically update the RX data rate label if(COMPortOpen == true) { if((tickIndex % 50) == 0) { newTickTime = GetTickCount64(); secondsElapsed = (double)(newTickTime - oldTickTime) * (double)0.001; if(secondsElapsed == 0) { secondsElapsed = 0.0001; } RXDataRate = (double)recentRXDataBytes / secondsElapsed; rx_rate_label->Text = "RX Rate: " + RXDataRate.ToString("N0") + " b/sec"; rxRateStatusStrip->Text = rx_rate_label->Text; oldTickTime = newTickTime; recentRXDataBytes = 0; }

Devo solo approfondire. Certo con microcontrollori ad 8 bit l'alaborazione dei dati è lenta, ma a me interesserebbe solo girare dati acquisiti tramite l'ADC, mostrarli a video e poterli salvare. Come ho letto in vari post non si dovrebbero superare 128 KB/s che per me è una signora velocià. Ti ringrazio per la risposta continuerò a studiare. Mi raccomando non smettere di pubblicare i tuoi progetti. Appena possibile sosterrò con altri acquisti. Saluti

Davide

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
8 Anni 2 Settimane fa #4 da Mauro Laurenti
L'host del PC ha un Hub (root Hub), per cui dividi comunque le tue risorse con il resto delle periferiche USB collegate.
Mouse, tastiera, webcam...potresti avere anche due root hub ma non sono sicuro.

Il codice per la misura della velocità è piuttosto complesso sebbene non veda funzioni bloccanti i calcoli float sono lenti.

128Khz...la funzione sotto non credo vada tanto veloce.
Controlla il numero di istruzioni necessarie.
...le istruzioni sotto sono di suo già un cono di bottiglia.

Il prossimo articolo è proprio sul protocollo USB.
E' finito ma devo fare le immagini e...questo è il mio cono di bottiglia.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Di_Fi
  • Autore della discussione
  • Nuovo Utente
  • Nuovo Utente
Di più
8 Anni 2 Settimane fa #5 da Di_Fi
Non vedo l'ora di leggerlo.

In realtà mi sono accorto solo ora che il codice stampa la velocità in bit/s ma in realtà calcola tale velocità ogni 50 tick del timer in Byte/s e a questo punto già si avvicina (almeno sul mio portatile) a qualcosa di accettabile. Non ci avevo fatto caso.

Ti ringrazio per le risposte

Davide

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.