A few weeks after the iPhone 5s went on sale, people started noticing that its motion sensors on the device are significantly miscalibrated, and report erroneous motion related data to apps. The iPhone 5 on the other hand, running the same software, reported correct readings, narrowing down the problem to the hardware.
According to RealityCap’s CEO Eagle Jones, the problem might indeed be in the hardware, as Apple has changed suppliers for the accelerometer found in the iPhone 5s.
Jones noticed in the teardown report that Apple has used accelerometers for the iPhone 5s from Bosch, whereas it had used accelerometer for the iPhone 5 from STMicroelectronics.
Jones noted that two properties of an accelerometer, variance and bias, are critical in determining how good the readings are. Variance is the difference in consecutive readings taken in the same conditions, while bias is how off the reading is from the actual value in the current condition.
Now the accelerometers from both STMicroelectronics and Bosch have similar variance, but the bias of Bosch’s sensor is about five times greater than that of STMicroelectronics. He goes on to explain:
This is where we find the problem: the typical bias for the ST part is +/- 20mg, while the Bosch part lists +/-95mg. This almost 5x greater offset range is confirmed by our measurements, and is absolutely consistent with the failures being reported by users and the media. Specifically, a +/- 20mg offset range would translate to around a +/-1 degree accuracy range in tilt detection, and a +/-95mg offset translates to +/-5 degrees in tilt.
iOS doesn’t seem to be taking this difference into consideration, which is why the readings on the iPhone 5s are inaccurate.
Since the bias of an accelerometer doesn’t change, to fix this issue for now, developers could incorporate their own calibration logic to nullify the error, but the goods news is, Apple will be able to solve the issue with a software update.
Based on the publicity this issue has received, we won’t be surprised if Apple fixes the issue in iOS 7.0.3, which is expected to released soon.