Post Go back to editing

DEC_RATE Readback Failure

Category: Hardware
Product Number: ADIS16505-2

The datasheet for the ADIS16505 specifies that the DEC_RATE register requires up to 30us after writing changes to indicate the updated value during readback.

I have implemented the appropriate 30us delay in my code between writing the value and reading it back to verify the transaction was successful, however the readback value is incorrect. Even doubling the delay to 60us is not sufficient.

I know for sure the write was successful because if I repeat the register read some time later, the value is correct. This behaviour can be observed in the scope capture below.

I first write the value 0x0004 to register 0x64 (MOSI = 0xE404, 0xE500) followed by a 60us delay. Then I read back register 0x64 (MOSI = 0x6400) expecting MISO = 0x0004 however instead I get MISO = 0x0000. Over 100us later I repeat the readback of register 0x64 and this time MISO matches the expected 0x0004.


What is the proper sequence and timing to perform a write-verify operation?

Thank you for posting your question. I can see that you have already checked some of our other FAQs. To better understand the issue with the specific IMU, I would suggest implementing a loop where the write and immediate read-back are repeated multiple times (e.g., 20-100 times in quick succession) to see if the problem occurs randomly or if it is consistently time-related.

Although you have tried doubling the delay, I recommend gradually increasing it to see if a longer delay consistently resolves the issue for the first read. Let me know if you need further assistance.

  • Hi,

    The ADIS1650x has two types of registers - basic data registers, which can always be read back with a read command after the IMU stall time (15us), and configuration registers, which trigger additional processing on the IMU - this includes DEC_RATE, MSC_CTRL, and other similar registers. For these configuration registers, the register value is only updated once the additional processing has completed, and the IMU has returned to normal operation. At this point, you can read the register (DEC_RATE) and check that the correct configuration value was applied.

    If you have access to the data ready signal you can detect the IMU returning to normal operation by setting up an interrupt or similar on the data ready active edge, which indicates fresh inertial data is available. You could then read DEC_RATE to verify the value was written correctly, then continue any other configuration of the IMU. If you don't have access to data ready (which I would highly recommend for data synchronization), you can poll DEC_RATE until you read the correct value or reach some timeout threshold.

    Regards,

    -Alex

  • For future reference, I've highlighted all control registers in the register map, which will show this behavior.

    Note, GLOB_CMD is write-only, so you cannot read back the command bits written.

    As an example, I've highlighted the behavior of writes to MSC_CTRL and DEC_RATE in the logic analyzer captures below:

    Note, the delay from the register value updating to the new sample being available is driven by the IMU sample rate - in the DEC_RATE write capture, there is an approx. 1ms delay, due to the ODR of 1KHz (2KHz / (1+1)). In the MSC_CTRL capture, the delay is approximately 500µs, based on the default ODR of 2KHz.