LoPy and custom PCB with L76-L GPS module



  • We're trying to implement custom PCB with the same module as used in PyTrack - Quectel L76-L.
    This question might be a bit off topic but is it necessary to use level shifter to talk to this GPS module through I2C bus ?
    We perform i2c.scan() and getting no response from connected and powered module while UART interface works perfectly.

    Are LoPy I2C bus levels compatible with L76-L ?



  • @seb No luck with pull up resistors. There is also garbage when connected on P22/P21.
    PyTrack connected to the same pins with the same settings goes smooth.
    While connecting our L76-L there is no response on I2C ;-( only garbage response for i2c.scan().

    Maybe you reconfigure L76-L chip through UART after mounting ?

    Will try to connect oscilloscope and/or logic analyzer



  • @bobie

    Do you have pullup resistors on the SDA and SCL lines? You will need to connect a 10k resistor between those lines and 3.3V. It's also worth noting that on the Pytrack the I2C is sda='P22', scl='P21'.



  • @bobie It still looks like wrong signals. If you can do so, hook up an oscilloscope and check the signal quality.



  • @seb We connected our Quectel L76-L pins:

    L76-L .................. LoPy
    GND------------------------ GND
    VccInput ----------------- 3.3V VccOut
    SDA ------------------------ P9
    SCL ------------------------ P10

    Then we initiated:
    i2c = I2C(0, I2C.MASTER)
    i2c.init(I2C.MASTER)
    i2c.scan()

    On our L76-L i2c.scan() produces empty array and multiple execution produces sometimes random adresses.

    When we connected PyTrack PCB using only those 4 pins the L76-L from PyTrack gives proper response to i2c.scan()

    What I did wrong ;-( ?



  • I just checked the Pytrack schematic and we use the i2c interface to the module and actually don't have level shifters, that must mean it works ok.



  • @seb OK, will try to use level shifter. Do Pycom use level shifter on its PyTrack module ?



  • @bobie

    Out modules output 3.3v which is above the maximum 3.1V specified there, to be safe I would include level shifters. Simple bi-directional level shifters can be made like so:

    0_1519657652355_1366896b-6981-4748-b469-be068e05c5cb-image.png http://husstechlabs.com/wp-content/uploads/2010/09/Level-shifter.jpg



  • @seb We use LoPy4 so "device" is 3.3V I believe. Quectel says:
    ...

    • I2C_SDA/I2C_SCL is pulled up to 2.8V inside L76-L module. There is no need to add a pull-up resistor externally.
    • The voltage threshold of I2C is 2.8V. If the system voltage is not consistent with it, a level shifter circuit must be used.

    Quectel I2C voltage characteristics:
    VILmin=-0.3V
    VILmax=0.7V
    VIHmin=2.1V
    VIHmax= 3.1V
    VOLmax=0.42V
    VOHmin=2.4V
    VOHnom=2.8V



  • This post is deleted!


  • @bobie

    Is the device a 5v or 3.3v device? If it is 5v you will need to use a level shifter. Do you have pull up resistors for the SDA and SCL lines?



Pycom on Twitter