A device can acknowledge every byte of an SMBus transaction yet reject its packet error code. The usual investigation should begin with the byte stream included in the calculation, not with changing pullup resistors. A correct CRC algorithm still produces the wrong result when it receives an incomplete or differently ordered message.
Use the transaction definition
The SMBus specification version 3.3.1 defines PEC using CRC-8 with the polynomial x to the eighth plus x squared plus x plus one. The calculation includes transmitted address, command, and data bytes, while bus conditions and acknowledgment bits are excluded.
Identify the exact protocol used by the device and whether PEC is required or supported for that operation. Do not append a byte to an arbitrary I2C transaction and assume it has become a valid SMBus PEC transaction.
Write the bytes in wire order
Create a byte list directly from a captured transaction. Include the address byte with its read or write bit in the form actually transmitted. A software API may accept a seven bit address while placing an eight bit address field on the wire, so document that conversion.
For a combined operation, preserve the complete message across the repeated start according to the protocol. Do not automatically reset the CRC because the transfer direction changes. Similarly, do not include the repeated start itself as if it were a data byte.
Compare independent calculations
Use a small known transaction and calculate its PEC independently of the production driver. Compare the input bytes first, then compare the result. If two implementations disagree, inspect initialization, bit order, and byte order against the specification and device documentation.
Avoid testing only constant zero payloads. Include address changes, multibyte values, and patterns with different bit positions. Where the device has a documented response to an invalid PEC, deliberately exercise that response in a controlled test to confirm error handling.
Keep transport and application errors separate
Log whether a failure was an acknowledgment error, timeout, PEC mismatch, or unexpected application value. Retrying every failure without classification can hide a systematic byte construction bug. Also determine whether a failed write may have changed device state before deciding to retry it.
Save the complete captured byte list, expected PEC, observed PEC, and protocol name with the test. This compact evidence allows a reviewer to reproduce the calculation without the original hardware. Once the byte map is correct, electrical integrity and timing can be investigated separately when mismatches remain intermittent.
Move from reading to a build-ready project
Use the fabrication and assembly checklists to prepare drawings, production files and test requirements.
Open the DFM checklist