[Programmation] Adaptateur I2C vers USB
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Adaptateur I2C vers USB



  1. #1
    AlexQui

    Adaptateur I2C vers USB


    ------

    Bonjour,

    Je travailles actuellement dans une entreprise sur l'interface entre un PC et une carte électronique, cette interface se fait via un adaptateur I2C vers USB (car le protocole retenu à l'époque par l'entreprise pour communiquer les données est l'I2C). Un soft en C# permet d'analyser les produits connectés à la carte électronique et d'effectuer des mesures. Ce soft en C# permet d'envoyer des données série (protocole UART) et l'adaptateur I2C vers USB permet de convertir automatiquement les données série en données I2C.

    L'adaptateur est le I2C2PC de i2cchip.com. Le composant qui permet la conversion automatique des données série en I2C est le BL233B or cet adaptateur n'est plus vendu, personne n'arrive à contacter la société et à acheter.

    Je voudrais donc savoir si vous connaissiez un adaptateur USB vers I2C qui convertit AUTOMATIQUEMENT des données USB vers des données I2C ?

    -----

  2. #2
    antek

    Re : Adaptateur I2C vers USB

    Je ne sais pas, mais on trouve des convertisseurs USB/UART.
    L'électronique c'est comme le violon. Soit on joue juste, soit on joue tzigane . . .

  3. #3
    AlexQui

    Re : Adaptateur I2C vers USB

    Oui je sais mais j'envoie des données série (UART) depuis mon soft en utilisant la librairie System.IO.Ports en C# mais aucun adaptateur ne convertit les données automatiquement de UART à I2C, en tout cas je n'en ai pas trouvé, il faut modifier le code en profondeur mais ça me prendrait trop de temps pour ce que j'ai à faire.

  4. #4
    bobflux

    Re : Adaptateur I2C vers USB

    Citation Envoyé par AlexQui Voir le message
    Je voudrais donc savoir si vous connaissiez un adaptateur USB vers I2C qui convertit AUTOMATIQUEMENT des données USB vers des données I2C ?
    Ce que tu demandes ("Automatiquement") n'est pas possible car la norme USB ne spécifie pas comment faire cette conversion.

    Grosso modo la norme USB spécifie une classe USB-CDC dont une des fonctions est "convertisseur USB-Série", c'est pourquoi tous les convertisseurs USB-série qui respectent cette norme fonctionnent avec un driver générique. Si ton programme fait un appel à l'OS pour dire "mets les bauds à 9600 et envoie 'coucou'" l'OS fait appel au driver générique, qui traduit ça en paquets USB, et le périphérique comprend ce qu'on lui demande. Que la puce dedans soit un PL2302 ou un FTDI le protocole côté USB est le même.

    Par contre la norme USB ne spécifie pas de classe USB-I2C, donc tout ça n'existe pas.

    Comme personne n'a envie de faire des drivers, la plupart des adaptateurs USB-I2C utilisent un convertisseur USB-Série (donc sans driver) suivi par un microcontrôleur. Côté PC tu vas avoir une library avec une fonction du style I2CRead() qui va encoder les données sous forme série et envoyer ça via USB. À l'autre bout un microcontrôleur lit les données sur le port série, traduit en I2C, et renvoie la réponse.

    Il y a d'autres styles de convertisseurs, par exemple CP2112 qui ne passent pas par un intermédiaire série, et qui nécessitent donc un driver, par exemple CP2112, mais restons sur la première option.

    Le problème est que l'encodage de l'I2C sous format série n'est pas normalisé, donc chaque fabricant va utiliser le sien.

    Citation Envoyé par AlexQui Voir le message
    Oui je sais mais j'envoie des données série (UART) depuis mon soft en utilisant la librairie System.IO.Ports en C# mais aucun adaptateur ne convertit les données automatiquement de UART à I2C, en tout cas je n'en ai pas trouvé, il faut modifier le code en profondeur mais ça me prendrait trop de temps pour ce que j'ai à faire.
    Non, tu envoies des données sur le port série encodées dans un protocole propriétaire compatible uniquement avec le BL233B et ton problème est qu'aucune autre puce n'est compatible avec ce protocole.

    Ce BL233B est probablement un microcontrôleur programmé en usine avec "BL233B" imprimé dessus. D'ailleurs le brochage correspond à un PIC16. Il ne faut jamais utiliser ce genre de puce surtout provenant d'un petit fabricant, car tu te retrouves coincé quand ce n'est plus disponible.

    Tu peux utiliser n'importe quel adaptateur USB-I2C du marché, en changeant ton code.

    Si tu as dispersé le protocole 233B partout dans ton code au lieu de mettre ça dans une fonction ou une classe, c'est ton problème, il fallait le faire correctement.

    Si tu veux conserver la compatibilité avec cette puce, alors il faut prendre un micro quelconque facile à trouver et réimplémenter un convertisseur série-I2C compatible avec le protocole côté série est décrit dans la datasheet du BL233B.
    Dernière modification par bobflux ; 14/11/2023 à 11h36.

  5. A voir en vidéo sur Futura
  6. #5
    AlexQui

    Re : Adaptateur I2C vers USB

    Merci beaucoup pour ta réponse !

    J'ai tout compris à ton message sauf la dernière phrase :
    Si tu veux conserver la compatibilité avec cette puce, alors il faut prendre un micro quelconque facile à trouver et réimplémenter un convertisseur série-I2C compatible avec le protocole côté série est décrit dans la datasheet du BL233B.
    Donc le CP2112 pourrait être adapté à cette situation mais je ne vois pas ce que je dois adapter pour l'utiliser ?

    Non le protocole 233B est bien localisé dans certaines méthodes dans mon code C# mais par exemple j'ai regardé pour utilisé un FT232H de chez FTDI mais ça rajoute énormément de méthode pour envoyer ce qu'on veut et l'adaptation par rapport à mon code prendrait beaucoup de temps.

    Le protocole 233B est assez simple, on envoie sur le COMPORT pour envoyer une trame I²C un message de ce type S40D7P : [I2C Start][Address:0x40][Data:0xD7][I2C Stop]. Je pensais donc trouver un dispositif qui fonctionnerait de cette manière même avec un message différent.

    Ce n'est pas moi qui ai écrit le code n'y même choisi le boîtier, ça a été fait avant mon arrivé dans l'entreprise.

  7. #6
    Vincent PETIT
    Animateur Électronique

    Re : Adaptateur I2C vers USB

    Bonjour,
    Dans le même genre que les composants cités plus haut il y a aussi le FT260S https://ftdichip.com/products/ft260s/

    De ce que j'ai compris en lisant en diagonal, ton PC verrait un port série virtuel et aura accès à un maître I2C. Mais comme l'a dit bobflux il faudra utiliser leur driver et je ne sais pas quel sera l'impact dans ton code ?
    Là où il n'y a pas de solution, il n'y a pas de problème.

  8. #7
    AlexQui

    Re : Adaptateur I2C vers USB

    Dans mon code les quelques méthodes utilisées pour transmettre des données et pour les lire utilisent un message de ce type S40D7P : [I2C Start][Address:0x40][Data:0xD7][I2C Stop]. Par exemple une méthode pour lire la fréquence est la suivante : public string ReadFrequency()
    Code:
    {
        return "S" + Jig_simple.C_ADDRESS_W + Jig_simple.C_IND_R4_READ_FREQUENCY + "R04" + "P";
    }
    Donc je n'aurai que ces méthodes à modifier mais il faudrait pour que je n'ai que ces méthodes à modifier un dispositif qui permette d'envoyer des trames I²C avec ce type de message.

    Un autre exemple dans mon code :

    Voici une méthode qui sélectionne le bus sur lequel on transmet les données en mode rapide :

    Code:
    public string SetHighSpeed(int BusNo = 1)
    {
        switch (BusNo)
        {
            case 1:
            serial_Comport.Write(C_cmd_I2C400k_1);
            break;
            case 2:
            serial_Comport.Write(C_cmd_I2C400k_2);
            break;
            case 3:
            serial_Comport.Write(C_cmd_I2C400k_3);
            break;
            default:
            return "THIS BUS DOESN'T EXIST ON THE SYSTEM";
        }
        return "BUS IN HIGH SPEED";
    }
    Avec la définition des constantes :

    private const string C_cmd_I2C400k_1 = "G5";
    private const string C_cmd_I2C400k_2 = "G6";
    private const string C_cmd_I2C400k_3 = "G7";

    (La commande "G" sélectionne le bus qu'on veut).
    Dernière modification par gienas ; 14/11/2023 à 17h46. Motif: Ajouté les balises code obligatoires pour les programmes

  9. #8
    bobflux

    Re : Adaptateur I2C vers USB

    Le problème des puces style CP2112 ou FT260S ou MCP2221 c'est que, comme ce n'est pas un port série donc pas supporté par un Device Class du standard USB... ça vient avec un driver, une DLL, une API, un SDK, et tout un bazar à installer, tout ça pour envoyer une pauvre trame I2C.

    Si t'en trouves un qui est simple à utiliser, pourquoi pas.

    Citation Envoyé par AlexQui Voir le message
    J'ai tout compris à ton message sauf la dernière phrase
    Eh bien l'autre option c'est de prendre un microcontroleur quelconque qui a un port série USB et un port I2C (par exemple n'importe quel modèle d'arduino) et de charger dedans un programme qui va écouter sur le port série, interpréter les commandes reçues, et envoyer ça en I2C. C'est-à-dire qu'il fera exactement la même chose que le micro dans ton adaptateur qui n'est plus fabriqué.

    Un exemple : https://gist.github.com/kraftb/8c0bbcc35a9778608d74

  10. #9
    AlexQui

    Re : Adaptateur I2C vers USB

    D'acc je vois mais donc si j'installe tous les drivers nécessaires par exemple pour le CP2112 ca devrait fonctionne avec mon code, j'aurais juste quelques instructions à changer. Je vais essayer avec le CP2112 je te redirai.

    Ouai mais le problème de l'arduino c'est que je dois changer quand même énormément de code et j'ai une deadline à tenir.

  11. #10
    Murayama

    Re : Adaptateur I2C vers USB

    Bonjour!

    Je voudrais donc savoir si vous connaissiez un adaptateur USB vers I2C qui convertit AUTOMATIQUEMENT des données USB vers des données I2C ?
    Il y a apparemment des chips qui font ça, mais il va falloir bricoler un peu. Et aussi écrire un driver. Microchip fournit probablement le driver qui
    permet de communiquer entre le PC et ce chip. MAIS: pour communiquer avec un chip spécifique par I2C, il faut envoyer son adresse.
    Donc se renseigner sur comment c'est fait jusqu'à maintenant pour copier / imiter le protocoole. Est-ce que l'adresse est envoyée en premier,
    est-ce qu'elle est en 7 bits ou 10 bits (comme sur certaines EEPROMs), est-ce qu'il y a une CRC, etc....

    https://www.microchip.com/en-us/product/MCP2221

    Pascal

  12. #11
    AlexQui

    Re : Adaptateur I2C vers USB

    Donc se renseigner sur comment c'est fait jusqu'à maintenant pour copier / imiter le protocoole. Est-ce que l'adresse est envoyée en premier,
    est-ce qu'elle est en 7 bits ou 10 bits (comme sur certaines EEPROMs), est-ce qu'il y a une CRC, etc....
    Je vois et l'avantage est que j'ai accès à ces informations. Donc si j'installe le driver fournit par microchip ça devrait fonctionner avec mon code c'est ça ?

  13. #12
    micapivi

    Re : Adaptateur I2C vers USB

    Bonjour

    Peut-être hors sujet, mais au cas où …

    Quand j'ai besoin d'utiliser l'I²C depuis un PC, je connecte mes composants I²C aux broches 9, 10, 12, et 15 du connecteur SVGA de mon PC.
    C'est aussi possible sur un connecteur DVI (broches 6, 7, 14 et 15)

Discussions similaires

  1. Fabrication adaptateur 12V vers 9V
    Par 9dB dans le forum Bricolage et décoration
    Réponses: 9
    Dernier message: 29/04/2021, 20h15
  2. Adaptateur HDMI vers USB
    Par BourrinOman dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 14/02/2021, 11h17
  3. adaptateur din 2 broches vers RCA
    Par inviteda9811a5 dans le forum Électronique
    Réponses: 7
    Dernier message: 25/08/2013, 11h54
  4. Adaptateur rs232 vers TTL( où est RX, TX et GND ?!)
    Par bradoine dans le forum Électronique
    Réponses: 3
    Dernier message: 06/10/2011, 10h08
  5. Adaptateur tsot-23 vers dip
    Par invitee4d293c9 dans le forum Électronique
    Réponses: 6
    Dernier message: 13/11/2010, 14h08
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...