doc.nit.ac.ir/.../3-Mazidi-8051.pdf
Unfortunately, some I²C hardware implementations are not as good as they should be. So doing it the hard way is sometimes the only sensible way out of a tricky situation. Everybody can state anything, but it would be valuable o know which.
I have two cases from fora and one from experience where "I²C hardware implementations are not as good as they should be" was not true, it was "the implementer of code for the I²C hardware implementations that was not as good as he should be"