Hey,
I am attempting to communicate with a DS28E17 over 1-wire to control an I2C ADC (ADS1119), using an ESP32S3 as the micro controller. Everything appears to work fine, as long as the last bit of my I2C write data isn't a 1.
When the last data bit ends in a 1, DS28E17 doesn't begin the I2C transaction checking the status bit shows that the CRC has failed.
For example 1 wire data packet
0x4B,0x80,0x02,0x40,0x01,0x23,0xF1 = no I2C data sent (CRC fail)
0x4B,0x80,0x02,0x40,0x02,0c63,0xF0 = successful I2C transaction.
This data is:
0x4B (command to perform I2C write)
0x80 (left shifted I2C address of ADC)
0x02 (data length)
0x40 (command to write to register 0)
0x01/0x02 (data to write to register)
I've calculated the CRC both by inverting the output of the CRC16-arc algortithm and by copying the linux crc16 look-up table approach, getting the same result for each.
To test I added a loop attempting to send 0-0x0A to the config register of the ADC.
0x00 -> success
0x01 -> no i2c transaction attempted
0x02 -> success
0x03-> no i2c transaction attempted
and so on.
Does anyone have any idea what could be causing this?
Edit Notes
Updated, made a mistake in printing meaning of status code and thought I was getting I2C address not acknowledged, but it is CRC failure.[edited by: Liamm36 at 4:10 PM (GMT -5) on 14 Jan 2026]