2010-08-17 6 views
3

J'ai été chargé d'écrire un pilote USB pour notre logiciel embarqué afin d'envoyer des données brutes à l'hôte. Cela sera utilisé pour envoyer des données de journalisation à l'hôte. Nous utilisons iMX31 litekit pour le développement. D'après les documents que j'ai lus sur le port USB, je crois comprendre que l'appareil embarqué sera en mode appareil uniquement. De plus, il ne communiquera qu'avec la machine hôte.Programmation USB dans un système embarqué pour envoyer des données à l'hôte pour l'impression

Alors quelqu'un peut-il me guider ici? Tout article, référence ou code est le bienvenu.

+0

Quel système d'exploitation hôte ciblez-vous? – cmcginty

+0

Windows hôte et cible ThreadX – binW

Répondre

1

Certaines choses à considérer:

Est-ce un dispositif à haut débit comme un appareil photo ou un enregistreur de données, ou un dispositif de faible bande passante?

Pour une faible bande passante, je considérerais fortement que votre appareil agisse comme un périphérique USB HID class. C'est la classe d'appareils qui prend en charge les claviers, les souris, les manettes de jeu, les manettes de jeu, etc. Il est relativement facile d'envoyer des données à presque n'importe quelle application, et il n'est généralement pas nécessaire d'écrire un pilote de périphérique personnalisé côté hôte. Cette dernière fonctionnalité à elle seule vaut souvent le coût de contorsionner légèrement vos données dans la forme assumée par la classe HID. Tous les systèmes d'exploitation de bureau qui utilisent l'USB peuvent utiliser des périphériques HID, ce qui vous permet d'obtenir une compatibilité étendue assez facilement.

Pour une bande passante élevée, vous seriez toujours mieux servi si votre appareil correspond à l'une des classes d'appareils bien établies, où un pilote de périphérique de stockage sur l'extrémité hôte du câble peut être utilisé. Une approche qui fonctionne souvent consiste à utiliser le Mass Storage class et à émuler un lecteur de disque contenant un fichier. Ensuite, votre appareil monte simplement sur l'hôte comme s'il s'agissait d'un disque, et vous communiquez en lisant et en écrivant dans un (ou quelques) fichier (s).

Je m'attendrais à ce qu'il y ait une bonne quantité d'exemples de code pour n'importe quel chipset de périphérique USB sérieux qui implémente HID ou Mass Storage.

Si vous devez vraiment vous aventurer dans un territoire de périphérique entièrement personnalisé, vous devrez créer des pilotes de périphérique pour chaque plate-forme hôte. La bibliothèque open source libusb peut être d'une certaine aide, si sa licence est compatible avec votre projet. Il existe également des moyens dans les nouvelles versions de Windows pour développer des pilotes USB qui s'exécutent en mode utilisateur en utilisant le User Mode Driver Framework qui ont beaucoup des mêmes avantages de libusb, mais ne sont pas portables sur la plate-forme Windows. Le dernier périphérique personnalisé sur lequel j'ai travaillé était basé sur un périphérique Cypress, et nous avons pu expédier leur pilote et une DLL associée pour faciliter la création de notre code d'application. Je ne sais pas s'il y a un équivalent disponible pour votre appareil.

Pour un très bon aperçu, je recommande le USB FAQ, et la dernière édition du livre de Jan, USB Complete.

Questions connexes