Select your product to confirm this information applies to you

Garmin LIDAR-Lite v3 Sensor I2C Guidelines

In August of 2018 Garmin began manufacturing LIDAR-Lite v3 sensors with an updated FPGA platform. This was done to unify that platform across all Garmin LIDAR based products.

In units manufactured prior to August 2018, the I2C interface required a state machine in the FPGA fabric to pull data into and out of the internal I2C peripheral. In that implementation –

  1. Data flow was not well managed
  2. Reading data from an undefined address produces whatever data was read during the most recent successful read of a defined address

When Garmin transitioned to the updated platform in August 2018, the I2C peripheral was replaced with a fully custom I2C interface. This was necessary to gain access to non-volatile memory in the FPGA to support factory calibration of a small distance offset of a few cm observed in some sensors. With the new I2C interface –

  1. Data flow management is improved
    1. The first byte of every write transaction burst is now the FPGA’s register address. In newer sensors this requires customers to write register address and register data in a single burst transaction.
  2. Reading an undefined address produces 0x00 as the read data (which creates less of a headache when trying to debug problems).

For compatibility across all LIDAR-Lite v3 sensors, device I2C writes should take on the following format –

START

Byte1 = Device I2C address (with WR bit)
Byte2 = Register address
Byte3 = Register data

STOP


This is the transaction format described in the v3 user manual. If fewer than three bytes are present in an I2C write transaction a register write cannot occur.

It should be noted that LIDAR-Lite v3 units manufactured prior to August 2018 did not enforce this transaction topology. Those older units allow a single 2-byte transaction to set the write address which can then be followed up with another 2-byte transaction to set the write data. For software in a single threaded system, this is probably fine. In a multi-threaded environment without proper thread locking this method of I2C write transaction handling can be problematic and difficult to debug and therefore cannot be supported by Garmin or its resellers.


For compatibility across all LIDAR-Lite v3 sensors, device I2C reads should take on the following format –

START

Byte 1 = Device I2C address (with WR bit)
Byte 2 = Register address to read from (with optional address auto-increment bit)

STOP

START

Byte 3 = Device address (with RD bit)
Byte 4 = Data0
(more data bytes if desired)

STOP