Interface: I²C, SPI (one 16-bit reading per axis)Minimum operating voltage: 2.5 VMaximum operating voltage: 5.5 VAxes: pitch (x), roll (y), and yaw (z)Supply current: 6 mADimensions: 0.4″ × 0.9″ × 0.1″ (13 × 23 × 3 mm)Weight without header pins: 0.7 g (0.03 oz)Operating voltage: 2.5 V to 5.5 VSupply current: ~6 mASensitivity range (configurable): ±245°/s, ±500°/s, or ±2000°/s
PIN Description
VIN This is the main power supply connection,and it should be powered at 2.5 V to 5.5 V.
The SCL/SPC and SDA/SDI level shifters pull the I²C and SPI bus high bits up to this level.
GND The ground (0 V) connection for your power supply.
Your I²C or SPI control source must also share a common ground with this board.
SCL/SPC Level-shifted I²C/SPI clock line: HIGH is VIN, LOW is 0 V
SDA/SDI Level-shifted I²C data line and SPI data-in line (also doubles as SDO in 3-wire mode): HIGH is VIN, LOW is 0 V
SDO SPI data-out line in 4-wire mode: HIGH is VDD, LOW is 0 V. Also used as a 3.3V-logic-level input
to determine I²C slave address (see below). This pin is not level-shifted and is not 5V-tolerant.
CS SPI enable (chip select). Pulled up to VDD to enable I²C communication by default;
drive low to begin SPI communication.
DRDY/INT2 Data ready indicator, a 3.3V-logic-level output. HIGH (3.3 V) indicates angular rate data can be read.
Can also be configured as a FIFO interrupt. This output is not level-shifted.
INT1 Programmable interrupt, a 3.3V-logic-level output. This output is not level-shifted.
DEN Data enable trigger, a 3.3V-logic-level input. This input is not level-shifted and is not 5V-tolerant.
I²C Communication
With the CS pin in its default state (pulled up to VDD), the L3GD20H can be configured and its angular velocity readings can be queried through the I²C bus. Level shifters on the I²C clock (SCL) and data (SDA) lines enable I²C communication with microcontrollers operating at the same voltage as VIN (2.5 V to 5.5 V). A detailed explanation of the I²C interface on the L3GD20H can be found in its datasheet (3MB pdf), and more detailed information about I²C in general can be found in NXP’s I²C-bus specification (371k pdf).
In I²C mode, the gyro’s 7-bit slave address has its least significant bit (LSb) determined by the voltage on the SDO pin. The carrier board pulls SDO to VDD through a 4.7 kΩ resistor, making the LSb 1 and setting the slave address to 1101011b by default (this is the same slave address as the L3GD20). If the gyro’s selected slave address happens to conflict with some other device on your I²C bus, you can drive SDO low to set the LSb to 0.
In our tests of the board, we were able to communicate with the chip at clock frequencies up to 400 kHz; higher frequencies might work but were not tested.
SPI Communication
To communicate with the L3GD20H in SPI mode, the CS pin (which the board pulls to VDD through a 4.7 kΩ resistor) must be driven low before the start of an SPI command and allowed to return high after the end of the command. Level shifters on the SPI clock (SPC) and data in (SDI) lines enable SPI communication with microcontrollers operating at the same voltage as VIN (2.5 V to 5.5 V).
In the default 4-wire mode, the gyro transmits data to the SPI master on a dedicated data out (SDO) line. If the SPI interface is configured to use 3-wire mode instead, the SDI line doubles as SDO and is driven by the L3GD20H when it transmits data to the master. A detailed explanation of the SPI interface on the L3GD20H can be found in its datasheet (3MB pdf).
Sample Code
We have written a basic Arduino library for the L3G that makes it easy to interface this sensor with an Arduino. The library makes it simple to configure the L3GD20H and read the raw gyro data through I²C.
Protocol Hints
The datasheet provides all the information you need to use this sensor, but picking out the important details can take some time. Here are some pointers for communicating with and configuring the L3GD20H that we hope will get you up and running a little bit faster:
The gyro is in power down mode by default. You have to turn it on by writing the appropriate value to the CTRL1 register.
You can read or write multiple registers in a single I²C command by asserting the most significant bit of the register address to enable address auto-increment.
You can enable the same auto-increment feature in SPI mode by asserting the second bit (bit 1, called the MS bit in the datasheet) of an SPI command.