ADXL372 Eval board, getting 0x00 from DEVID

Dear all,

We bought an eval board for the ADXL372Z, I've connected VS, VIO to 3.3V, MISO, MOSI SCK and CS as standard SPI communication. Both grounds to GND.

I'm trying to see if all works well, but when I try write the command with address 0x01 (so, register 0x00, Read bit ON), I get 0x00 as byte response.

Trying to read the registers after that one (register 0x01, 0x02, 0x03) I get always 0x00 or 0xFF.

I see there is a reset command, register 0x41, tried also to write to this address, with the following data being 0x52 (as per datasheet "Writing code 0x52 resets the device."), before doing any read from other registers, but still same behavior. 

Is there a way to see what's going on? Do I need to send specific power on commands first?

SPI works on my side, I've also lowered the speed to 50 KBs, same happens. Also clock polarity is 0, clock phase is 0 as well (as per datasheet). CPOL = 0, CPHA = 0.

Wires going from board to my MCU is like 20 cm long, will this be an issue?

Any pull up/down I need on my side?

Thanks,

S



Added some more info
[edited by: Rusty81 at 3:13 PM (GMT -5) on 15 Nov 2021]
  • Hi Rusty81, 

    Can you please double check if the SPI clock phase and polarity are set to 0? 

    If this does not solve the problem, can you please send a scope capture of the SPI transaction? 

    Thanks, 

    Pablo

  • Thanks for you reply Pablo.

    I think this part is dead, as I get random 0x00 and 0xFF from the lower addresses.

    Just to avoid another fault:

    1. Do I need pull ups/down on SCK, MISO, MOSI, CS lines?
    2. Do I need to connect both grounds or one is enough?
    3. Is there any issue if I power with 3.3V both VS and VIO (I will short these two if that's the case)

    I'm referring to this evaluation board: EVAL-ADXL372Z Evaluation Board | Analog Devices

    Thanks,

    KR

    S

  • Hi, 

    1) you do not need to pull/down the SPI bus lines. 

    2) one ground enough

    3) you can power both, Vs and Vddio, with 3.3V. Make sure the transient when Vs goes high does not over 3.6V. This can damage the sensor. 

    Regards, 

    Pablo.  

  • Hi, thanks for your help.

    I managed to make it work and seems ok, but the readings are kind of noisy, and increasing the bandwidth/ODR makes things worse.

    My registers setup, at POR, is the following: (adis_write_byte(address, byte);

    All registers are also read back to make sure the value has been written, read back is omitted here..

    adis_write_byte(0x3C, 0x01); //INT2 map to DATA_READY

    adis_write_byte(0x3e, 0x0A); //00001010, Low noise 800Hz BW

    adis_write_byte(0x3D, 0x40); //010 000 0 0,  ODR @1600 Hz

    adis_write_byte(0x3f, 0x1F); //000 1 1 111, Full bandwidth and HPF, LPF disabled, settle time 16ms

    Interrupt is attached to INT2 pin on posedge, basically when I have a posedge I read the xyz axis and convert them to decimal, then wait for the next interrupt from dataready:

    //Read x axis high nibble and low nibble
    x_h = adis_read_byte(0x08);
    x_l = adis_read_byte(0x09);

    //Read y axis high nibble and low nibble
    y_h = adis_read_byte(0x0a);
    y_l = adis_read_byte(0x0b);

    //Read z axis high nibble and low nibble
    z_h = adis_read_byte(0x0c);
    z_l = adis_read_byte(0x0d);

    x_acc = nibbles_to_signed_int(x_h, x_l);
    y_acc = nibbles_to_signed_int(y_h, y_l);
    z_acc  = nibbles_to_signed_int(z_h, z_l);

    The noise coming out is kind of constant, and increases with ODR/BW configurations.

    This is just sitting on my desk with no movement:

    200 BW, 400 ODR

    400 BW, 800 ODR

    800 BW, 1600 ODR

    If I activate the LPF things don't change much, and oscillation is added on top of this noise.

    Tried also selecting different filter settling times, nothing really changes.

    I have a couple of questions:

    1. What is the best setup to filter out some of this noise? 
    2. I have a constant offset as you can see, X,Y,Z is not 0,0,-1, is this due to the fact that the power supply is 3.3 instead of 2.5V?
    3. LSB variation of 0.2 0.3 g-force is expected as the maximum resolution I can get, but is that possible to clean up the signal a little bit?
    4. Is data ready interrupt cleared automatically when I perform a read on x,y,z registers ?
    5. Is the ODR considered per axis or per triplet? for example with ODR 400Hz I get x,y,z values 400 times per second or I get 400 / 3 ? 

    I don't need any FIFO as I just need to read the acceleration values and store it as a datalogger, I know I could filter the data after the acquisition and cancel the offeset, but would be nice, if possible, to have cleaner data from the accelerometer directly.

    Thanks a lot for your support.

    S

  • On top of this, if it might be of interest, I have a weird MISO line coming out from the ADXL372.

    Whilst I have no problem on writing and reading data through SPI (1 MHz at the moment) I see a weird MISO line, MOSI and CLK look good though).

    Do I need to pull down the line with a resistor? Is it because of the 3.3V supply instead of 2.5? Both VI and VIO are at 3.3V on the ADXL.

    MISO looking weird

    MOSI looks fine

    Any advice on this? I don't think is affecting the XYZ readings as I get very low oscillations around the expected values, most probably noise.

    Thanks again,

    S