11
votes

Dois-je écrire mon propre pilote USB côté hôte pour un périphérique CDC

Cela peut ne pas être considéré comme une programmation directement liée, mais je suis une perte de savoir où demander d'autre à demander. J'ai essayé de regarder une variété de sites Web, mais jusqu'à présent, Google n'a pas été mon ami.

J'ai du mal à trouver si j'ai besoin d'écrire mon propre pilote de périphérique pour les différentes plates-formes Windows / Linux / Mac que l'appareil que je développe peut être connecté ou si la fonctionnalité est fournie par les pilotes standard. < / p>

Mon appareil est un CDC USB (Dispositif de communication) qui apparaît comme un port: port. Il comprend également un chargeur de batterie qui, une fois que le dispositif a été énuméré, nécessite le courant d'alimentation complet de 5 unités (500 mA) pouvant être dessiné à partir du connecteur USB. Mon problème est que si le pilote USB de l'hôte décide qu'il ne peut pas délivrer le courant d'approvisionnement complet, il ne devrait pas échouer pour énumérer l'appareil.

Si, en tant que relèvement, je fournis un deuxième ensemble de configuration permettant uniquement à l'appareil de dessiner une charge d'unité à partir du connecteur d'interface les pilotes standard énumètent le périphérique à l'aide de cette configuration.


2 commentaires

Je crois que vous devez d'abord examiner la spécification USB pour voir si ces choses sont autorisées. Si la spécification le permet, les navigateurs standard l'appuieront probablement probablement.


Dans la spécification USB 2.0, le descripteur de périphérique permet de spécifier un certain nombre de configurations, chacune pouvant spécifier qu'il nécessite une certaine quantité d'énergie à partir de l'interface. Je suppose alors que je présume que le conducteur de choisir entre ces différentes configurations.


5 Réponses :


1
votes

