USB pour dispositifs embarqués - conception d'un pilote de périphérique / pile de protocoles

StackOverflow https://stackoverflow.com/questions/517206

  •  21-08-2019
  •  | 
  •  

Question

I ai été chargé d'écrire un pilote de périphérique pour un dispositif embarqué qui communique avec le microcontrôleur par l'intermédiaire de l'interface SPI. Finalement, l'interface USB sera utilisée pour télécharger le code externe et utilisé à jour pendant la phase de vérification.

Ma question est, ce que quelqu'un sait d'une bonne conception de référence ou de la documentation ou tutoriel en ligne qui couvre la mise en œuvre / conception du pilote pile de protocole USB / périphérique dans un système embarqué? Je suis débutant et la lecture à travers la spécification USB v2.0 650 pages est un peu intimidant pour le moment.

Tout comme un FYI, le micro-contrôleur que j'utilise est Freescale 9S12.

Mark

D'après les commentaires de goldenmean (de) -AD Je voulais ajouter les informations suivantes:

1) Le dispositif embarqué utilise un cadre personnalisé et ne fait aucune utilisation d'un COTS ou RTOS.

2) Le dispositif utilisera des interruptions pour indiquer des données est prêt à être récupéré à partir du périphérique.

3) J'ai lu quelques-uns des documents au sujet de Linux, mais comme je ne suis pas du tout familier avec Linux, il est pas très utile au moment (bien que j'espère que ce sera très rapidement).

4) L'approche de la conception, pour le moment au moins, pour écrire un pilote de périphérique pour le périphérique USB puis une couche de protocole USB (I / O) résiderait au-dessus du pilote de périphérique pour interpréter les données. Je suppose que ce serait la meilleure approche, mais je peux me tromper.

Edit - Un an plus tard

Je voulais juste partager quelques éléments avant qu'ils ne disparaissent de mon esprit au cas où je ne travaille jamais sur un périphérique USB. Je suis tombé sur quelques obstacles lors de l'élaboration du code et de le faire et en cours d'exécution pour la première.

Le premier problème je suis tombé était que lorsque le périphérique USB est connecté à l'hôte (Windows dans mon cas) a été l'hôte émet une demande de réinitialisation. Le périphérique USB se réinitialiser et effacer l'interruption des drapeaux permettent. Je ne l'ai pas lu assez la littérature pour savoir ce qui se passait, donc je ne recevais la demande de mise en place d'interruption. Il m'a fallu un certain temps pour comprendre.

Le deuxième problème je suis tombé n'a pas été la manipulation du Set-Up Demande de Set_Configuration correctement. Je menais, mais je ne traite pas correctement la demande en ce que le périphérique USB n'a pas été d'envoyer un accusé de réception lorsque cette configuration demande est arrivée. J'ai finalement trouvé cela en utilisant un analyseur de protocole USB matériel.

Il y avait d'autres questions que je suis tombé, mais ce sont les deux plus grands ceux qui m'a pris un certain temps pour comprendre. L'autre question que je devais vous soucier est grand-endian et little-endian, Freescale 9S12 vs format de données USB (Intel), respectivement.

J'ai fini par construire le pilote de périphérique USB similaire aux pilotes de périphériques UART je l'avais fait dans le passé. J'ai posté le code à ce à l'adresse suivante.

http://lordhog.wordpress.com/2010/12/13 / USB-drive

J'ai tendance à utiliser des structures beaucoup, afin que les gens ne peuvent pas comme eux, car ils ne sont pas aussi portail que l'utilisation #defines (par exemple, MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20), mais je les aime, car il rend le code plus lisible pour moi. Si quelqu'un a des questions à son sujet s'il vous plaît ne hésitez pas à envoyer un courriel et je peux essayer de donner un aperçu à elle. Le livre « USB Complete: Guide du développeur » a été utile, aussi longtemps que vous saviez ce que les zones de se concentrer sur. Ce fut une application simple et seulement utilisé USB à faible vitesse.

Était-ce utile?

La solution

Je l'ai utilisé une édition antérieure de USB complète par Jan Axelson . En effet, très complet.

