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

7 Anni 4 Mesi fa - 7 Anni 4 Mesi 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 7 Anni 4 Mesi fa da Di_Fi. Motivo: Titolo errato

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

  • Di_Fi
  • New Member
  • New Member
Di più
7 Anni 4 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
7 Anni 4 Mesi fa #3 da Di_Fi

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • Di_Fi
  • New Member
  • New Member
Di più
7 Anni 4 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
7 Anni 4 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.

  • Di_Fi
  • New Member
  • New Member
Di più
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.

Login