Итак имеем проблему: Датчик долгое время с отключением на ночь работал (получение данных происходила в скрипте python), но вдруг без видимых на то причин отказал. В одно прекрасное утро что-то пошло не так. Поучение ошибки А в скриптах python и работе с модулем smbus: [Errno 121] Remote I/O error Несуразный вывод скомпилированным кода данного проекта. Код (Javascript): {"sensor":"bme280", "humidity":0.00, "pressure":673.34, "temperature":0.00, "altitude":3314.81, "timestamp":1632500756} Адрес сканером определяется. Оборудование: Raspberry pi zero w. Состояние регистров bme280 после перезагрузки с отключением питания. Код (Bash): 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: XX XX XX XX XX 00 00 00 00 00 00 00 00 00 00 00 XXXXX........... 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 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: 84 70 89 73 97 68 d7 06 99 6e 1c 69 32 00 47 91 ?p?s?h???n?i2.G? 90: b2 d6 d0 0b ce 19 d7 ff f9 ff ac 26 0a d8 bd 10 ???????.?.?&???? a0: 00 4b f0 00 00 00 00 00 00 00 00 00 33 00 00 c0 .K?.........3..? b0: 00 54 00 00 00 00 60 02 00 01 ff ff 1f 60 03 00 .T....`?.?..?`?. c0: 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 ................ d0: 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 `............... e0: 00 75 01 00 12 25 03 1e 7d 41 ff ff ff ff ff ff .u?.?%??}A...... f0: ff 00 00 00 00 00 00 80 00 00 80 00 00 80 00 80 .......?..?..?.? После выполнения кода упомянутого выше проекта имеем следующую картину: Код (Bash): pi@raspberrypi:~/Documents/py $ i2cdump -y -r 0x00-0xff 1 0x76 b 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: XX XX XX XX 00 XX 03 00 00 00 00 00 00 00 00 00 XXXX.X?......... 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 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: 84 70 89 73 97 68 d7 06 99 6e 1c 69 32 00 47 91 ?p?s?h???n?i2.G? 90: b2 d6 d0 0b ce 19 d7 ff f9 ff ac 26 0a d8 bd 10 ???????.?.?&???? a0: 00 4b f0 00 00 00 00 00 00 00 00 00 33 00 00 c0 .K?.........3..? b0: 00 54 00 00 00 00 60 02 00 01 ff ff 1f 60 03 00 .T....`?.?..?`?. c0: 00 00 24 ff 00 00 00 00 01 00 00 00 00 00 00 00 ..$.....?....... d0: 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 `............... e0: 00 75 01 00 12 25 03 1e 7d 41 ff ff ff ff ff ff .u?.?%??}A...... f0: ff 00 01 04 24 00 00 53 7f 00 7e 5d 00 77 a8 80 ..??$..S?.~].w?? То есть в регистрах конфигурации 0xf3-0xf5 что-то есть, говорящая надо согласно датшиту, что модуль находится в режиме сна. Но вот незадача: попытка записать регистр с помощью i2cset, заканчивается провалом. Код (Bash): sudo i2cset -y -f 1 0x76 0xf5 0x92 Error: Write failed Что интересно, если попытаться прочесть один какой-то определенный регистр, то с большей долей вероятностью это сделать не получится, но может и получится. То есть в том же скрипте python если начинать читать регистры с 0x00, то они при одном запуске скрипта читаются а при другом нет. Код (Bash): pi@raspberrypi:~/Documents/py $ i2cget -y 1 0x76 0xf4 Error: Read failed pi@raspberrypi:~/Documents/py $ i2cget -y 1 0x76 0xf4 0x03 Как видно из предыдущих таблиц ответ утилиты не соответствует правде. Пока что идея выпаять датчик от Raspberry pi и подключить его к какому-нибудь микроконтроллеру для диагностики. Мне кажется, что проблема либо в модуле ядра i2c... , либо в датчике. Все предположения делал из беглого прочтения датшита, может есть кто знающий?
Вот его для ясности мне и не хватает. Выпаял bme280, припаял bmp280. BMP280 работает нормально. Вообще оба датчика имеют линейные преобразователи напряжения, а на шине i2c у них стоят конвертеры логических уровней. Мне кажется что-то из этого вышло из строя на bme280. Запитаны они от 3,3 в.