De la revue éditoriale:

  

Maintenant dans sa quatrième édition, le guide de ce développeur à l'interface Serial Bus (USB) Universal couvre tous les aspects du développement de projets, tels que la conception de matériel, le firmware de l'appareil et le logiciel d'application hôte.

Autres conseils

Bien que l'écriture d'un pilote de périphérique pour toute interface (USB, un port parallèle, etc ...), le code nécessaire pour développer dépendrait de savoir s'il y a un système d'exploitation (OS), RTOS exécuté sur le contrôleur de processeur / Micro.   par exemple. si thats va courir dire WinCE - Il aura son propre développement du pilote Kit, et les étapes à suivre dans le développement du pilote de périphérique. Idem pour tout autre système d'exploitation comme Linux, symbian.

Si ça va être un code de firmware simple (non OS) qui va contrôler le processeur / microcontrôleur, il est une situation tout à fait différente. Donc, basée soit sur la situation ci-dessus sont en u, il faut lire et comprendre: -

1) La Spécification du matériel du processeur / carte micro-contrôleur de développement. - enregistrer des fichiers, des ports, la mise en page de la mémoire, etc

.

2). Spécification USB

3.) Couple de pointeurs i trouvé rapidement. Google shud être ur ami! http://www.lrr.in.tum.de/Par/ arc / usb / usbdoc / - pilote de périphérique USB Linux

http://www.microsoft.com/technet/archive/ WCE / support / usbce.mspx

-AD

Je suis curieux, pourquoi avez-vous choisi le 9S12? Je l'ai utilisé à un emploi précédent, et n'a pas été satisfait.

  • Il avait le soutien gcc moche nous avons donc utilisé Metrowerks
    • qui peut avoir été acceptable pour C, mais souvent généré bogué C ++
    • avait un IDE moche avec des fichiers de projet binaires!
  • Le 9S12 a également été lente, beaucoup d'instructions exécutées en 5 cycles.
  • Pas très économe en énergie, que ce soit.
  • pas de décalage circulaire, effectué les opérations qui sont communes dans le code embarqué lent
  • pas que pas cher.

A propos de la seule chose que je n'aime plus est un 8051. J'utilise un ARM CortexM3 à mon emploi actuel, il vaut mieux qu'un 9S12 dans tous les sens (horloge plus rapide, plus de travail par cycle d'horloge, moins de consommation d'énergie, moins cher, un bon soutien gcc, contre 32 bits 16 bits).

Je ne sais pas quel matériel vous avez l'intention d'utiliser, mais en supposant que est flexible, STMicro propose une gamme de microcontrôleurs avec support USB / SPI et une bibliothèque de code C qui peut être utilisé avec leurs pièces. -. Je l'ai utilisé leurs années avec un grand succès de la série ARM7 micros

Voici un excellent site maintenu par Jonathan Valvano, professeur à l'Université du Texas. Il enseigne quatre cours là-bas (trois de premier cycle, un deuxième cycle), tous sont à utiliser un microcontrôleur 9S12. Son site contient toutes les notes de cours, manuels de laboratoire, et plus important encore, les fichiers démarrage, qu'il utilise pour toutes ses classes.

Le site ressemble à c'est des années 90, mais il suffit de creuser un peu et vous devriez trouver tout ce dont vous avez besoin.

users.ece.utexas.edu/~valvano/

Pensez à AVR pour votre prochain projet MCU à cause de cela est merveilleux APUL et V-USB bibliothèques.

Je travaille sur un projet en utilisant le V71 Atmel. Le processeur est très puissant et parmi beaucoup de la connectivité haut de gamme offerte sur puce est un moteur USB qui va faire les modes de l'appareil ou de l'hôte pour 480 Mhz ou 48Mhz (non USB 3.0). Les outils sont gratuits et sont livrés avec un certain nombre d'exemples hôte et périphérique USB projets avec tout le code de la pile USB là. Il prend en charge 10 points finaux et tous les transferts sont effectués via DMA afin que vous avez la plupart des chevaux de processeur disponible pour d'autres tâches. La pile USB Atmel fonctionne sans avoir besoin d'un RTOS

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top