SparkFun Forums 

Where electronics enthusiasts find answers.

For the discussion of Arduino related topics.
By randomvibe
#189665
I've been having a rough time communicating with my Sparkfun LSM6DS3 IMU. Can't even get it to send the WHO_AM_I value. No matter what I do, the code below returns 255. I tried another LSM6DS3 chip, but same issue. I2C works for both so the chips are functioning.

The Arduino Due pinout diagram shows +5V next to the SPI MOSI pin. Are the MOSI/MISO +5V pins? My IMU is a 3.3V device. Could this be the problem? Or maybe the code below is wrong? Appreciate your help.
Code: Select all
#include <SPI.h>

#define SSX  10

void setup() {

    uint8_t  result1, result2;
    uint8_t  target = 0X0F;

    Serial.begin(115200);
   
    pinMode(SSX, OUTPUT);
    digitalWrite(SSX, HIGH);   

    SPI.begin(SSX);
    SPI.setBitOrder(MSBFIRST);
    SPI.setDataMode(SSX, SPI_MODE3);
    SPI.setClockDivider(SSX,10);        // Due: (pin,divider) where divider is any value from 1 to 255

    delay(1000);

    digitalWrite(SSX, LOW);             // Select chip

        result1 = SPI.transfer(SSX, 0x80 | target, SPI_CONTINUE); 
        result2 = SPI.transfer(SSX, 0x00, SPI_LAST);
                 
    digitalWrite(SSX, HIGH);            // De-select chip

    Serial.println("Who Am I:");
    Serial.println(result1);
    Serial.println(result2);
}

void loop() {
}