IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Communication USB, sans device


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut Communication USB, sans device
    Bonjour à tous !

    J'ai pas mal regardé sur le forum, il y a beaucoup de posts sur le thème de la communication USB et j'en rajoute un , parce que je préfère savoir si il existe une solution possible à mon problème avant de me lancer.

    Le problème, c'est que j'ai cru comprendre qu'on ne pouvait pas directement communiquer avec le port USB mais seulement avec l'appareil qui y est connecté.

    Or pour ma part je n'ai "rien" de connecté, je veux juste envoyer des signaux électriques (qui derrière débouche sur une carte électronique toute simple).
    En gros dans un premier temps juste avoir un câble USB coupé et observé les données que j'envoie à l'oscilo'.

    Est-ce possible ? Avec CreateFile & co ? Avec WinUSB ? Avec le WDK ?

    Désolé pour cet n-iéme post, mais bon je préfère savoir dans quoi je me lance. Merci.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    USB est un bus à part entière, qui va notamment envoyer les données par paquets formatés et non pas "directement" comme sur un port série RS-232...

    Je t'encourage à aller voir à quoi ressemble "réellement" un bus USB, au moins de façon macroscopique (ex : Universal Serial Bus (français), et USB packets (anglais)).

    Ta demande est équivalente à "je veux envoyer des données sur mon câble RJ-45 Ethernet, piloter directement les signaux Rx/Tx et les observer à l'oscillo"... Ce qui n'est pas possible, car ta carte Ethernet, même en "Raw Sockets", introduira toujours une capsule 802.x ainsi que les signaux CSMA/CD.

    En USB, c'est pareil : tu ne pourras pas t'affranchir de la notion de paquet USB, et sans une énumération correcte, tu n'aurais de toutes façons RIEN sur ton câble coupé : le hub USB "parent" n'alimenterait même pas ton câble !! Et même si tu avais le signal, tu serais soumis au découpage temporel de l'USB quoi qu'il arrive...

    Explicite mieux ton problème initial, peut-être pourra-t'on t'aider un peu mieux... Te faut-il piloter un device USB ? Générer un signal quelconque sur une ligne type TTL ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    Ok, c'est un peu ce à quoi je m'attendais !

    Le principe c'est de trouver un moyen de transmettre des octets (bit à bit) de données sans aucun protocole, depuis l'ordinateur vers une carte électronique (n'importe quoi, pour allumer une LED, comme pour commander un µC).

    Le rôle de la carte n'est pas forcement définie, l'ordi' transmet juste des 1 et des 0 que je voudrais récupérer sur un câble en sortie (0 - 5 V par exemple, TTL pourquoi pas !).

    Enfin je vais voir à passer par un PIC18F ou un FTD245, même si ça m'arange pas de mettre un "intermédiaire".

    A moins que quelqu'un est une autre idée de sortie possible et simple, USB ou autre (juste un ou deux petits câbles qui sortent de l'arrière de mon PC avec des bits en farandole ! ).

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Oh, tout simplement ta sortie RS-232 ou ton port parallèle...

    Au pire, il te faudra un petit circuit électronique pour adapter la tension et/ou l'ampérage en fonction de tes besoins (le truc bête, hein, les lignes du port série / parallèle directement sur un transistor ou peu s'en faut...).

    RS-232 (Wikipédia) :
    • Avantages :
      • Il suffit de régler le port et ensuite d'envoyer les octets qui seront sérialisés très très facilement :
        • Vitesse "au choix" entre 75 bauds et 1.000.000 bauds en fonction de ton matériel, 115.200 garanti en général.
        • 8 bits de données.
        • Pas de parité.
        • Pas de bits de stop.
        • Pas de contrôle de flux.
      • L'accès au port série se fait sans avoir besoin de driver spécifique, le code n'est "abrupt" que si l'on doit tenir des performances particulières.
        Et même dans ce cas, il y a un paquet de librairies très bien faites pour y accéder (ComPort par exemple pour Delphi/C++ Builder).
      • Un accès R/W bit à bit "TTL" est possible via les lignes CTS/RTS, la vitesse dépendant alors du programme utilisateur.
    • Inconvénients :
      • Pas de contrôle strict sur le délai entre la demande d'envoi et le début de sérialisation sur les lignes.
      • Impossible d'envoyer moins de bits que la taille paramétrée.
      • En mode normal d'émission, il faut tenir compte de l'encodage des octets sur les lignes.
      • Limité à certaines vitesses précises.
      • Pas toujours disponible sur les PC modernes...
        Un adaptateur RS-232 sur USB résout alors le problème, il est vu comme un port COM normal et l'USB est totalement transparent.


    Port parallèle (Wikipédia) :
    • Avantages :
      • Jusqu'à 8 lignes indépendantes sans utiliser de bidouilles particulières.
      • La vitesse est définie par le programme utilisateur (dans les limites de performances du port bien sûr).
      • Plus souvent présent sur les PC modernes qu'un port RS-232.
    • Inconvénients :
      • Demande un driver bas niveau pour être utilisé correctement (un driver générique d'accès direct aux ports I/O, en général).
      • Plus pénible à programmer qu'un port RS-232.


    A toi de faire ton choix en fonction de tes besoins, donc. J'aurais tendance à te conseiller le RS-232 en utilisant CTS/RTS, d'après ce que tu décris, et donc RTS uniquement si tu ne fais qu'émettre.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    Merci pour ton temps !

    Pour la liaison série effectivement ça serait la solution. Mais après quelques recherches j'ai vu une limitation qui ne me plait pas trop : la vitesse de transfert.

    En effet le but de mon application est de permettre la transmission de données brutes depuis l'ordinateur (un fichier binaire quelconque) vers un récepteur choisi par l'utilisateur.
    En gros l'utilisateur choisi les données informatiques à envoyer et gère leur traitement après, moi je me charge juste de sortir les données de l'ordinateur !
    Et j'aimerai pouvoir atteindre des débits de plusieurs mégaoctets/seconde.

    Existe-t-il des adaptateurs USB/série qui me permettront d'utiliser la vitesse de l'USB2.0 en faisant abstraction de tout protocole ?

    Sinon je vais être obligé de me rabattre sur une carte intermédiaire assurant la transition entre USB (ou ethernet) et mes petits fils à nu !

    En tous cas merci de ton aide !

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par arcane86 Voir le message
    Mais après quelques recherches j'ai vu une limitation qui ne me plait pas trop : la vitesse de transfert.
    Au mieux, tu auras du 1 Mbit/s avec la liaison série... N'espère pas dépasser (en gros) les 400 ko/s avec le port parallèle de toutes façons.

    Citation Envoyé par arcane86 Voir le message
    En gros l'utilisateur choisi les données informatiques à envoyer et gère leur traitement après, moi je me charge juste de sortir les données de l'ordinateur !
    Jusque là, tout va bien, ça se fait couramment.

    Citation Envoyé par arcane86 Voir le message
    Et j'aimerai pouvoir atteindre des débits de plusieurs mégaoctets/seconde.
    C'est là où ça se corse : pour de tels débits, difficile de se passer d'un bus normé / protocolé et de ses contrôleurs dédiés...

    Citation Envoyé par arcane86 Voir le message
    Existe-t-il des adaptateurs USB/série qui me permettront d'utiliser la vitesse de l'USB2.0 en faisant abstraction de tout protocole ?
    Pas à ma connaissance, le problème après sur deux fils "nus" étant électrique (amortissement, parasites, phénomène d'antenne, etc.) qui t'empêcheront d'aller au delà d'approximativement 1 à 2 MBit/s...

    Citation Envoyé par arcane86 Voir le message
    Sinon je vais être obligé de me rabattre sur une carte intermédiaire assurant la transition entre USB (ou ethernet) et mes petits fils à nu !
    Cela ne changera hélas rien du tout : la partie "nue" de tes fils ne supportera jamais de tels débits, faudrait passer en différentiel, en paire torsadée, avec des résistances de ligne et tout et tout. Ne serait-ce que côté contrôle d'erreurs (car tu AURAS des erreurs de transmission, c'est totalement inévitable), c'est déjà la cata intégrale.

    Bref, faudrait refaire ce qui est déjà fait dans une carte Ethernet ou un device USB... Autant la coupler directement !

    Au final, tes signaux doivent arriver dans quoi ? L'interface série d'un FPGA ? Des registres latch ? Un processeur / contrôleur ? Dans une RAM / Flash ? Et surtout, suivant quel protocole ? Quelle est la taille maximale d'un fichier à transmettre ? As-tu de réelles contraintes temporelles (= contractuelles) vis-à-vis de ton client ?

    Si tu peux exprimer de façon suffisamment détaillée le besoin final réel, il devrait être possible de t'aider à choisir le meilleur protocole possible... Dans tous les cas (Ethernet ou USB), il existe des espions de bus capables de retrouver ton flux de données "brut", cet aspect n'est donc pas un problème réel en soi.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par arcane86 Voir le message
    Et j'aimerai pouvoir atteindre des débits de plusieurs mégaoctets/seconde.
    Avec un port série, impossible.

    Le port série natif du PC, c'est 115200 bauds c'est à dire à peu près 10KO par secondes (que les puristes m'excusent)

    La vistesse maxi du port USB 1.0, c'est 12MB/s, c'est à dire 1MO par seconde

    La vitesse maxi du port USB 2.0, c'est 480MB/s, c'est à dire 48MO par seconde.

    Ces vitesses sont des vitesses théoriques rarement atteinte dans la pratique.

    Pour ton cas, si tu veux de tels débits, c'est ethernet
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/04/2015, 20h36
  2. [USB]Comment utiliser cette API pour la communication USB
    Par fouguasse dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 19/08/2007, 18h18
  3. Communication USB HID ?
    Par MonQQ dans le forum C++
    Réponses: 1
    Dernier message: 23/04/2007, 11h00
  4. comment peut-on réaliser une communication usb avec un MC moto ?
    Par Super2006 dans le forum Périphériques
    Réponses: 10
    Dernier message: 25/03/2007, 22h38
  5. Accès clef USB sans passer par la lettre de lecteur
    Par Ygster dans le forum Windows
    Réponses: 1
    Dernier message: 16/05/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo