J'ai lu tout à fait quelques tutoriels et des guides détaillés sur i2c, mais ce qu'il est pas clair pour moi est la suivante:I2C Lire et I2C comportement Ecrire des registres et aucune réponse de l'appareil
Supposons que vous devez lire un registre dois-je "écrire" sur l'i2c les 7 premiers bits en tant qu'adresse esclave, 1 bit avec R/W puis l'adresse reg (en tant que données) puis émettre une "lecture" pour écouter pour les octets
h_i2c *i2c_dev = i2c_drv_open(I2C1_PORT, SLAVE_ADDRESS);
write_data[0] = 0x21;
write_len = i2c_drv_write(i2c_h, write_data, 1);
if (write_len != 1)
printf("error write_len is %d", write_len);
uint8_t read_data[5];
read_len = i2c_drv_read(i2c_h, read_data, 5);
if (read_len != 5)
wmprintf("error read_len is %d", read_len);
ou
Dois-je émettre uniquement une lecture à une adresse qui est la "combinaison" de l'esclave et du registre que je veux lire?
De plus, la propriété "auto-incremental" signifie que tant que je donne le contrôle SDA à l'esclave, il continuera à envoyer des données?
EDIT1:
citant le pdf:
Le ENS210 est un dispositif esclave I²C avec une adresse d'esclave fixe de 0x43. Cela signifie que le premier octet après une condition de démarrage est 1000 011x, où x indique la direction des données, donc 0x86 (1000 0110) pour écriture et 0x87 (1000 0111) pour lecture.
est ici la sortie
Sur le front montant que je vois 1 0 0 0 0 1 1 0 1
Le dernier signifie nACK.
Mes idées sont:
- capteur est mort
- La résistance est mauvais, le capteur ne peut pas tirer vers le bas la ligne SDA
- La fréquence est à 125KHz est-il normal?
PS: sonde SCL a donc question la qualité du signal est mieux de ce que vous voyez ici
Cordialement,
La feuille de données de l'appareil auquel vous tentez de parler devrait afficher des diagrammes de forme d'onde de transaction complète, qui le rendent clair. Je dirais que c'est l'ancien. – unwind
Tous les périphériques I2C que j'ai vus fonctionnent comme votre exemple, avec une opération d'écriture puis une opération d'écriture, et si vous lisez 5 octets, vous lisez l'adresse 0x21 à 0x25. – JMA
@JMA mis à jour le premier article – Luigi