The only difference that I'm aware of is that I2CCmd() performs an I2CStop() at the end of the sequence that you gave
Actually, I had accidentally omitted the I2CStop() at the end. I placed it there and the functionality of the low-level technique was unchanged.
I had suspected that the low-level code I used was completely replicating the functions of the I2CCMD(), but I was not sure.
I will try slowing down the I2C speed and see if that makes a difference.
I just tried the example source code from Application Note AN208 and it worked fine on the following devices ZX-24e, ZX-1281e, ZX-24ne. What device are you using?
I tried it with a SRF08 software version 8. The same one that I used to create the original application note.
The device I am using is a Devantech SRF08, but it is not new. I think it is about 3 years old, maybe 4. I am not sure of the software version of the SRF08. Is this read from byte 0?
-Tony
EDIT: I am using a ZX-24 for this project. Actually, it the Beta device that I had been given a long time ago. It is nearly identical to the current production units. Since the low-level interfacing works, then I do not think that it is a hardware problem at all.
EDIT(2): My SRF08 is using version 5 firmware.