Je ne suis pas sûr de la question de la puissance, mais il y a des pilotes de CDC plante (ou je pense qu'il y a) afin que vous puissiez en utiliser un. Pour la question de puissance, la solution avec de nombreuses configurations est probablement bonne, je n'ai jamais rencontré cela dans le travail (j'ai un analyseur USB) mais à la maison, parfois lorsque j'ai 3 périphériques différents nécessitant un pouvoir d'utilisation de l'USB, j'ai eu l'échec de l'USB. Je suppose que cela utilise le choix du système d'exploitation s'il ne peut pas alimenter le nouveau périphérique, il a coupé le départ (choix sensible car il ne peut pas l'alimenter). Voici mes gars plutôt à vérifier USB Standart.


0 commentaires

1
votes

Si votre appareil indique un identifiant de périphérique que l'OS hôte prend en charge déjà, Ensuite, ils n'auront pas besoin d'un conducteur.

Vous devrez peut-être imiter une UART USB existante. Les feuilles de données sont facilement disponibles. (Mais je pense que vous le saviez déjà.)

Je ne suis pas sûr que l'hôte OS honorera votre idée multi-configuration.

Mais donnez-lui un punt afin que nous sachions tous!


2 commentaires

Notez qu'un ID de périphérique est composé d'un identifiant de fournisseur et d'un identifiant de produit, et le propriétaire de cet identifiant de fournisseur peut ne pas apprécier votre détournement de leur identifiant. Pour les projets personnels qui ne sont pas un problème bien sûr, mais ne vendez pas de tels appareils.


Bien sûr, obtenir votre propre identifiant n'est pas si cher, et nous voudrons tous acheter votre merveilleux appareil, non?



2
votes

Vous êtes correct sur la question du conducteur. Lorsque l'appareil est branché et passe par le processus de dénombrement, il est nécessaire de rester <100mA. L'hôte interrogera et déterminera la ou les configurations. S'il y a plus d'un qui prend en charge différents niveaux de puissance, le pilote devra décider de choisir la configuration appropriée. S'il n'y a que de la puissance élevée et qu'il n'est pas disponible, il ne énumérera pas l'appareil. En général, le pilote standard effectuant CDC ne serait pas au courant des différentes configurations de niveau de périphérique qui serait possible et nécessiterait ainsi un certain degré de personnalisation pour les gérer.


0 commentaires

7
votes

Vous devez écrire un fichier .inf pour Windows qui tire votre appareil Vid et PID avec le système USBSER.SYS. Le mien ressemble à ceci (remplacez votre COMPOMPANY si nécessaire, placez votre Vid et PID (en hex), puis modifiez la ligne de conducteur à une date et de la version que vous souhaitez que vous souhaitez): XXX

Notez que cela fonctionne avec 32 bits oss seulement. Cela fonctionne également avec Vista bien que l'en-tête de fichier ne le dis pas!

Sachez que certaines versions d'USBSER.SYS ont des problèmes significatifs, notamment le bluescreening, par exemple lors du transfert de paquets en multiples exact de 64 octets. Si vous utilisez XP SP2 ou précédent, installez Hotfix KB943198. XP SP3 et Vista vont bien.

Pour le Mac, vous devez simplement signaler correctement votre classe de périphérique et la numérisation du pilote récupère les pilotes corrects. (Windows ignore la classe de périphérique, c'est pourquoi vous devez fournir le fichier .inf).

Edit: Désolé, j'aurais dû être plus clair. Cela ne manquera pas d'énumérer s'il ne peut pas dessiner la charge complète - je ne suis pas sûr que ce soit possible.


10 commentaires

J'essaie d'installer ce pilote automatiquement par opposition à l'utilisateur ayant besoin d'aller au gestionnaire de périphériques (bien que cela fonctionne). J'ai essayé simplement d'utiliser l'installation par un clic droit et de l'utilisation de la méthode décrite à Stackoverflow.com/Questtions/677686/... . Dans les deux cas lorsque je branche le périphérique, il apporte le nouvel assistant de matériel et, bien qu'il apparaisse sous des ports dans Device Manager, il n'ya aucun pilote associé à celui-ci. Quelques détails supplémentaires:


... J'essaie sur Windows XP et à l'aide d'une puce de cyprès. Cyprès fournit un fichier .inf pour cela ( cyprès.com/?RID=40248 ) que Est tout à fait différent, par exemple, des copyfiles sont définis sur DriverCopyFiles, non fakemodembilcopyfileSection. Toute suggestion?


Nous avons utilisé USBSER.SYSS comme le pilote de plusieurs produits produits par ma société et je n'ai jamais trouvé de moyen simple d'éviter le "nouvel assistant de matériel trouvé" dans Windows XP. Si vous le faites, s'il vous plaît laissez-moi savoir. La bonne nouvelle est que, à l'aide du même fichier INF, les pilotes peuvent être installés automatiquement sans assistant dans Windows Vista et Windows 7 si l'appareil est branché après l'installation du fichier INF.


Pouvez-vous clarifier "Windows ignore la classe d'appareils, pourquoi vous devez fournir le fichier .inf"? N'est-il pas suffisant de signaler un VID / PID que Windows pourrait utiliser pour correspondre à un périphérique UPBSer.sys?


@Edwin Evans: Oui, et c'est exactement ce que le fichier .inf est pour correspondre à votre Vid / PID avec USBSER.SYS.


Merci. Je suis toujours confondu cependant. Certains appareils fonctionnent juste en les branlant. Comment est-ce possible?


@Edwin Evans: périphériques série USB? Je n'ai pas vu Windows capable d'installer automatiquement ceux-ci. Certains autres types d'appareils ont les fichiers INF déjà installés avec Windows par défaut, cependant.


@Vicky ah, maintenant je vois. Merci!


@Vicky. En fait, je suis toujours confondu sur un point. Même si un périphérique fonctionne automatiquement avec un pilote générique, il aura toujours un Vid / PID unique? Alors, comment Windows correspond-il avec le fichier Generic Driver Inc.?


@Edwin Evans: Pour quelque chose comme un dispositif de stockage de masse (clé de mémoire), probablement en utilisant la classe d'appareils. Mais pour les périphériques série USB, il n'utilise pas la classe d'appareils. À une juge Guess Mme réalisa, il serait trop gênant si vous deviez installer des pilotes pour chaque bâton de mémoire que vous avez jamais mis, mais les dispositifs en série ne sont pas aussi courants dans les terres de l'utilisateur.



1
votes

Si votre appareil connecte en tant que périphérique USB CDC-ACM sur Windows Desktop Host, le Windows Desktop fournit déjà le pilote USBSER.SYS. Mais il y a quelques problèmes dans Windows Vista. Vous avez juste besoin d'INF pour installer l'USBSER.SYS sur le bureau. Pour Wince, vous n'avez pas le conducteur et vous devez vous en trouver ou en obtenir un de n'importe quel fournisseur tiers. Voici un

http://www.em.avant-garde-lab.com/ Produits.HTML

Si votre appareil se spécifie comme auto-alimenté dans son descripteur de périphérique, l'hôte compterait sur la capacité d'alimentation automatique des appareils. Vous pouvez vérifier sur USB.org pour plus de détails. Merci.


0 commentaires