Hardware calibration: Difference between revisions
Add some more blocks |
Update ConfigInfoBlk numbers from cfg sysmodule |
||
(8 intermediate revisions by 2 users not shown) | |||
Line 21: | Line 21: | ||
|- | |- | ||
| 0xC | | 0xC | ||
| | | 0x1 | ||
| | | Model version (?) | ||
|- | |||
| 0xD | |||
| 0x1 | |||
| CAL revision (incremented each time the CAL file is updated) | |||
|- | |- | ||
| 0xE | | 0xE | ||
Line 30: | Line 34: | ||
| 0x10 | | 0x10 | ||
| 0x20 | | 0x20 | ||
| | | Signature of the data section. | ||
HMACSHA256 is used always except in the below cases where SHA256 is used: | |||
- devunits | |||
- PARTNER-DEBUGGER | |||
- PARTNER-CAPTURE | |||
- the SNAKE counterparts of the above | |||
- SNAKE-IS-DEBUGGER | |||
|- | |- | ||
| 0x30 | | 0x30 | ||
Line 47: | Line 57: | ||
|- | |- | ||
| 1 | | 1 | ||
| LCD flicker (always successful) | | LCD "flicker"/contrast (always successful) | ||
|- | |- | ||
| 2 | | 2 | ||
Line 74: | Line 84: | ||
|- | |- | ||
| A | | A | ||
| | | Adaptive BackLight (ABL) | ||
|- | |- | ||
| B | | B | ||
Line 89: | Line 99: | ||
|- | |- | ||
| F | | F | ||
| | | Adaptive BackLight (ABL) in legacy (DSi/GBA) mode | ||
|} | |} | ||
Line 97: | Line 107: | ||
! Size | ! Size | ||
! [[Config_Savegame#Configuration_blocks|ConfigInfoBlk]] | ! [[Config_Savegame#Configuration_blocks|ConfigInfoBlk]] | ||
! Since version | |||
! Description | ! Description | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
| 0x10 | | 0x10 | ||
| | | 0x00040000 | ||
| | |||
| [[#Touch|Touch panel]] | | [[#Touch|Touch panel]] | ||
|- | |- | ||
Line 107: | Line 119: | ||
| 0x08 | | 0x08 | ||
| ??? | | ??? | ||
| | |||
| [[#Circle_pad|Circle pad]] | | [[#Circle_pad|Circle pad]] | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| 2* | | 2* | ||
| | | 0x00050000 | ||
| [[#Screen_flicker| | | | ||
| [[#Screen_flicker|Display panel contrast]] | |||
|- | |- | ||
| 0x24 | | 0x24 | ||
| 1* | | 1* | ||
| | | 0x00010000 | ||
| | | | ||
| [[#RTC|RTC]] | |||
|- | |- | ||
| 0x28 | | 0x28 | ||
| 1* | | 1* | ||
| | | 0x00030000 | ||
| | | | ||
| DSPRAM related | |||
|- | |- | ||
| 0x30 | | 0x30 | ||
| 0x8A | | 0x8A | ||
| ??? | | ??? | ||
| | |||
| [[#Camera_position|Camera position]] | | [[#Camera_position|Camera position]] | ||
|- | |- | ||
| 0xBC | | 0xBC | ||
| 0x12 | | 0x12 | ||
| | | 0x00040002 | ||
| | | | ||
| [[#Gyro|Gyroscope]] | |||
|- | |- | ||
| 0xD0 | | 0xD0 | ||
| 0xC | | 0xC | ||
| | | 0x00040003 | ||
| | |||
| [[#Accel|Accelerometer]] | | [[#Accel|Accelerometer]] | ||
|- | |- | ||
| 0xE0 | | 0xE0 | ||
| 0x134 | | 0x134 | ||
| 0x00020000 | |||
| ??? | | ??? | ||
| | | [[#CDC|Codec]] | ||
|- | |- | ||
| 0x218 | | 0x218 | ||
| 0x06 | | 0x06 | ||
| | | 0x00050007 | ||
| Programmable Infrared Transmitter (PIT) | | 0x10 | ||
| [[#PIT|Programmable Infrared Transmitter (PIT)]] | |||
|- | |- | ||
| 0x220 | | 0x220 | ||
| 0x214 | | 0x214 | ||
| | | 0x00070000 | ||
| 0x7 | |||
| [[#3D_filters|3D filters]] | | [[#3D_filters|3D filters]] | ||
|- | |- | ||
| 0x440 | | 0x440 | ||
| 0x20 | | 0x20 | ||
| | | 0x00050003 | ||
| [[#ABL|Power saving mode]] | | 0x8 | ||
| [[#ABL|Adaptive BackLight / Power saving mode]] | |||
|- | |- | ||
| 0x470 | | 0x470 | ||
| 0x20 | | 0x20 | ||
| | | 0x00050005 | ||
| 0xA | |||
| ??? | | ??? | ||
|- | |- | ||
| 0x4A0 | | 0x4A0 | ||
| 0x38 | | 0x38 | ||
| | | 0x00050002 | ||
| | | 0xB | ||
| [[#BLPWM|Backlight PWM]] | |||
|- | |- | ||
| 0x4E0 | | 0x4E0 | ||
| 0x18 | | 0x18 | ||
| ??? | | ??? | ||
| | |||
| [[#Circle_pad_extra|Circle pad extra]] | | [[#Circle_pad_extra|Circle pad extra]] | ||
|- | |- | ||
Line 177: | Line 203: | ||
| 0xC | | 0xC | ||
| ??? | | ??? | ||
| | |||
| ??? | | ??? | ||
|- | |- | ||
| 0x510 | | 0x510 | ||
| 0x20 | | 0x20 | ||
| | | 0x00050004 | ||
| 0x8 | |||
| ??? | | ??? | ||
|- | |- | ||
| 0x540 | | 0x540 | ||
| 0x08 | | 0x08 | ||
| | | 0x00120000 | ||
| 0x7 | |||
| [[#MCU|MCU]] | | [[#MCU|MCU]] | ||
|- | |- | ||
| 0x550 | | 0x550 | ||
| 0x02 | | 0x02 | ||
| | | 0x00050006 | ||
| 0x9 | |||
| [[#ULCD_delay|3D screen (ULCD) delay]] | | [[#ULCD_delay|3D screen (ULCD) delay]] | ||
|- | |- | ||
| 0x560 | | 0x560 | ||
| 0x08 | | 0x08 | ||
| | | 0x00070002 | ||
| 0xD | |||
| [[#Microphone_echo_cancel|Microphone echo cancellation]] | | [[#Microphone_echo_cancel|Microphone echo cancellation]] | ||
|- | |- | ||
| 0x570 | | 0x570 | ||
| 0x10C | | 0x10C | ||
| | | 0x00050008 | ||
| 0xF | |||
| [[#ABL_extra|Power saving mode (ABL) extra]] | | [[#ABL_extra|Power saving mode (ABL) extra]] | ||
|- | |- | ||
| 0x680 | | 0x680 | ||
| 0x08 | | 0x08 | ||
| | | 0x00040004 | ||
| 0xF | |||
| [[#CStick|CStick (Right stick)]] | | [[#CStick|CStick (Right stick)]] | ||
|- | |- | ||
| 0x690 | | 0x690 | ||
| 0x18 | | 0x18 | ||
| | | 0x00180001 | ||
| Quad Tracking Module (QTM) | | 0x12 | ||
| [[#QTM|Quad Tracking Module (QTM)]] | |||
|} | |} | ||
Line 218: | Line 252: | ||
==Touch== | ==Touch== | ||
Used for mapping touch ADC values to display pixel co-ordinates. | |||
<code> | |||
[4096, 4096] --> [320, 240] | |||
[RawX, RawY] --> [PointX, PointY] | |||
</code> | |||
Usually [PointX0, PointY0] is placed around 25% from the top-left corner, and the same for [PointX1, PointY1] except 25% from the bottom-right corner. | |||
This offsetting is needed because the touch film starts to distort outside of that rectangle, which would skew the touch results near the center of the screen. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 248: | Line 293: | ||
==Circle pad== | ==Circle pad== | ||
Contains the centering position of the circle pad. For other circle pad settings, see [[#Circle_pad_extra|circle pad extra]]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! Declaration | |||
! Description | ! Description | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
| s16 CenterX | | s16 CenterX | ||
|rowspan="2"| Raw analog values corresponding to zero input position | |||
|- | |- | ||
| 0x02 | | 0x02 | ||
Line 260: | Line 310: | ||
==Screen flicker== | ==Screen flicker== | ||
These values are written to MCU register 0x03 and 0x04 respectively. They both set the display contrast voltage. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! Declaration | |||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0 | ||
| u8 FlickerTop | | u8 FlickerTop | ||
|rowspan="2"| Contrast voltage | |||
|- | |- | ||
| 1 | | 1 | ||
Line 271: | Line 326: | ||
|- | |- | ||
| 2* | | 2* | ||
|rowspan="2"| Inline checksum | |||
| Checksum low byte, NOT THIS[0] | | Checksum low byte, NOT THIS[0] | ||
|- | |- | ||
| 3* | | 3* | ||
| Checksum high byte, THIS[1] | | Checksum high byte, THIS[1] | ||
|} | |||
==RTC== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Declaration | |||
! Description | |||
|- | |||
| 0 | |||
| u8 CompensationValue | |||
| (???) | |||
|- | |||
| 1* | |||
| | |||
| Checksum byte, NOT THIS[0] | |||
|} | |} | ||
Line 280: | Line 351: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 341: | Line 412: | ||
| 0x88 | | 0x88 | ||
| s16 ccmPosition | | s16 ccmPosition | ||
|} | |||
==Gyro== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Declaration | |||
|- | |||
| 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 346: | Line 450: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 365: | Line 469: | ||
| 0x0A | | 0x0A | ||
| s16 ScaleZ | | s16 ScaleZ | ||
|} | |||
==CDC== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Declaration | |||
! Description | |||
|- | |||
| 0x00 | |||
| u8 DriverGainHP | |||
| Headphone gain | |||
|- | |||
| 0x01 | |||
| u8 DriverGainSP | |||
| Speaker gain | |||
|- | |||
| 0x02 | |||
| u8 AnalogVolumeHP | |||
| | |||
|- | |||
| 0x03 | |||
| u8 AnalogVolumeSP | |||
| | |||
|- | |||
| 0x04 | |||
| s8 ShutterVolume[2] | |||
| | |||
|- | |||
| 0x06 | |||
| u8 MicrophoneBias | |||
| Capacitive microphone bias voltage | |||
|- | |||
| 0x07 | |||
| u8 QuickCharge | |||
| (???) | |||
|- | |||
| 0x08 | |||
| u8 PGA_GAIN | |||
| ??? (microphone gain) | |||
|- | |||
| 0x09 | |||
| u8 reserved[3] | |||
|- | |||
| 0x0C | |||
| s16 FilterHP32[3*5] | |||
| Headphone filter for 32728.49Hz sampling rate | |||
|- | |||
| 0x2A | |||
| s16 FilterHP47[3*5] | |||
| Headphone filter for 47605Hz sampling rate | |||
|- | |||
| 0x48 | |||
| s16 FilterSP32[3*5] | |||
| Speaker filter for 32728.49Hz sampling rate | |||
|- | |||
| 0x66 | |||
| s16 FilterSP47[3*5] | |||
| Speaker filter for 47605Hz sampling rate | |||
|- | |||
| 0x84 | |||
| s16 FilterMic32[(1+2)+((1+4)*5)] | |||
| Microphone filter for 32728.49Hz sampling rate | |||
|- | |||
| 0xBC | |||
| s16 FilterMic47[(1+2)+((1+4)*5)] | |||
| Microphone filter for 47605Hz sampling rate | |||
|- | |||
| 0xF4 | |||
| s16 FilterFree[(1+2)+((1+4)*5)] | |||
| Unknown | |||
|- | |||
| 0x12C | |||
| u8 AnalogInterval | |||
|- | |||
| 0x12D | |||
| u8 AnalogStabilize | |||
|- | |||
| 0x12E | |||
| u8 AnalogPrecharge | |||
|- | |||
| 0x12F | |||
| u8 AnalogSense | |||
|- | |||
| 0x130 | |||
| u8 AnalogDebounce | |||
|- | |||
| 0x131 | |||
| u8 Analog_XP_Pullup | |||
|- | |||
| 0x132 | |||
| u8 YM_Driver | |||
| ??? (circle-pad or touch panel related?) | |||
|- | |||
| 0x133 | |||
| u8 reserved | |||
|} | |||
==PIT== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Declaration | |||
|- | |||
| 0x00 | |||
| u16 VisibleFactor | |||
|- | |||
| 0x02 | |||
| u16 IRFactor | |||
|} | |} | ||
Line 370: | Line 581: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 382: | Line 593: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 428: | Line 639: | ||
| 0x1E | | 0x1E | ||
| u8 reserved[2] | | u8 reserved[2] | ||
|} | |||
==BLPWM== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Declaration | |||
|- | |||
| 0x00 | |||
| float coefficient[3][3] | |||
|- | |||
| 0x24 | |||
| u8 NumLevels | |||
|- | |||
| 0x25 | |||
| u8 padding | |||
|- | |||
| 0x26 | |||
| u16 brightnesses[7]; | |||
|- | |||
| 0x34 | |||
| u16 BaseDivisor | |||
|- | |||
| 0x36 | |||
| u16 MinimumBrightnessHw | |||
|} | |} | ||
Line 433: | Line 668: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 461: | Line 696: | ||
==MCU== | ==MCU== | ||
Somewhat misleading, these values are actually used for clamping the MCU's raw slider readings to comprehensible values. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! Declaration | |||
! Description | ! Description | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
| s16 SVR2_Min | | s16 SVR2_Min | ||
| Raw 3D volume slider values <= this map to 3D slider value 0.0 | |||
|- | |- | ||
| 0x02 | | 0x02 | ||
| s16 SVR2_Max | | s16 SVR2_Max | ||
| Raw 3D volume slider values >= this map to 3D slider value 1.0 | |||
|- | |- | ||
| 0x04 | | 0x04 | ||
| s16 VolumeSliderMin | | s16 VolumeSliderMin | ||
| Written to MCU reg 0x58. Volume slider values <= this map to volume value 0x00 | |||
|- | |- | ||
| 0x06 | | 0x06 | ||
| s16 VolumeSliderMax | | s16 VolumeSliderMax | ||
| Written to MCU reg 0x59. Volume slider values >= this map to volume value 0x3F | |||
|} | |} | ||
==ULCD delay== | ==ULCD delay== | ||
There is a delay between switching the parallax barrier, and adjusting the backlight. | |||
These delay values determine how many VBlank events to wait on before switching the backlight curves to the appropriate mode. | |||
This is needed only to prevent epillepsy from analog jitter causing unwanted mode switches, and both values are usually always set to 1 or 2. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 493: | Line 744: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 502: | Line 753: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 526: | Line 777: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Offset | ! Offset | ||
! | ! Declaration | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 536: | Line 787: | ||
| 0x02 | | 0x02 | ||
| u16 reserved[3] | | u16 reserved[3] | ||
|} | |||
==QTM== | |||
{| class="wikitable" border="1" | |||
! Offset | |||
! Declaration | |||
|- | |||
| 0x00 | |||
| float DivisorAtZero (???) | |||
|- | |||
| 0x04 | |||
| float TranslationX | |||
|- | |||
| 0x08 | |||
| float TranslationY | |||
|- | |||
| 0x0C | |||
| float RotationZ | |||
|- | |||
| 0x10 | |||
| float HorizontalAngle | |||
|- | |||
| 0x14 | |||
| float OptimalDistance | |||
|} | |} | ||