Je sais que ce n'est probablement pas la chose la plus facile à faire, mais j'essaie de connecter Microcontrôleur et PC en utilisant USB. Je ne veux pas utiliser interne USART de microcontrôleur ou USB à RS232 converti, son projet indentifié pour m'aider à comprendre les différents principes. Donc, obtenir la communication du côté du microcontrôleur est un jeu d'enfant - je veux dire, quand je connais le protocole, il est relativement facile de l'implémenter sur Micro, parce que je suis en contrôle direct de tout, même un timing précis.Contrôler l'USB à partir de Windows
Mais ce n'est pas le cas de PC. Je ne suis pas très familier avec le concept de Windows traitant les appareils connectés. Dans l'une de mes questions précédentes, je demande comment Windows fonctionne avec les périphériques via les pilotes. J'ai compris que pour l'utilisation interne de Windows, les pilotes doivent avoir un ensemble de fonctions par défaut disponibles pour le système d'exploitation. Je veux dire, quand OS veut accéder au disque dur, il appelle le pilote HDD (qui est probablement interne dans OS), avec des "questions" spécifiques, ce qui signifie que le pilote HDD doit être écrit pour coopérer avec Windows, avoir une fonction d'écriture dans le bon lieu d'être appelé par l'OS. Quelque chose de similaire est pour GPU, même DirectX, je veux dire que DirectX doit appeler des fonctions spécifiques des pilotes, donc les pilotes doivent être écrits pour fonctionner avec DX. Je sais, beaucoup de fonctions de WinAPI fonctionnent de leur propre chef, mais même une fenêtre "simple" doit être écrite à la fin dans framebuffer, en utilisant MMIO à l'adresse spécifiée par les pilotes. Ai-je raison? Donc, je m'attendais à ce que Windows ait des fonctions internes, des parties de WinAPI conçues pour fonctionner avec certaines choses utiles. Pour appeler les pilotes conçus par le fabricant. Mais cela ne semble pas tout à fait vrai car Windows n'a aucun moyen de communiquer via le port de Paralel. Je veux dire, il n'y a aucune fonction dans le WinAPI pour travailler avec le port série, mais il y a des foncions pour travailler avec le disque dur, le GPU et ainsi de suite.
Mais maintenant vient la partie où je me perds énormément. Donc, je pense que Windows doit avoir des fonctions intégrées pour communiquer via USB, car il gère par exemple la mémoire flash USB. Donc, y a-t-il une fonction WinAPI conçue pour permettre à l'utilisateur de faire fonctionner l'USB via cette fonction, ou quand je veux utiliser l'USB moi-même, dois-je appeler moi-même la fonction pilote USB souhaitée? Est-ce que tout ce dont vous avez besoin pour envoyer au contrôleur USB est l'adresse de l'appareil et le droit d'accès? Je veux dire, je n'ai pas besoin d'écrire de nouveaux pilotes, n'est-ce pas? Juste pour appeler la fonction WinAPI s'il y en a, ou appeler directement le pilote USB original. Est-ce que cela a du sens?
Salut, merci, puis-je avoir une autre question? Si je comprends bien, HID est en fait partie WinAPI pour communiquer avec les pilotes USB, mais encore, les pilotes USB doivent avoir la capacité d'envoyer des données à l'appareil et vers l'arrière. Puis-je adresser des pilotes USB directement? En fait, je n'ai jamais travaillé avec quelque chose en dehors de la bibliothèque C standart, des classes WinAPI ou .net. –
Il devrait déjà y avoir un pilote HID installé qui sait tout faire. (Mon expérience n'est pas sur Windows malheureusement, j'ai fait un peu de googling.) Le chapitre 13 [ici] (http://proyectosfie.com/html/usb/libro/) parle de HID sous Windows.) Je ne pense pas que vous ayez besoin de sait rien sur les pilotes, sauf qu'il y a un cadeau. – sigfpe
Merci. Puis-je avoir une question plus rapide? Disons que j'ai une webcam USB et je veux qu'il fonctionne avec une fonction WinAPI qui est conçue pour fonctionner avec les webcams. (même s'il n'y en a pas, sa théorie juste) Alors, est-ce que j'écrirais juste un traducteur entre WinPAI et un pilote USB général (appelez simplement une fonction send() du driver USB) ou devrais-je écrire toute la communication USB dans mon driver ? Par cela je veux dire toute la communication avec le contrôleur USB? –