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
. 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.
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
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).
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
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. –
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
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