2016-12-31 3 views
0

J'ai capteur de pression et de température adafruit BMP180 connecté à I2C de Raspberry Pi 3. Le périphérique est détecté sur l'adresse 0x77 de I2C, i2cdump fonctionne sans erreur et affiche les valeurs correctes (par exemple octet 0x55 dans 0xD0 comme décrit dans la documentation de Bosch). Mais la lecture d'un octet dans la plupart des cas entraîne une erreur d'entrée/sortie.Lire l'octet échoue sur Raspberry Pi 3: erreur d'entrée/sortie [errno 5]

[email protected]:~ $ i2cdetect -y 1 
    0 1 2 3 4 5 6 7 8 9 a b c d e f 
00:   -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77      

[email protected]:~/Adafruit_Python_BMP $ i2cdump -y 1 0x77 
No size specified (using byte-data access) 
    0 1 2 3 4 5 6 7 8 9 a b c d e fabcdef 
00: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX 
10: XX XX XX 00 00 00 00 00 00 00 00 00 00 00 00 00 XXX............. 
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
80: a5 94 46 29 82 27 75 20 c8 0b 22 91 fb 57 c7 11 ??F)?'u ??"??W?? 
90: 85 ca 61 f6 45 8a 19 73 00 30 80 00 d1 f6 0a d4 ??a?E??s.0?.???? 
a0: a5 94 46 29 82 27 75 20 c8 0b 22 91 fb 57 c7 11 ??F)?'u ??"??W?? 
b0: 85 ca 61 f6 45 8a 19 73 00 30 80 00 d1 f6 0a d4 ??a?E??s.0?.???? 
c0: 00 00 bc 33 00 00 00 00 00 00 00 10 00 00 00 03 ..?3.......?...? 
d0: 55 02 06 00 00 00 00 00 00 00 00 00 00 00 00 00 U??............. 
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 
f0: 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 ......?......... 

[email protected]:~/Adafruit_Python_BMP $ i2cget -y 1 0x77 0xd0 
0x55 
[email protected]:~/Adafruit_Python_BMP $ i2cget -y 1 0x77 0xd0 
Error: Read failed 
[email protected]:~/Adafruit_Python_BMP $ i2cget -y 1 0x77 0xd0 
Error: Read failed 

Exemple L'exécution de Adafruit (pour le capteur BMP180) dans la plupart des cas renvoie également erreur:

[email protected]:~/Adafruit_Python_BMP $ python test.py 
Temp = 23.40 *C 
Pressure = 99105.00 Pa 
[email protected]:~/Adafruit_Python_BMP $ python test.py 
Traceback (most recent call last): 
    File "test.py", line 3, in <module> 
    sensor = BMP085.BMP085() 
    File "/home/pi/Adafruit_Python_BMP/Adafruit_BMP/BMP085.py", line 69, in __init__ 
    self._load_calibration() 
    File "/home/pi/Adafruit_Python_BMP/Adafruit_BMP/BMP085.py", line 72, in _load_calibration 
    self.cal_AC1 = self._device.readS16BE(BMP085_CAL_AC1) # INT16 
    File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/I2C.py", line 200, in readS16BE 
    File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/I2C.py", line 177, in readS16 
    File "build/bdist.linux-armv7l/egg/Adafruit_GPIO/I2C.py", line 164, in readU16 
    File "build/bdist.linux-armv7l/egg/Adafruit_PureIO/smbus.py", line 173, in read_word_data 
IOError: [Errno 5] Input/output error 

J'ai aussi écrit des scripts pour lire des octets de ce capteur, en utilisant smbus2 ou SMBus-CFFI. Le résultat est le même: rarement les octets sont lus, dans la plupart des cas, je reçois des erreurs:

➜ birdwatcher git:(master) ✗ cat bmp180.py | ssh [email protected] sudo python - 
2016-12-30 19:30:40,608 __main__      DEBUG AC1 = -29482 [-0x732a] 
2016-12-30 19:30:40,609 __main__      DEBUG AC2 = 22523 [0x57fb] 
2016-12-30 19:30:40,609 __main__      DEBUG AC3 = 4551 [0x11c7] 
2016-12-30 19:30:40,610 __main__      DEBUG AC4 = 51845 [0xca85] 
2016-12-30 19:30:40,610 __main__      DEBUG AC5 = 63073 [0xf661] 
2016-12-30 19:30:40,610 __main__      DEBUG AC6 = 35397 [0x8a45] 
➜ birdwatcher git:(master) ✗ cat bmp180.py | ssh [email protected] sudo python - 
Traceback (most recent call last): 
    File "<stdin>", line 101, in <module> 
    File "<stdin>", line 68, in __init__ 
    File "<stdin>", line 49, in read_uint8 
IOError: [Errno 5] Input/output error 

Voici quelques informations sur l'environnement:

[email protected]:~ $ uname -a 
Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux 
[email protected]:~ $ ls -a /dev/i2c* 
/dev/i2c-1 
[email protected]:~ $ cat /boot/config.txt | grep i2c 
dtparam=i2c_arm=on,i2c_arm_baudrate=100000 
dtoverlay=i2c-sensor 
[email protected]:~ $ lsmod 
Module     Size Used by 
bnep     10340 2 
hci_uart    17943 1 
btbcm     5929 1 hci_uart 
bluetooth    326105 22 bnep,btbcm,hci_uart 
brcmfmac    186403 0 
brcmutil    5661 1 brcmfmac 
cfg80211    428431 1 brcmfmac 
rfkill     16037 4 cfg80211,bluetooth 
snd_bcm2835   20447 0 
snd_pcm    75762 1 snd_bcm2835 
snd_timer    19288 1 snd_pcm 
snd     51908 3 snd_bcm2835,snd_timer,snd_pcm 
bcm2835_wdt    3225 0 
bcm2835_gpiomem   3040 0 
uio_pdrv_genirq   3164 0 
uio      8000 1 uio_pdrv_genirq 
i2c_bcm2708    4834 0 
i2c_dev     5859 0 
fuse     84037 1 
ipv6     347594 30 

Résumé: i2cdump lit tous les octets du capteur , mais la lecture via i2cget échoue dans la plupart des cas. Le comportement est aléatoire et incohérent (dans la plupart des cas, il en résulte une erreur).

J'ai également recueilli des données sur les signaux sur les fils en utilisant piscope. Voici un i2cget succès: i2cget -y 1 0x77 0xd0 - returns 0x55

Et voici une lecture octet a échoué: i2cget -y 1 0x77 0xd0 - Error: Read failed

+0

vérifier la connexion matérielle – eyllanesc

+0

@eyllanesc la connexion matérielle est stable comme si je cours i2cdump je reçois toujours des données correctes (pas d'erreurs après i2cdump, i2cdetect montre toujours le capteur présent). – Alexei

+0

[connexe] (http://stackoverflow.com/q/38815505/1699210) – bummi

Répondre

0

Résolu. J'avais une mauvaise connexion sur le bus GND.