Question

Je suis mise en œuvre USB sur un PIC 18F2550 en utilisant Interface HID générique . Je l'ai mis en place le profil HID configuation d'avoir un seul message de 64 octets pour les entrées et les sorties.

Maintenant, il travaille essentiellement. Le dispositif enregistre OK avec Windows. Je peux le trouver dans mon programme sur le PC et peut envoyer et recevoir des données. Le problème est que -. Les messages du PC au PIC sont tronqués à la taille de la mémoire tampon de point final ep0

Avant que je débogage trop loin, je veux essayer de clarifier ma compréhension des protocoles USB ici et vérifier que je l'ai eu droit.

Supposons que la mémoire tampon d'entrée de EP0 est de 8 octets. Je crois comprendre que la fin PC envoie un paquet de commande qui est de 8 octets. Là-dedans est la longueur en octets des données à suivre. Et puis il envoie une séquence de 8 paquets de données d'octet et la fin PIC doit reconnaître chacun.

Je crois comprendre que la fin de PC sait comment la taille de chaque paquet peut être en regardant dans le champ Taille maximale de paquet dans le descripteur de dispositif et diviser le message en conséquence en plusieurs paquets de données.

Avant d'aller chercher plus d'heures au code, quelqu'un peut-il confirmer que c'est fondamentalement correcte? Que si la taille de la mémoire tampon de 8 octets est EP0 alors le PC doit savoir ce en raison du champ de configuration je l'ai mentionné ci-dessus et d'envoyer plusieurs paquets de données?

Si je fais mon mémoire tampon de réception sur les PIC 64 octets puis-je obtenir 64 octets du message qui est suffisant pour mes besoins, mais je ne aime pas comprendre pourquoi il ne fonctionne pas avec de petits tampons, et un jour Je vais probablement besoin d'eux de toute façon.

Des conseils ou des informations seraient les bienvenues.

Était-ce utile?

La solution

Il y a quelque chose appelé Endpoint Descriptor, qui, entre autres, définit la wMaxPacketSize -. Qui est ce que les pilotes d'interface de contrôleur hôte utilisent pour diviser un grand transfert USB en petits paquets

Ceci est tout à fait différente de la taille du tampon ep0 - qui est cependant toujours nécessaire d'être plus grand que le wMaxPacketSize. Je suppose (essayer de poster votre usb_config.h et usb_descriptors.c, si vous utilisez Microchip pile USB), que vous essayez d'utiliser soit 8 octets de long avec 64 EP 0 octets de long wMaxPacketSize, qui tronque le transfert.

En outre, sachez que USB 1.1 basse vitesse, le wMaxPacketSize ne peut pas dépasser 8 et USB 1.1 pleine vitesse, il ne peut pas dépasser 64.

0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
HID_EP | _EP_IN,            //EndpointAddress
_INTERRUPT,                       //Attributes
DESC_CONFIG_WORD(9),        //size
0x01,                        //Interval

/* Endpoint Descriptor */
0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
HID_EP | _EP_OUT,            //EndpointAddress
_INTERRUPT,                       //Attributes
DESC_CONFIG_WORD(9),        //size
0x01                        //Interval
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top