Hello,
I am using zephyr on a nRF52840 to communicate with a vl53l5cx TOF sensor using I2C. When I use i2c_reg_read_byte() or i2c_burst_read(), the device address is sent, the internal register is sent, and then when read command is sent I receive no ACK and no error is returned from the function. Writing using the same functions work as expected. I am using sdk 1.9.1. Any help would be appreciated.
#include <zephyr.h> #include <device.h> #include <drivers/sensor.h> #include <stdio.h> #include <sys/printk.h> #include <drivers/i2c.h> #define TOF_I2C_ADDR (0x52 >> 1) void main(void) { const struct device *i2c_dev = device_get_binding("I2C_0"); int ret; uint8_t buf[1]; buf[0] = 0x1; //buf[1] = 0x2; //buf[2] = 0x3; //buf[3] = 0x4; if (i2c_dev == NULL) { printk("Could not get device\n"); return; } i2c_configure(i2c_dev, I2C_SPEED_SET(I2C_SPEED_STANDARD)); k_msleep(10); while (1) { ret = i2c_reg_read_byte(i2c_dev, TOF_I2C_ADDR, 0x00, buf); if (ret) { printk("Failed to read/write byte: %d\n", ret); } //printk("Buf: [%d, %d, %d, %d]\n\n", buf[0], buf[1], buf[2], buf[3]); printk("Buf: [%d]\n\n", buf[0]); k_msleep(1000); } }
Thanks,
Jacob