voxl_i2c_read() function discards first byte from buffer
-
Hello I am using the libaqp8096 i2c functions https://gitlab.com/voxl-public/voxl-sdk/core-libs/libapq8096-io/-/blob/master/lib/include/voxl_io.h specifically voxl_i2c_read() and voxl_i2c_write(). I am using the voxl read and write functions for reading and writing multiple bytes at a time.
When I print out the read and write buffers, it looks like it properly writes to the buffer but the results from the read buffer are incomplete. For example, if I write uint8_t wrbuffer = 0x1234 to register address 0x0004, it writes 00 04 12 34 (the first two bytes for the address) and reads back 02 34. Another example: I wrote uint8_t wbuffer[4] = {33,55,77,99} and it read back 01 55 77 99.
I noticed this issue happens with a write then read. If I read from a read-only buffer, it reads correctly.
-
@jameskuesel What device do you have on the i2c bus?
-
@Eric-Katzfey a TOF ranging sensor - VL53L1CB by ST
-
hmmm, There is a similar (but not exactly the same) behavior with SPI on APQ8096 where all reads are preceded by a single random byte meaning libvoxl-io needs to read one extra byte than expected and then discard the first dummy byte. However this happens under the hood here:
I've not seen such a thing with I2C. Have you looked at our VL53L1X driver for APQ8096? It might just work with your newer VL53L1CB sensors with small changes.
https://gitlab.com/voxl-public/voxl-sdk/services/apq8096-rangefinder-server