Another Barometer issue on Navio2

Hello Emlid Community,

I have this annoying ms5611 baro detection issue that I cannot seem to wrap my head around on my navio2. I have tried debugging this problem through several ways, which I will explain below.

First, my setup:

  • uname -a output:

Linux navio1 4.19.127-emlid-v7+ #1 SMP PREEMPT Mon Aug 24 19:50:57 MSK 2020 armv7l GNU/Linux

  • PX4 invocation output:

    NFO [px4] assuming working directory is rootfs, no symlinks needed.


    | ___ \ \ \ / / / |
    | |/ / \ V / / /| |
    | __/ / \ / /
    | |
    | | / /^\ \ ___ |
    _| / / |_/

    px4 starting.

    INFO [px4] Calling startup script: /bin/sh px4.config 0
    INFO [dataman] Unknown restart, data manager file ‘./dataman’ size is 11798680 bytes
    mpu9250 #0 on SPI bus 0 (devid=0x1)
    lsm9ds1 #0 on SPI bus 0 (devid=0x3)
    lsm9ds1_mag #0 on SPI bus 0 (devid=0x2)
    WARN [SPI_I2C] UnknownApp: no instance started (no device on bus?)
    INFO [commander] LED: open /dev/led0 failed (22)
    INFO [mavlink] mode: Normal, data rate: 1000000 B/s on udp port 14556 remote port 14550
    INFO [mavlink] mode: Normal, data rate: 2880 B/s on /dev/ttyAMA0 @ 57600B
    INFO [linux_pwm_out] Loaded mixer from file etc/mixers/quad_x.main.mix
    INFO [linux_pwm_out] Starting PWM output in Navio mode
    INFO [logger] logger started (mode=all)
    INFO [px4] Startup script returned successfully
    pxh> INFO [mavlink] using network interface wlan0, IP: 192.168.1.99
    INFO [mavlink] with netmask: 255.255.255.0
    INFO [mavlink] and broadcast IP: 192.168.1.255
    INFO [mavlink] partner IP: 192.168.1.2

  • emlidtool output:

    emlidtool version: 1.0.8
    Vendor: Emlid Limited
    Product: Navio 2
    Issue: Emlid 2020-09-22 716f472abba15f9ec2b6fc51f498538e3c041d42
    Kernel: 4.19.127-emlid-v7+
    RCIO firmware: 0xb9064332
    2020-10-21 12:30:10 navio1 root[1506] INFO mpu9250: Passed
    2020-10-21 12:30:10 navio1 root[1506] ERROR ms5611: Failed
    – Reason: Is barometer covered with a foam?
    2020-10-21 12:30:10 navio1 root[1506] INFO adc: Passed
    2020-10-21 12:30:10 navio1 root[1506] INFO pwm: Passed
    2020-10-21 12:30:10 navio1 root[1506] INFO rcio_status_alive: Passed
    2020-10-21 12:30:10 navio1 root[1506] INFO lsm9ds1: Passed
    2020-10-21 12:30:10 navio1 root[1506] INFO gps: Passed
    2020-10-21 12:30:10 navio1 root[1506] INFO rcio_firmware: Passed

  • i2cdetect -y output:

    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
    10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
    20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
    30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
    40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
    50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
    60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
    70: 70 71 72 73 74 75 76 77

  • Pictures of Setup:

  • What I have tested
  • I have purchased a standalone ms5611 barometer that I have connected to the Raspberry Pi (3B) without the Navio2 attached. I am able to detect the ms5611 barometer as long as the Navio2 shield is detached.
  • output of i2cdetect:
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: – -- – -- – -- – -- – -- – -- –
    10: – -- – -- – -- – -- – -- – -- – -- – --
    20: – -- – -- – -- – -- – -- – -- – -- – --
    30: – -- – -- – -- – -- – -- – -- – -- – --
    40: – -- – -- – -- – -- – -- – -- – -- – --
    50: – -- – -- – -- – -- – -- – -- – -- – --
    60: – -- – -- – -- – -- – -- – -- – -- – --
    70: – -- – -- – -- – 77
  • Output of PX4 on boot with no shield, but standalone ms5611 module connected:
    INFO [px4] Calling startup script: /bin/sh px4.config 0
    INFO [dataman] Unknown restart, data manager file ‘./dataman’ size is 11798680 bytes
    WARN [SPI_I2C] UnknownApp: no instance started (no device on bus?)
    WARN [SPI_I2C] UnknownApp: no instance started (no device on bus?)
    WARN [SPI_I2C] UnknownApp: no instance started (no device on bus?)
    ms5611 #0 on I2C bus 1 (external)
  • I then reconnected the Navio2 shield to the Raspberry Pi, and made sure the connectors are making contact by using a multimeter to check the resistance b/w GPIO pins 2 & 3 (I2C SDA and I2C SDL, respectively) and the same pins on the i2c connector on the side of the Navio2 shield. They were shown to be connected.
  • I then connected the standalone ms5611 barometer through the i2c connector on the side of the Navio2, and when powering up the navio2 board, I am now unable to connect with the standalone ms5611 barometer that I could connect with before without the Navio2 shield. The standalone barometer module is definitely showing that it is powered (LED on it is lit up), but now I cannot communicate with it when using the Navio2 shield as an intermediary. The steady state voltages on the SDA and SCL pins are 3.29V and 3.27V, respectively (while the voltages on these lines were 3.29 and 3.29 each without Navio2 shield).

