I2C Bus Errors

  • I am reading GPS data using MicroGPS library (much better than native one of Pycom, IMO).
    However, I get frequent I2C Bus Errors. In the reading code below the exception happens multiple times

    Any ideas why am I getting this frequently?

    def ReadInput(self):
            print("### Entered ReadInput")
                    self.raw = self.i2c.readfrom(GPS_I2CADDR, 64) #16)
                    print("Raw data: {}".format(self.raw))
                    # feed into gps object
                    for self.b in self.raw:
                        self.sentence = self.gps.update(chr(self.b))
                        if self.sentence is not None:
                            # gps successfully parsed a message from module
                            # see if we have valid coordinates
                            # This also fills in last_data
                            print("Got sentence!")
                            self.res = self.check_for_valid_coordinates()
                    self.elapsed = chrono.read()
                    if self.elapsed > GPS_TIMEOUT_SECS:
                except Exception as ex:
                    print("ReadInput loop exception: {}".format(ex.args[0]))                   
            print("### Exiting ReadInput...")
    ### Entered ReadInput
    ReadInput loop exception: I2C bus error
    ReadInput loop exception: I2C bus error
    ReadInput loop exception: I2C bus error
    ReadInput loop exception: I2C bus error
    ReadInput loop exception: I2C bus error
    Raw data: b'57.17932,N,11713.49653,W,0.033,,010320,,,D*75\r\n$GNRMC,032823.00,'
    ### Exiting ReadInput...

  • @securigy the Most i2c errors come from interferences from outside.

    A resistor between the i2c can solve this problem.

  • @securigy said in I2C Bus Errors:

    You need pull-up resistors for SDA and SCL. The have to be places between each of these signals and 3.3V. Tpyical value range: 4.7 - 10 kOhm. According to the schematics of this board, there are not such resistors, not on the board and not in the NEO-M8 module.


  • @svonbentzel I use uBlox GPS dev board "GNSS Click 5" - it has really good GPS with Assist GPS (cold start under 30 sec), and I do not have any resistors in between (I am not an EE... and had no idea I needed one, and if I do where exactly and how big/small)

  • @securigy
    What Typ of GPS Sensor you use? Pytrack or an external gps?

    Do you use an resistor between the i2c bus?

  • @svonbentzel I have sleep(1000) between calling the ReadInput function. I tried having 16- and 32-byte buffer, and 64 worked better but yesterday it did not work so well and neither 128... not sure why... I also tried 3 sec and 5 sec sleep between the function call. Any ideas?

  • Do you have a sleep between the readings? Maybe you read to fast?

Log in to reply

Pycom on Twitter