Hardware calibration: Difference between revisions
Jump to navigation
Jump to search
Add some more blocks |
Add some more blocks |
||
| Line 117: | Line 117: | ||
| 1* | | 1* | ||
| ??? | | ??? | ||
| | | [[#RTC|RTC]] | ||
|- | |- | ||
| 0x28 | | 0x28 | ||
| Line 132: | Line 132: | ||
| 0x12 | | 0x12 | ||
| ??? | | ??? | ||
| | | [[#Gyro|Gyroscope]] | ||
|- | |- | ||
| 0xD0 | | 0xD0 | ||
| Line 142: | Line 142: | ||
| 0x134 | | 0x134 | ||
| ??? | | ??? | ||
| | | [[#CDC|Codec]] | ||
|- | |- | ||
| 0x218 | | 0x218 | ||
| 0x06 | | 0x06 | ||
| ??? | | ??? | ||
| Programmable Infrared Transmitter (PIT) | | [[#PIT|Programmable Infrared Transmitter (PIT)]] | ||
|- | |- | ||
| 0x220 | | 0x220 | ||
| Line 167: | Line 167: | ||
| 0x38 | | 0x38 | ||
| ??? | | ??? | ||
| | | Backlight PWM | ||
|- | |- | ||
| 0x4E0 | | 0x4E0 | ||
| Line 212: | Line 212: | ||
| 0x18 | | 0x18 | ||
| ??? | | ??? | ||
| Quad Tracking Module (QTM) | | [[#QTM|Quad Tracking Module (QTM)]] | ||
|} | |} | ||
| Line 275: | Line 275: | ||
| 3* | | 3* | ||
| Checksum high byte, THIS[1] | | Checksum high byte, THIS[1] | ||
|} | |||
==RTC== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0 | |||
| u8 CompensationValue (???) | |||
|- | |||
| 1* | |||
| Checksum byte, NOT THIS[0] | |||
|} | |} | ||
| Line 341: | Line 353: | ||
| 0x88 | | 0x88 | ||
| s16 ccmPosition | | s16 ccmPosition | ||
|} | |||
==Gyro== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| s16 ZeroX | |||
|- | |||
| 0x02 | |||
| s16 PlusX | |||
|- | |||
| 0x04 | |||
| s16 MinusX | |||
|- | |||
| 0x06 | |||
| s16 ZeroY | |||
|- | |||
| 0x08 | |||
| s16 PlusY | |||
|- | |||
| 0x0A | |||
| s16 MinusY | |||
|- | |||
| 0x0C | |||
| s16 ZeroZ | |||
|- | |||
| 0x0E | |||
| s16 PlusZ | |||
|- | |||
| 0x10 | |||
| s16 MinusZ | |||
|} | |} | ||
| Line 365: | Line 410: | ||
| 0x0A | | 0x0A | ||
| s16 ScaleZ | | s16 ScaleZ | ||
|} | |||
==CDC== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| u8 DriverGainHP | |||
|- | |||
| 0x01 | |||
| u8 DriverGainSP | |||
|- | |||
| 0x02 | |||
| u8 AnalogVolumeHP | |||
|- | |||
| 0x03 | |||
| u8 AnalogVolumeSP | |||
|- | |||
| 0x04 | |||
| s8 ShutterVolume[2] | |||
|- | |||
| 0x06 | |||
| u8 MicrophoneBias | |||
|- | |||
| 0x07 | |||
| u8 QuickCharge (???) | |||
|- | |||
| 0x08 | |||
| u8 PGA_GAIN (microphone gain) | |||
|- | |||
| 0x09 | |||
| u8 reserved[3] | |||
|- | |||
| 0x0C | |||
| s16 FilterHP32[3*5] | |||
|- | |||
| 0x2A | |||
| s16 FilterHP47[3*5] | |||
|- | |||
| 0x48 | |||
| s16 FilterSP32[3*5] | |||
|- | |||
| 0x66 | |||
| s16 FilterSP47[3*5] | |||
|- | |||
| 0x84 | |||
| s16 FilterMic32[(1+2)+((1+4)*5)] | |||
|- | |||
| 0xBC | |||
| s16 FilterMic47[(1+2)+((1+4)*5)] | |||
|- | |||
| 0xF4 | |||
| s16 FilterFree[(1+2)+((1+4)*5)] | |||
|- | |||
| 0x12C | |||
| u8 AnalogInterval | |||
|- | |||
| 0x12D | |||
| u8 AnalogStabilize | |||
|- | |||
| 0x12E | |||
| u8 AnalogPrecharge | |||
|- | |||
| 0x12F | |||
| u8 AnalogSense | |||
|- | |||
| 0x130 | |||
| u8 AnalogDebounce | |||
|- | |||
| 0x131 | |||
| u8 Analog_XP_Pullup | |||
|- | |||
| 0x132 | |||
| u8 YM_Driver | |||
|- | |||
| 0x133 | |||
| u8 reserved | |||
|} | |||
==PIT== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| u16 VisibleFactor | |||
|- | |||
| 0x02 | |||
| u16 IRFactor | |||
|} | |} | ||
| Line 536: | Line 671: | ||
| 0x02 | | 0x02 | ||
| u16 reserved[3] | | u16 reserved[3] | ||
|} | |||
==QTM== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Description | |||
|- | |||
| 0x00 | |||
| float DivisorAtZero (???) | |||
|- | |||
| 0x04 | |||
| float TranslationX | |||
|- | |||
| 0x08 | |||
| float TranslationY | |||
|- | |||
| 0x0C | |||
| float RotationZ | |||
|- | |||
| 0x10 | |||
| float HorizontalAngle | |||
|- | |||
| 0x14 | |||
| float OptimalDistance | |||
|} | |} | ||
Revision as of 22:37, 11 October 2017
File format
The file consists out of a 0x200 big header (though the actual header is only 0x30 bytes, the rest is zerofilled), plus data whose size is indicated in the header.
Header
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x4 | Magic "CCAL" |
| 0x4 | 0x4 | Version |
| 0x8 | 0x4 | Data size, always 0x7D0 |
| 0xC | 0x2? | ??? |
| 0xE | 0x2 | Bitmask of successful Aging tests |
| 0x10 | 0x20 | On devunits and if 0x1FF81006 is 3 or 4 or 7 or 8 or 9 then SHA256,
otherwise HMACSHA256 signature of the data section |
| 0x30 | 0x1D0 | Zerofilled, padding for the 512byte block size |
Aging masks
| Bit | Description |
|---|---|
| 0 | FCRAM |
| 1 | LCD flicker (always successful) |
| 2 | Camera |
| 3 | Touch panel (always successful) |
| 4 | Circle pad (analog stick) |
| 5 | Codec |
| 6 | Gyroscope |
| 7 | RTC |
| 8 | Accelerometer |
| 9 | Surround |
| A | Power saving mode (ABL) |
| B | 3D screen (ULCD) |
| C | Backlight PWM |
| D | Analog stick A (???) |
| E | Camera extensions |
| F | Power saving mode (ABL) in legacy (DSi/GBA) mode |
Data blocks
| Offset | Size | ConfigInfoBlk | Description |
|---|---|---|---|
| 0x00 | 0x10 | 00040000 | Touch panel |
| 0x14 | 0x08 | ??? | Circle pad |
| 0x20 | 2* | 00050000 | Screen flicker |
| 0x24 | 1* | ??? | RTC |
| 0x28 | 1* | ??? | ??? |
| 0x30 | 0x8A | ??? | Camera position |
| 0xBC | 0x12 | ??? | Gyroscope |
| 0xD0 | 0xC | ??? | Accelerometer |
| 0xE0 | 0x134 | ??? | Codec |
| 0x218 | 0x06 | ??? | Programmable Infrared Transmitter (PIT) |
| 0x220 | 0x214 | ??? | 3D filters |
| 0x440 | 0x20 | ??? | Power saving mode |
| 0x470 | 0x20 | ??? | ??? |
| 0x4A0 | 0x38 | ??? | Backlight PWM |
| 0x4E0 | 0x18 | ??? | Circle pad extra |
| 0x500 | 0xC | ??? | ??? |
| 0x510 | 0x20 | ??? | ??? |
| 0x540 | 0x08 | ??? | MCU |
| 0x550 | 0x02 | ??? | 3D screen (ULCD) delay |
| 0x560 | 0x08 | ??? | Microphone echo cancellation |
| 0x570 | 0x10C | ??? | Power saving mode (ABL) extra |
| 0x680 | 0x08 | ??? | CStick (Right stick) |
| 0x690 | 0x18 | ??? | Quad Tracking Module (QTM) |
Data block formats
Touch
| Offset | Description |
|---|---|
| 0x00 | s16 RawX0 |
| 0x02 | s16 RawY0 |
| 0x04 | s16 PointX0 |
| 0x06 | s16 PointY0 |
| 0x08 | s16 RawX1 |
| 0x0A | s16 RawY1 |
| 0x0C | s16 PointX1 |
| 0x0E | s16 PointY1 |
Circle pad
| Offset | Description |
|---|---|
| 0x00 | s16 CenterX |
| 0x02 | s16 CenterY |
Screen flicker
| Offset | Description |
|---|---|
| 0 | u8 FlickerTop |
| 1 | u8 FlickerBottom |
| 2* | Checksum low byte, NOT THIS[0] |
| 3* | Checksum high byte, THIS[1] |
RTC
| Offset | Description |
|---|---|
| 0 | u8 CompensationValue (???) |
| 1* | Checksum byte, NOT THIS[0] |
Camera position
| Offset | Description |
|---|---|
| 0x00 | u32 flags |
| 0x04 | float scale |
| 0x08 | float RotationZ |
| 0x0C | float TranslationX |
| 0x10 | float TranslationY |
| 0x14 | float RotationX |
| 0x18 | float RotationY |
| 0x1C | float ViewAngleRight |
| 0x20 | float ViewAngleLeft |
| 0x24 | float ChartDistance(???) |
| 0x28 | float CameraDistance |
| 0x2C | s16 ImageWidth |
| 0x2E | s16 ImageHeight |
| 0x30 | u8 reserved[0x10] |
| 0x40 | u8 ???[0x40] |
| 0x80 | s16 aeBaseTarget(???) |
| 0x82 | s16 kRL |
| 0x84 | s16 kGL |
| 0x86 | s16 kBL |
| 0x88 | s16 ccmPosition |
Gyro
| Offset | Description |
|---|---|
| 0x00 | s16 ZeroX |
| 0x02 | s16 PlusX |
| 0x04 | s16 MinusX |
| 0x06 | s16 ZeroY |
| 0x08 | s16 PlusY |
| 0x0A | s16 MinusY |
| 0x0C | s16 ZeroZ |
| 0x0E | s16 PlusZ |
| 0x10 | s16 MinusZ |
Accel
| Offset | Description |
|---|---|
| 0x00 | s16 OffsetX |
| 0x02 | s16 ScaleX |
| 0x04 | s16 OffsetY |
| 0x06 | s16 ScaleY |
| 0x08 | s16 OffsetZ |
| 0x0A | s16 ScaleZ |
CDC
| Offset | Description |
|---|---|
| 0x00 | u8 DriverGainHP |
| 0x01 | u8 DriverGainSP |
| 0x02 | u8 AnalogVolumeHP |
| 0x03 | u8 AnalogVolumeSP |
| 0x04 | s8 ShutterVolume[2] |
| 0x06 | u8 MicrophoneBias |
| 0x07 | u8 QuickCharge (???) |
| 0x08 | u8 PGA_GAIN (microphone gain) |
| 0x09 | u8 reserved[3] |
| 0x0C | s16 FilterHP32[3*5] |
| 0x2A | s16 FilterHP47[3*5] |
| 0x48 | s16 FilterSP32[3*5] |
| 0x66 | s16 FilterSP47[3*5] |
| 0x84 | s16 FilterMic32[(1+2)+((1+4)*5)] |
| 0xBC | s16 FilterMic47[(1+2)+((1+4)*5)] |
| 0xF4 | s16 FilterFree[(1+2)+((1+4)*5)] |
| 0x12C | u8 AnalogInterval |
| 0x12D | u8 AnalogStabilize |
| 0x12E | u8 AnalogPrecharge |
| 0x12F | u8 AnalogSense |
| 0x130 | u8 AnalogDebounce |
| 0x131 | u8 Analog_XP_Pullup |
| 0x132 | u8 YM_Driver |
| 0x133 | u8 reserved |
PIT
| Offset | Description |
|---|---|
| 0x00 | u16 VisibleFactor |
| 0x02 | u16 IRFactor |
3D filters
| Offset | Description |
|---|---|
| 0x00 | u16 SpecialFilter[0x100] |
| 0x200 | u32 IIRSurroundFilter[5] |
ABL
| Offset | Description |
|---|---|
| 0x00 | u32 DitherPattern |
| 0x04 | s16 StartX |
| 0x06 | s16 StartY |
| 0x08 | u16 SizeX |
| 0x0A | u16 SizeY |
| 0x0C | s16 GTH_Ratio |
| 0x0E | u8 DitherMode |
| 0x0F | u8 MinRS |
| 0x10 | u8 MaxRS |
| 0x11 | u8 MinGTH |
| 0x12 | u8 MinMax (???) |
| 0x13 | u8 ExMax (???) |
| 0x14 | u8 inertia |
| 0x15 | u8 LutListRS[9] |
| 0x1E | u8 reserved[2] |
Circle pad extra
| Offset | Description |
|---|---|
| 0x00 | float ScaleX |
| 0x04 | float ScaleY |
| 0x08 | s16 MaxX |
| 0x0A | s16 MinX |
| 0x0C | s16 MaxY |
| 0x0E | s16 MinY |
| 0x10 | s16 type |
| 0x12 | u8 unknown_padding[6] |
MCU
| Offset | Description |
|---|---|
| 0x00 | s16 SVR2_Min (???) |
| 0x02 | s16 SVR2_Max (???) |
| 0x04 | s16 VolumeSliderMin |
| 0x06 | s16 VolumeSliderMax |
ULCD delay
| Offset | Description |
|---|---|
| 0x00 | u8 To2D |
| 0x01 | u8 To3D |
Microphone echo cancel
| Offset | Description |
|---|---|
| 0x00 | s8 params[8] |
ABL extra
| Offset | Description |
|---|---|
| 0x00 | u8 MaxInertia |
| 0x01 | u8 pad |
| 0x02 | u16 PWM_CNT_EX |
| 0x04 | u32 Histogram1 |
| 0x08 | u32 Histogram2 |
| 0x0C | u32 adjust[0x40] |
CStick
| Offset | Description |
|---|---|
| 0x00 | u8 ThinningCountX(???) |
| 0x01 | u8 ThinningCountY(???) |
| 0x02 | u16 reserved[3] |
QTM
| Offset | Description |
|---|---|
| 0x00 | float DivisorAtZero (???) |
| 0x04 | float TranslationX |
| 0x08 | float TranslationY |
| 0x0C | float RotationZ |
| 0x10 | float HorizontalAngle |
| 0x14 | float OptimalDistance |
Reading
If 0x1FF81006 is 3 or 4 or 7 or 8 or 9 then the callibration data is read from the EEPROM using the i2c:EEP service command 0x001000C0, using offset 0x000 for HWCAL0, and offset 0x800 for HWCAL1.
Otherwise attempt is made to read CTRNAND:/ro/sys/HWCAL(0|1).dat instead.