Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

bus I2C soucis de lecture



  1. #1
    michael_mac

    Cool bus I2C soucis de lecture


    ------

    Bonjour, je tente de lire sur le bus i2C, mais sans succes, à savoir que mon exclace reconnait bien le maitre(ack) mais ensuite je veux lire certains registres et j obtiens tjs 0.
    Cote oscillo le maitre demande tjs à lire le contenu du registre 3A ,malgre le fait que je demande le contenu d adresses differentes.
    Je n'ai pas de resistances de pull up et down mais j ai bien des fronts au niveau 0 et 1 sur SDA et SCL.
    Pensez vous que le fait de ne pas avoir ces resistances influe sur mon bus?est ce obligatoire de le mettre?
    sinon si ssn a une idee..je suis preneur...
    merci..

    -----

  2. #2
    behemerre

    Re : bus I2C soucis de lecture

    Salut,
    Bonjour, je tente de lire sur le bus i2C, mais sans succes, à savoir que mon exclace reconnait bien le maitre(ack) mais ensuite je veux lire certains registres et j obtiens tjs 0.
    Quel BUS I²C ? celui d'un IC, d'un µC, autre ... c'est qui le maître et qui l'esclave côté hardware ?

    Je n'ai pas de resistances de pull up et down mais j ai bien des fronts au niveau 0 et 1 sur SDA et SCL.
    Pas besoin de pull-down en I²C, mais les pull-up sont OBLIGATOIRES !!

    Pensez vous que le fait de ne pas avoir ces resistances influe sur mon bus?est ce obligatoire de le mettre?
    OUI !
    sinon si ssn a une idee..je suis preneur...
    Si tu as plus de détails côté hardware, ou un schèma, je suis preneur aussi !

    a+
    L'éxpérience de chacun est le trésor de tous

  3. #3
    umfred

    Re : bus I2C soucis de lecture

    Qu'est-ce que le maitre?
    Qu'est ce que l'esclave?
    Comment est fait l'écriture? la lecture ? (coté maitre (et esclave si nécessaire)) .
    Normalement il faut des pull-down car les SDA et SCL sont (en principe) de type collecteur ouvert.

  4. #4
    michael_mac

    Re : bus I2C soucis de lecture

    je travail sur un backfin maitre et mon circuit de capture video esclave, concernant les pull up ou down je pense en fait quils sont sur mon circuit blackfin, puisqu il a ete concu pour ca (i2c).
    je vous envoi le code correspondant à la lecture puis ecriture:

    int i2c_write_register(char * device, unsigned char client, unsigned char reg, unsigned short value)
    {
    int addr = I2C_SLAVE_ADDR;
    char msg_data[32];
    struct i2c_msg msg = { addr, 0, 0, msg_data };
    struct i2c_rdwr_ioctl_data rdwr = { &msg, 1 };

    int fd,i;

    if ( (fd = open( device, O_RDWR ) ) < 0 ) {
    fprintf(stderr, "Error: could not open %s\n", device);
    exit( 1 );
    }

    if ( ioctl( fd, I2C_SLAVE, addr ) < 0 ) {
    fprintf(stderr, "Error: could not bind address %x \n", addr );
    }

    msg.len = 3;
    msg.flags = 0;
    msg_data[0] = reg;
    msg_data[2] = (0xFF & value);
    msg_data[1] = (value >> 8);
    msg.addr = client;

    if ( ioctl( fd, I2C_RDWR, &rdwr ) < 0 ) {
    fprintf(stderr, "Error: could not write \n");
    }

    close( fd );
    return 0;
    }

    int i2c_read_register(char * device, unsigned char client, unsigned char reg)
    {
    int addr = I2C_SLAVE_ADDR;
    char msg_data[32];
    //char msg_data[24];
    struct i2c_msg msg = { addr, 0, 0, msg_data };

    struct i2c_rdwr_ioctl_data rdwr = { &msg, 1 };

    int fd,i;

    if ( (fd = open( device, O_RDWR ) ) < 0 ) {
    fprintf(stderr, "Error: could not open %s\n", device);
    exit( 1 );
    }

    if ( ioctl( fd, I2C_SLAVE, addr ) < 0 ) {
    fprintf(stderr, "Error: could not bind address %x \n", addr );
    }
    // msg_data[2]= reg;
    msg_data[0]= reg;
    msg.addr = client;
    msg.len = 1;
    msg.flags = 0;

    if ( ioctl( fd, I2C_RDWR, &rdwr ) < 0 ) {
    fprintf(stderr, "Error: could not write \n");
    };

    msg.len = 2;
    // msg_data[0]=0;
    // msg_data[1]=0;
    msg.flags = I2C_M_RD ;

    if ( ioctl( fd, I2C_RDWR, &rdwr ) < 0 ) {
    fprintf(stderr, "Error: could not read back\n");
    close( fd );
    return -1;
    }

    close( fd );
    return (((unsigned char)msg_data[0])<<8 | ((unsigned char)msg_data[1]) );
    //return (((unsigned char)msg_data[0])<<8 | ((unsigned char)msg_data[1]) );



    la distance de mon bus est tres courte je pense pas que rajouter des res de pull up down soit necessaire, j vais quand meme m assurer qu elles soient presente sur le blackfin..

    merci pour vos reponses....

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Espionner le bus I2C
    Par Slimounet45 dans le forum Électronique
    Réponses: 12
    Dernier message: 20/05/2011, 17h48
  2. bus I2C
    Par Maje dans le forum Électronique
    Réponses: 2
    Dernier message: 29/06/2008, 23h28
  3. Electronique : bus I2C
    Par Mr. Ledoux dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 10/10/2007, 10h37
  4. Bus I2C
    Par Eleomir dans le forum Électronique
    Réponses: 15
    Dernier message: 15/04/2007, 10h58
  5. Bus I2c
    Par chrichri51 dans le forum Électronique
    Réponses: 6
    Dernier message: 30/10/2005, 13h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.