eak a posé la question dans Informatique et internetProgrammation · il y a 2 mois

I2C lecture de plusieurs octets ATmega1280 AVR C?

Bonjour, 

J'ai une communication I2C entre deux cartes avec MCU, une ATmega1280 (maitre), l'autre ATmega328p(esclave), le maitre chercher à lire 3 octets envoyés par esclave qui sont {0xA1, 0xB2, 0xC3} 

Coté maitre :La fonction pour lire les 2 premiers octets est:uint8_t I2C_read_ACK(){ TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWEA); while((TWCR & (1<<TWINT)) == 0); return TWDR;}Pour le dernier octet la condition NACK est transmise : uint8_t I2C_read_NACK(){ TWCR = (1<<TWEN) | (1<<TWINT); while((TWCR & (1<<TWINT)) == 0); return TWDR;}

Coté esclave la fonction est: 

void I2C_write(uint8_t data){

 TWDR = data;

 TWCR = (1<<TWEN) | (1<<TWINT);

 while((TWCR & (1<<TWINT)) == 0);

}

Au final le matre recoit la tramme suivante :

 {0xA1, 0xFF, 0xFF}

Est-ce que quelqu'un sait d'ou viendrait le problème ?

J'ai l'impréssion que le maitre lit les données trop vite, il arrive à lire le 1er octet mais les autres sont faux car il y a un delais entre les envoie côté esclave.

Qu'est-ce que le protocole I2C permet de lire les bursts alors qu'il arrivent avec des délais entre chaque octet ? "Clock stretching" deverait, mais il ne fonctionne pas dans mon cas alors ?

1 réponse

Évaluation
  • Anonyme
    il y a 2 mois

    Il n'y a pas de spécialiste en informatique sur Q/R

    • Commenter avatarConnectez-vous pour commenter des réponses
Vous avez d’autres questions ? Pour obtenir des réponses, posez vos questions dès maintenant.