2017-05-31 4 views
1

J'utilise stm32L151 pour communiquer avec le PC par USB CDC. J'ai utilisé les bibliothèques stm32 HAL pour créer mon projet. J'ai trouvé que l'usb envoie des données par intervalles de 1 ms et à chaque fois, 64 octets sont envoyés. Donc, est la vitesse maximale de l'USB CDC est 64kbyte/s? et cette vitesse est très inférieure à la pleine vitesse USB 12Mbit/seconde. Comment je peux atteindre cette vitesse? ou au moins une fraction de cette vitesse? Merciquelle est la vitesse maximale du STM32 USB CDC?

Répondre

0

. Non Si votre code est "assez rapide", la vitesse CDC maximale est d'environ 1MByte/sec. Cela peut nécessiter une grande FIFO (> 1 Ko) du côté de l'appareil. Oh, et le côté PC doit être capable de lire les données assez rapidement, par ex. avec de gros tampons.

La limite de 64 Ko/s applique pour HID USB qui utilise points de terminaison d'interruption. L'interface USB CDC utilise des points de terminaison en masse plus rapides.

+0

Merci @Turbo J. Comme indiqué précédemment, j'utilise la bibliothèque HAL, j'envoie des données au PC en utilisant la fonction CDC_Transmit_FS(). Comment dois-je utiliser cette fonction pour atteindre 1 Mo/s? J'ai un grand tampon avec la taille de 2Kbyte, cependant la taille de point final est 64 byte. J'ai vu dans l'oscilloscope que l'usb envoie des données toutes les 1 ms. et si la fonction CDC utilise le point de terminaison pour envoyer des données, il peut envoyer 64 octets toutes les 1ms? je pense mal? une question de plus: Y at-il un logiciel gratuit pour vérifier le débit en bauds des données entrantes? merci – Mohammad

0
  1. cadre USB FS est 1ms donc si vous mettez 64 octets dans la mémoire tampon (en utilisant la fonction HAL) - il envoie ces 64 octets dans la trame suivante. Et pour n'envoyer plus de données jusqu'à une autre trame de 1ms

  2. Comment augmenter cette vitesse -> agréger vos données en plus gros morceaux et envoyer plus de données dans une seule transaction (jusqu'à 8kB en utilisant les bibliothèques HAL).

+0

Merci beaucoup pour votre réponse utile. Donc, nous pouvons dire que la vitesse maximale en utilisant les bibliothèques HAL sera 8kB * 64 = 512kByte/seconde ou 4096Mbit/seconde? est-ce vrai? comment nous pouvons atteindre près de la pleine vitesse tels que 8 Mbit/s ou 1 Mo/s? Merci – Mohammad

+0

Vous avez besoin d'une bibliothèque USB un peu meilleure que celle fournie par STM. Rappelez-vous que Windows lui-même limitera cette vitesse car l'implémentation intégrée du VCOM n'est pas très bonne. –

+0

Merci encore @ PeterJ. Je pourrais atteindre la vitesse maximale de 500kByte/seconde en utilisant les bibliothèques HAL. Y at-il un truc pour augmenter cette vitesse en utilisant les bibliothèques HAL? Ou pouvez-vous me présenter une meilleure bibliothèque USB que les bibliothèques HAL, s'il vous plaît? – Mohammad