I followed this example to enable I2C for my sensor: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-6-serial-com-i2c/topic/exercise-1-6-2/.
However, my sensor uses 16-bit address instead of 8-bit as in the example. Can you help me to implement read/ write to 16-bit register addresses
Board: nRF53
IDE: nRF Connect SDK
int i2c_init() { if (!device_is_ready(dev_i2c.bus)) { printk("I2C bus %s is not ready!\n\r",dev_i2c.bus->name); return -1; } printk("I2C bus 0x%x is ready!\n\r",dev_i2c.addr); return 0; } int write_to_16bit_reg(const struct i2c_dt_spec *spec, uint16_t reg_addr, const uint8_t *data, uint32_t data_length) { uint8_t buffer[2 + data_length]; buffer[0] = (uint8_t)((reg_addr >> 8) & 0xFF); // MSB of the register address LOG_INF("buff[0] = %x", buffer[0]); buffer[1] = (uint8_t)(reg_addr & 0xFF); // LSB of the register address LOG_INF("buff[1] = %x", buffer[1]); // Copy the data to send after the address bytes memcpy(&buffer[2], data, data_length); // Write the buffer to the I2C device return i2c_write_dt(spec, buffer, 2 + data_length); } void hm01b0_init(void) { int ret; uint16_t reg_address = 0x1234; // Example register address uint8_t data_to_write[] = {0x00}; // Example data LOG_INF("Before write"); ret = write_to_16bit_reg(&dev_i2c, reg_address, data_to_write, sizeof(data_to_write)); LOG_INF("After write"); }
With this code I am getting the below error
I am using nRF53 board. Have configured i2c1 in overlay file. Have used default pins: SCL - P1.3 and SDA - P1.2