Reviewing the Kinect BOM here:
http://www.eetimes.com/electronics-news/4210649/Kinect-s-BOM-roughly--56--teardown-finds-
There are a couple of flash EEPROM's that should contain the Kinect
firmware:
"H1025519 XBOX1001 X851716-006 GEPP – Serial EEPROM for Marvell
Controller"
"STMicroelectronics 25P16V6G - M25P16 - 16 Mbit, low voltage, Serial
Flash memory with 50 MHz SPI bus interface"
Since it would be useful to know what the firmware does to be able to
better interface with the Kinect, it would be nice to get a dump of
the contents of these chips. After briefly considering clipping the
chip and dumping it the hard way, there seemed to be a better
alternative to having a pile of spare Kinect parts lying around. That
being that Microsoft most likely distributes these firmware updates;
probably with the Kinect games or with Xbox system updates as
suggested here:
http://www.joystiq.com/2010/10/28/psa-got-a-kinect-game-early-dont-stick-it-in/
It seems at the moment, Microsoft deploys firmware updates via both of
those routes. The most recent Xbox system update here:
http://download.microsoft.com/download/4/1/D/41D9A2BA-3B48-4BD5-B613-122E7C3A1390/SystemUpdate12611.zip
Unzipping this file you end up with the following:
Archive: SystemUpdate12611.zip
----
$systemupdate/AvatarEditor.xex
$systemupdate/BiometricSetup.xex
$systemupdate/Dash.AttractionScreen.xex
$systemupdate/dash.ExtraAVCodecs.xex
$systemupdate/Dash.FieldCalibration.lex
$systemupdate/dash.firstuse.xex
$systemupdate/Dash.MP.Offline.lex
$systemupdate/dash.natalpregame.xex
$systemupdate/dash.NuiFirstUse.xex
$systemupdate/dash.nuihub.xex
$systemupdate/Dash.NuiTroubleshooter.lex
$systemupdate/dashnui.xex
$systemupdate/FFFE07DF00000001
$systemupdate/FFFE07DF00000002
$systemupdate/FFFE07DF00000006
$systemupdate/FFFE07DF00000008
$systemupdate/Guide.AvatarMiniCreator.xex
$systemupdate/Guide.NuiTroubleshooter.xex
$systemupdate/livepack.xex
$systemupdate/mediasite.xzp
$systemupdate/natalsu.xex
$systemupdate/nuihud.xex
$systemupdate/su20076000_00000000
$systemupdate/system.manifest
$systemupdate/Xam.Community.xex
$systemupdate/Xam.LiveMessenger.xex
$systemupdate/Xam.WordRegister.xex
$systemupdate/XimeDic.xex
$systemupdate/XimeDicCh.xex
$systemupdate/ximedicex.xex
$systemupdate/Xna_TitleLauncher.xex
-------
Looking at some of the more obviously interesting files:
$systemupdate/natalsu.xex
This looks like a good candidate for a Kinect system update/firmware
uploader.
$systemupdate/Dash.FieldCalibration.lex
This appears to be the field calibration that uses Microsofts
Calibration Card included with Kinect games.
There are also a couple of files that turn out to be in an Xbox
specific format:
http://www.free60.org/STFS
The extract360.py script found on the previous link will extract these
files. You can find some other non-Python extractors listed there
too.
ftp://rene-ladan.nl/pub/distfiles/extract360.py
Here's what the mystery files contain:
Xbox firmware update
su20076000_00000000
-------
$flash_aac.xexp
$flash_bootanim.xex
$flash_createprofile.xex
$flash_dash.xex
$flash_deviceselector.xex
$flash_gamerprofile.xex
$flash_hud.xex
$flash_huduiskin.xex
$flash_mfgbootlauncher.xex
$flash_minimediaplayer.xex
$flash_nomni.xexp
$flash_nomnifwm.xexp
$flash_signin.xex
$flash_systemupdate.xex
$flash_systemupdate2pre.xex
$flash_updater.xex
$flash_vk.xex
$flash_xam.xex
$flash_xenonclatin.xttp
$flash_xenonjklatin.xttp
$flash_ximecore.xex
$flash_ximedic.xexp
$install_extender.xex
crl.bin
dae.bin
xboxupd.bin
-------
Some avatars
FFFE07DF00000002
-------
AvatarAssetPack.toc
AvatarAssetPackLegacyV1.toc
-------
This seems to be Kinect OOBE/Initial setup resources
FFFE07DF00000006
-------
ambient.xma
Avatar6400.Avatar
Avatar6404.Avatar
Avatar6411.Avatar
Cheer.AvatarAnimation
Gift.AvatarAnimation
IdleOffScreen.AvatarAnimation
Look.AvatarAnimation
Nielsen.xma
OobeIndex
RunIn.AvatarAnimation
RunOutLong.AvatarAnimation
RunOutMedium.AvatarAnimation
RunOutShort.AvatarAnimation
RunOutStandard.AvatarAnimation
Salute.AvatarAnimation
sensorplace_TV.png
Theme0 <DIR>
Theme1 <DIR>
Theme2 <DIR>
ThemesIndex
-------
This looks like the Kinect body position database for tracking
purposes.
FFFE07DF00000008
-------
Database.gmsodf
hands.gmsodf
NuiIdentityDbVersion.txt
NuiIdentityNN.bin.be
NuiIdentityPCA.bin.be
speech <DIR>
-------
Since Microsoft hasn't provided us with an acronym dictionary, I'll
assume that the abbreviations are related to their motion tracking
algorithms and make some wild guesses here:
NN: nearest-neighbor
PCA: principal component analysis
gmsodf: gaussian mean shift orientation distribution function
(Obviously! It was either that or 'Got me -- some other database
file.')
And the speech subdirectory looks basically identical to Microsoft's
Voice Command firmware for their cell phones (there are en-gb, en-us,
es-mx and ja-jp for UK and US English, Spanish and Japanese):
speech\en-us
-------
AI031033.am
l1033.cw
l1033.ini
l1033.phn
l1033.smp
l1033.wwd
-------
Finally, this looks like a good candidate for Kinect firmware:
FFFE07DF00000001
-------
2bl.bin
audios.bin
crown1.png
crown10.png
crown2.png
crown3.png
crown4.png
crown5.png
crown6.png
crown7.png
crown8.png
crown9.png
detroit.bin
fwversions.txt
milestone1.png
milestone2.png
milestone3.png
NuiCam.bin
-------
Some poking around suggests the following functions for these files:
2bl.bin (Nui Audio/altair/more?)
audios.bin (Nui Audio/altair)
detroit.bin (Nui Motor)
NuiCam.bin (Nui Camera)
Most of the hardware and patents suggest these are probably ARM
binaries. They compress well, so encryption seems to be minimal if
any.
Also useful to look at for ideas are the .xex files. You can view
resources from these files with XeXtractor:
http://helldoc.blogspot.com/2010/04/xextractor-v103.html
You can find shader source and strings like "sensorsafetyparams" which
seems to indicate some care needs to be taken when playing with the
laser projector to avoid possible eye damage.
Have fun reverse engineering, but take care not to redistribute
Microsoft's Xbox system update or components (and modifications)
thereof without their prior written permission!
More appropriate uses would be to identify USB commands to control the
Kinect, and hardware architecture information to write an independent
open source firmware alternative, such as for use with autonomous
Kinect controlled robots.
-Kihnect