One of the few issues facing owners of the new iPhone 5s is the compass and built-in level: they are woefully off, leading to drifting issues in games that require the accelerometer for steering. How could Apple mess up something so fundamental? According to a new teardown, it looks like the culprit is a new chip supplier.
According to developers RealityCap, the reason the level in the iPhone 5s is off is because they switched accelerometer suppliers. Previous iPhone devices used the STMicroelectronics accelerometers, but the iPhone 5S uses a Bosch Sensortech. And these two accelerometers don’t have the same specs.
You see, accelerometers depend on two measurements for accuracy: variance (how consistent an accelerometer’s readings are) and bias (which tells you how inaccurate the accelerometer is just through manufacturing).
Here’s the problem: the new accelerometer has a MUCH different bias than previously:
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.
Weirdly, Apple could have fixed this in the factory through calibration but didn’t. Luckily, developers can compensate for it themselves:
It is possible to work around the problem by incorporating a calibration procedure into apps. This procedure would ask the user to place the device in different orientations to determine the accelerometer bias. Apps can then subtract this measured bias from the data coming from the accelerometer to get a corrected reading.
To make things easier for devs, RealityCap is planning on releasing code that will make the fix easily. Apple, meanwhile, does not appear serious about fixing the problem, leaving developers to do it for them.