Bme280 неожиданно отказал.

Тема в разделе "Raspberry Pi", создана пользователем Un_ka, 24 сен 2021.

Метки:
  1. Un_ka

    Un_ka Гуру

    Итак имеем проблему:
    • Датчик долгое время с отключением на ночь работал (получение данных происходила в скрипте python), но вдруг без видимых на то причин отказал. Screenshot_2021-09-24-20-24-47-452_cc.blynk.jpg В одно прекрасное утро что-то пошло не так.
    • Поучение ошибки А в скриптах 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... , либо в датчике.
    Все предположения делал из беглого прочтения датшита, может есть кто знающий?
     
  2. parovoZZ

    parovoZZ Гуру

    достаточно сесть на шину лог. анализатором и всё станет понятно.
     
  3. Un_ka

    Un_ka Гуру

    Вот его для ясности мне и не хватает.
    Выпаял bme280, припаял bmp280. BMP280 работает нормально. Вообще оба датчика имеют линейные преобразователи напряжения, а на шине i2c у них стоят конвертеры логических уровней. Мне кажется что-то из этого вышло из строя на bme280.
    Запитаны они от 3,3 в.