bonsoir,
dans le cadre d'un projet, je doit établir une communication I2C entre mon PC et une centrale inertiel.
mon pc détecte bien l' IMU :
mais, mon problème ce situe plutôt au niveaux du code. j'ai peu de connaissance en programmation système, et je ne sais pas à quoi correspond les valeurs d'adresse et de registre . ces valeurs sont-ils spécifique à l'architecture? au matériel détecter ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 :~# i2cdetect -y -r 3 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- 1e -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
de plus, le code si dessous me renvoi l'erreur 'undefined reference to `i2c_smbus_read_word_data' qui semble être une fonction issue du noyaux, elle n'est donc probablement pas utilisable en espace utilisateur ...
comment pourrais je gérer la communication sans cette fonctions ?
de plus, il est dit dans la doc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #include <stdio.h> #include <stdlib.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h> int main() { int file; int adapter_nr = 3; /* probably dynamically determined */ int addr = 0x40; /* The I2C address */ __u8 registers = 0x10; /* Device register to access */ __s32 res; char filename[20]; char buf[10]; sprintf(filename,"/dev/i2c-%d",adapter_nr); if ((file = open(filename,"r")) < 0) { printf("ERROR: /dev/i2c-%d cannot open",adapter_nr ); return(-1); } if (ioctl(file,I2C_SLAVE,addr) < 0) { printf("error"); return(-1); } /* Using SMBus commands */ res = i2c_smbus_read_word_data(file,registers); if (res < 0) { printf("ERROR HANDLING: i2c transaction failed"); } else { printf("%d", (int) res); // res contains the read word } return 0; }
mais à quoi celà coorespond ?à la variable "int addr" ?setting the gyro’s slave address to 1101001b and the accelerometer’s slave address to 0011000b by default
j'espère que vous pourrez m'aiguiller parce que , pour le moment, tout est très floue pour moi ...
merci
à bientôt
Partager