分类: 嵌入式
2011-08-30 23:22:18
Hi all, Recently, I am facing a mysterious I2C proble problem. Sometimes, the Light and Proximity I2C sensor may be incorrectly probled. The I2C driver says “no such chip ID”. Especially for a board in my hand, it has a ten or twenty percent chance of incorrectly proble.
In order to reduce the software affection, I remove the sensor kernel driver and just use an i2cdetect tools to analysis this problem. This tool will send the I2C address to the I2C bus and wait for an ACK signal. This afternoon, Mr.H and I checked the I2C bus by oscilloscope, and we found the phenomenon. When the chip failed to proble, it would not return the ACK signal.
Also, we did more tests. First, we thought the VREG_SP3 (1.8V) was too low for the chip, because the datasheet requires a VDD from 1.8V to 3.3V. So, we cut the onboard power line and used a 1.9V external power supply instead. No failure occurred during the following twenty tests. Then, we lowered the external power supply voltage to 1.7V and hoped to catch an I2C failure. Unfortunately, after more than twenty times test, no failure occurred. We continued to lower the voltage, yet I2C still managed to return ACK until the voltage down to around 1.2V. Apparently voltage of VREG_SP3 was not the problem. But it must be something wrong with the VREG.
Then we changed the VDD from VREG_SP3 to VREG_USB, another 1.8V VREG and supplying fewer devices. But the I2C failure still occurred. We moved on and changed the VDD to VREG_WIFI, which is controlled by the WIFI switch in Android. This VERG would not be turned on until Android loads the framework. This time, it seemed to work! No failure after twenty tests.
It seems the I2C problem has something to do with the power sequence. I haven't figure out the problem at the moment. If you're patient enough to read this whole article and have some kind of idea, please tip me off.
Thanks Umineko for some grammar check Rockie Cheng |