I am trying to get the self-test working for the accelerometer of the BMI085. It seems to work fine with the gyroscope part. I have followed section 4.6.1. of the data sheet, but my problem is that applying particularly the negative self-test polarity seems random at best - most times, it does not seem like it is applied to the MEMS structure. The positive one is applied, but it seems when the accelerometer is placed flat, e.g. zero gravitational force on X/Y, there is only very little positive self-test charge applied to it, like 20 mG. Between retries, I do a full reset. Otherwise the accelerometer works well.
I notice that during the self-tests interrupts are changed to 50 Hz instead of the 200 Hz, I'm usually running, but I suppose it is not a problem to retrieve data based on data ready during self-tests, instead of manually polling for values.
My question is thus: Is there anything known bugs or erratas with the self-test of the accelerometer internally in the BMI085? Is the description of Section 4.6.1. fully correct?
Thanks for your message. Please note that for BMI085 accelerometer self-test in section 4.6.1 you need to set the accelerometer to +/-16g full scale range and 1.6KHz output data rate. If you enable DRDY interrupt signal, then you should see 1.6KHz pulses. Please follow the procedure for acceleromter self-test described in section 4.6.1 of BMI085 datasheet.
First and foremost, thank you very much for responding so quickly - apologies for not following up on this. I found the mistake due to your help - about how the 1.6 kHz SHOULD be visible on interrupt. But my problem was actually due to a mistake in the datasheet in section 4.6.1 in step 2, where I'm instructed to write 0xA7 to ACC_CONF. This is incorrect, as the ODR is 0x07 (50 Hz) and not 1.6 kHz. The bullet points below are correct, although terms such as norm_avg4 etc. is not used elsewhere in the data sheet - so skipped them completely. So instead 0xAC should be written to ACC_CONF, and then the self-test works well, at least for the single unit I tried this on