Given that I’ve seen several different posts on this community about the barometer specifically failing to be detected, with some resulting in suggestions to communicate with Emlid support, has Emlid found any reason (other than the shield isn’t seated correctly, which isn’t the problem on my side) that could explain this? I did have a power failure and an RPi FS corruption in the past, and after that, i2c bus devices seem to have become undetectable (but only with shield attached). Are there cases where the Navio2 ARM microcontroller, when in a corrupted flash state, will boot up in i2c master mode (when the Pi is supposed to be the i2c master?). I only ask b/c when I tried to explictly set the output the RPi GPIO’s 2 and 3, they won’t drop to 0 volts (but instead drop to ~2.3 volts – as if some other device is trying to drive high on the SDA and SCL lines). Without the navio2 attached, I am able to drive these pins to 0 volts, which makes me think something is getting in the way of this on the navio2 shield side.

Any advice is appreciated, and if there is a way to reprogram the EMLID navio2 microcontroller flash, let me know!

Best,

Andrew

Hi Andrew,

Thanks for the detailed explanation of the issue!

I’d like to ask you to run the Barometer.py example on Navio2 and post the results here. PX4 needs to be disabled and everything should be disconnected from the I2C port when you launch the script. Also, please cover the barometer with open cell foam.

Thanks for the reply. With px4 disabled and the barometer covered in foam, this is the output of Barometer.py:

pi@navio1:~/Downloads/emlid/Navio2/Python $ python Barometer.py 
Traceback (most recent call last):
  File "Barometer.py", line 19, in <module>
    baro.initialize()
  File "/home/pi/Downloads/emlid/Navio2/Python/navio/ms5611.py", line 121, in initialize
    C1 = self.bus.read_registers(self.__MS5611_RA_C1) #Pressure Sensitivity
  File "/home/pi/Downloads/emlid/Navio2/Python/navio/ms5611.py", line 73, in read_registers
    return self.bus.read_i2c_block_data(device_address, reg_address)
IOError: [Errno 121] Remote I/O error

Hi Andrew,

When have you noticed that the barometer on Navio2 started to behave this way?

I wish I had a precise answer to your question, but I think it happened after attaching an external i2c LIDAR that was powered through a separate BEC (I used an ESC with BEC to provide enough power to the LIDAR). The 5V power and ground wires had their insulation melt against the heat sink (hindsight is 20/20), and the two shorted. I didn’t have the 5v/ground connected from this external BEC, as I didn’t want the external BEC powering the Navio2.

Hi Andrew,

Seems that the connection of the LIDAR via I2C damaged Navio2. If the original barometer doesn’t operate correctly, it’s more likely that the Navio2’s components were burnt. I believe sticking to the external barometer is the only possible resolution here.