Post Go back to editing

DS28E17 refusing certain I2C transactions with status

Thread Summary

The user encountered CRC failures with the DS28E17 when the last bit of I2C write data was high, preventing I2C transactions. The issue was resolved by adding a 1ms delay between each byte of the data payload, likely addressing a pull-up or capacitance issue on the 1-wire bus. The user confirmed that the CRC calculations were correct using external tools and a logic analyzer.
AI Generated Content
Category: Hardware
Product Number: DS28E17

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]
  • Just to clear up some possible confusion caused by the above edit.

    My question is why am I seeing CRC failures only when the final bit is high. I have observed that the correct data is being sent over onewire using an external logic analyser to capture and decode the signal being sent. I have also double checked the CRC being sent using online CRC calculation tools just to confirm that my implementation of the CRC code is correct. 

    For example using CRC16_MAXIM at https://www.sunshine2k.de/coding/javascript/crc/crc_js.html 

    My CRC being sent matches the calculated value for messages that the DS28E17 counts as valid and begins an I2C transaction, and also for messages that the DS28E17 counts as invalid and does not begin an I2C transaction. 

  • Update, Finally got it working.

    Had to add a 1ms delay between each byte of my data payload. Might have been a pull-up or capacitance issue on our onewire bus.