Calibration: Difference between revisions

mNo edit summary
No edit summary
Line 1: Line 1:
During [[Factory_Setup|factory setup]], the Switch goes through calibration and the generated data from this process is written to two [[Flash_Filesystem|NAND user partitions]] ('''PRODINFO''' and '''PRODINFOF''').
During [[Factory_Setup|factory setup]], the Switch goes through calibration and the generated data from this process is written to two [[Flash_Filesystem|NAND user partitions]] ('''PRODINFO''' and '''PRODINFOF''').


'''PRODINFOF''' is a FAT12 compliant filesystem and it's structure can be found [[Flash_Filesystem#PRODINFOF|here]]. It's mainly used to keep calibration logs and other assorted files.
= CalibrationBinary =
This is "nn::cal::CalibrationBinary".


'''PRODINFO''' is a raw binary blob containing the main calibration data, which ranges from hardware IDs to system keys.
This is a raw binary blob containing the main calibration data, which ranges from hardware IDs to system keys.
 
= CAL0 =
This is the raw data stored under the PRODINFO partition.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 12: Line 10:
!  Offset
!  Offset
!  Size
!  Size
!  Field
!  Description
!  Description
|-
|-
0x0000
0x0
0x04
0x4
|  MagicNumber
|  MagicNumber ("CAL0")
"CAL0" header magic.
|-
|-
0x0004
0x4
0x04
0x4
|  Version
|  Version
|-
|-
0x0008
0x8
0x04
0x4
|  BodySize
|  BodySize (size of calibration data starting at offset 0x40)
|  Total size of calibration data starting at offset 0x40.
|-
|-
0x000C
0xC
0x02
0x2
|  Model
|  Model
|-
|-
0x000E
0xE
0x02
0x2
|  UpdateCount
|  UpdateCount (increases each time calibration data is installed)
|  Increases each time calibration data is installed.
|-
|-
|  0x0020
|  0x20
|  0x20
BodyHash
0x20
|  SHA256 hash calculated over calibration data.
BodyHash (SHA256 hash calculated over calibration data)
|-
|-
0x0040
0x40
|  0x1E
|  0x1E
|  ConfigurationId1
[[Settings_services#ConfigurationId1|ConfigurationId1]]
| Configuration ID string.
|-
|-
0x0060
0x60
|  0x20
|  0x20
|  Reserved
|  Reserved
|  Empty.
|-
|-
0x0080
0x80
0x04
0x4
|  WlanCountryCodesNum
|  WlanCountryCodesNum
|  Number of elements in the WlanCountryCodes array.
|-
|-
0x0084
0x84
0x04
0x4
|  WlanCountryCodesLastIndex
|  WlanCountryCodesLastIndex
|  Index of the last element in the WlanCountryCodes array.
|-
|-
0x0088
0x88
|  0x180
|  0x180
|  WlanCountryCodes
|  WlanCountryCodes
|  Array of WLAN country code strings. Each element is 3 bytes (code + NULL terminator).
|-
|-
0x0210
0x210
0x06
0x6
|  WlanMacAddress
[[Settings_services#MacAddress|WlanMacAddress]]
|-
|-
0x0220
0x220
0x06
0x6
|  BdAddress
[[Settings_services#BdAddress|BdAddress]]
|
|-
|-
0x0230
0x230
0x06
0x6
|  AccelerometerOffset
|  AccelerometerOffset
|-
|-
0x0238
0x238
0x06
0x6
|  AccelerometerScale
|  AccelerometerScale
|-
|-
0x0240
0x240
0x06
0x6
|  GyroscopeOffset
|  GyroscopeOffset
|-
|-
0x0248
0x248
0x06
0x6
|  GyroscopeScale
|  GyroscopeScale
|-
|-
0x0250
0x250
|  0x18
|  0x18
|  SerialNumber
[[Settings_services#SerialNumber|SerialNumber]]
|
|-
|-
0x0270
0x270
|  0x30
|  0x30
|  EccP256DeviceKey
|  EccP256DeviceKey (unused)
|  Device key (ECC-P256 version; empty and unused).
|-
|-
0x02B0
0x2B0
|  0x180
|  0x180
|  EccP256DeviceCertificate
|  EccP256DeviceCertificate (unused)
|  Device certificate (ECC-P256 version; empty and unused).
|-
|-
0x0440
0x440
|  0x30
|  0x30
|  EccB233DeviceKey
|  EccB233DeviceKey (unused)
|  Device key (ECC-B233 version; empty and unused).
|-
|-
0x0480
0x480
|  0x180
|  0x180
|  EccB233DeviceCertificate
|  EccB233DeviceCertificate
|  Device certificate (ECC-B233 version; active).
|-
|-
0x0610
0x610
|  0x30
|  0x30
|  EccP256ETicketKey
|  EccP256ETicketKey (unused)
|  ETicket key (ECC-P256 version; empty and unused).
|-
|-
0x0650
0x650
|  0x180
|  0x180
|  EccP256ETicketCertificate
|  EccP256ETicketCertificate (unused)
|  ETicket certificate (ECC-P256 version; empty and unused).
|-
|-
0x07E0
0x7E0
|  0x30
|  0x30
|  EccB233ETicketKey
|  EccB233ETicketKey (unused)
|  ETicket key (ECC-B233 version; empty and unused).
|-
|-
0x0820
0x820
|  0x180
|  0x180
|  EccB233ETicketCertificate
|  EccB233ETicketCertificate (unused)
|  ETicket certificate (ECC-B233 version; empty and unused).
|-
|-
0x09B0
0x9B0
|  0x110
|  0x110
|  SslKey
|  SslKey (unused)
|  SSL key (empty and unused).
|-
|-
0x0AD0
0xAD0
0x04
0x4
|  SslCertificateSize
|  SslCertificateSize
|  Total size of the SSL certificate.
|-
|-
0x0AE0
0xAE0
|  0x800
|  0x800
|  SslCertificate
|  SslCertificate (only SslCertificateSize bytes are used)
|  SSL certificate. Only SslCertificateSize bytes are used.
|-
|-
|  0x12E0
|  0x12E0
|  0x20
|  0x20
|  SslCertificateHash
|  SslCertificateHash (SHA256 over the SSL certificate)
SHA256 over the SSL certificate.
|-
|-
|  0x1300
|  0x1300
|  0x1000
|  0x1000
|  RandomNumber
|  RandomNumber
|  Random generated data.
|-
|-
|  0x2300
|  0x2300
|  0x20
|  0x20
|  RandomNumberHash
|  RandomNumberHash (SHA256 over the random data block)
SHA256 over the random data block.
|-
|-
|  0x2320
|  0x2320
|  0x110
|  0x110
|  GameCardKey
|  GameCardKey (unused)
|  Gamecard key (empty and unused).
|-
|-
|  0x2440
|  0x2440
|  0x400
|  0x400
|  GameCardCertificate
|  GameCardCertificate
|  Gamecard certificate.
|-
|-
|  0x2840
|  0x2840
|  0x20
|  0x20
|  GameCardCertificateHash
|  GameCardCertificateHash (SHA256 over the GameCard certificate)
SHA256 over the Gamecard certificate.
|-
|-
|  0x2860
|  0x2860
|  0x220
|  0x220
|  Rsa2048ETicketKey
|  Rsa2048ETicketKey (unused)
|  ETicket key (RSA-2048 version; empty and unused).
|-
|-
|  0x2A90
|  0x2A90
|  0x240
|  0x240
|  Rsa2048ETicketCertificate
|  Rsa2048ETicketCertificate
|  ETicket certificate (RSA-2048 version; active).
|-
|-
|  0x2CE0
|  0x2CE0
|  0x18
|  0x18
|  BatteryLot
|  BatteryLot
|  Battery lot string ID.
|-
|-
|  0x2D00
|  0x2D00
|  0x800
|  0x800
|  SpeakerCalibrationValue
|  SpeakerCalibrationValue (only 0x5A bytes are used)
|  Speaker calibration values. Only 0x5A bytes are used.
|-
|-
|  0x3510
|  0x3510
0x04
0x4
|  RegionCode
[[Settings_services#RegionCode|RegionCode]]
| 0=JPN 1=USA 2=EUR 3=AUS 4=CHN 5=KOR 6=HKG
|-
|-
|  0x3520
|  0x3520
|  0x50
|  0x50
|  AmiiboKey
|  AmiiboKey
|  Amiibo key (ECQV and ECDSA versions).
|-
|-
|  0x3580
|  0x3580
|  0x14
|  0x14
|  AmiiboEcqvCertificate
|  AmiiboEcqvCertificate
|  Amiibo certificate (ECQV version).
|-
|-
|  0x35A0
|  0x35A0
|  0x70
|  0x70
|  AmiiboEcdsaCertificate
|  AmiiboEcdsaCertificate
|  Amiibo certificate (ECDSA version).
|-
|-
|  0x3620
|  0x3620
|  0x40
|  0x40
|  AmiiboEcqvBlsKey
|  AmiiboEcqvBlsKey
|  Amiibo key (ECQV-BLS version).
|-
|-
|  0x3670
|  0x3670
|  0x20
|  0x20
|  AmiiboEcqvBlsCertificate
|  AmiiboEcqvBlsCertificate
|  Amiibo certificate (ECQV-BLS version).
|-
|-
|  0x36A0
|  0x36A0
|  0x90
|  0x90
|  AmiiboEcqvBlsRootCertificate
|  AmiiboEcqvBlsRootCertificate
|  Amiibo root certificate (ECQV-BLS version).
|-
|-
|  0x3740
|  0x3740
0x04
0x4
|  ProductModel
[[#ProductModel|ProductModel]]
| 0 = Invalid, 1 = Nx, 2 = Copper, 3 = Iowa, 4 = Hoag, 5 = Calcio, 6 = Aula
|-
|-
|  0x3750
|  0x3750
0x06
0x6
|  ColorVariation
|  ColorVariation
|-
|-
|  0x3760
|  0x3760
0x0C
0xC
|  LcdBacklightBrightnessMapping
|  LcdBacklightBrightnessMapping
|-
|-
|  0x3770
|  0x3770
|  0x50
|  0x50
|  ExtendedEccB233DeviceKey
|  ExtendedEccB233DeviceKey
|  Extended device key (ECC-B233 version; active).
|-
|-
|  0x37D0
|  0x37D0
|  0x50
|  0x50
|  ExtendedEccP256ETicketKey
|  ExtendedEccP256ETicketKey (unused)
|  Extended ETicket key (ECC-P256 version; empty and unused).
|-
|-
|  0x3830
|  0x3830
|  0x50
|  0x50
|  ExtendedEccB233ETicketKey
|  ExtendedEccB233ETicketKey (unused)
|  Extended ETicket key (ECC-B233 version; empty and unused).
|-
|-
|  0x3890
|  0x3890
|  0x240
|  0x240
|  ExtendedRsa2048ETicketKey
|  ExtendedRsa2048ETicketKey
|  Extended ETicket key (RSA-2048 version; active).
|-
|-
|  0x3AE0
|  0x3AE0
|  0x130
|  0x130
|  ExtendedSslKey
|  ExtendedSslKey
|  Extended SSL key (active).
|-
|-
|  0x3C20
|  0x3C20
|  0x130
|  0x130
|  ExtendedGameCardKey
|  ExtendedGameCardKey
|  Extended Gamecard key (active).
|-
|-
|  0x3D60
|  0x3D60
0x04
0x4
|  LcdVendorId
|  LcdVendorId
|-
|-
|  0x3D70
|  0x3D70
|  0x240
|  0x240
|  [5.0.0+] ExtendedRsa2048DeviceKey
|  [5.0.0+] ExtendedRsa2048DeviceKey
|  Extended device key (RSA-2048 version; active).
|-
|-
|  0x3FC0
|  0x3FC0
|  0x240
|  0x240
|  [5.0.0+] Rsa2048DeviceCertificate
|  [5.0.0+] Rsa2048DeviceCertificate
|  Device certificate (RSA-2048 version; active).
|-
|-
|  0x4210
|  0x4210
0x01
0x1
|  [5.0.0+] UsbTypeCPowerSourceCircuitVersion
|  [5.0.0+] UsbTypeCPowerSourceCircuitVersion
|-
|-
|  0x4220
|  0x4220
0x04
0x4
|  [9.0.0+] HousingSubColor
|  [9.0.0+] HousingSubColor
|-
|-
|  0x4230
|  0x4230
0x04
0x4
|  [9.0.0+] HousingBezelColor
|  [9.0.0+] HousingBezelColor
|-
|-
|  0x4240
|  0x4240
0x04
0x4
|  [9.0.0+] HousingMainColor1
|  [9.0.0+] HousingMainColor1
|-
|-
|  0x4250
|  0x4250
0x04
0x4
|  [9.0.0+] HousingMainColor2
|  [9.0.0+] HousingMainColor2
|-
|-
|  0x4260
|  0x4260
0x04
0x4
|  [9.0.0+] HousingMainColor3
|  [9.0.0+] HousingMainColor3
|-
|-
|  0x4270
|  0x4270
0x01
0x1
|  [9.0.0+] AnalogStickModuleTypeL
|  [9.0.0+] AnalogStickModuleTypeL
|-
|-
|  0x4280
|  0x4280
|  0x12
|  0x12
|  [9.0.0+] AnalogStickModelParameterL
|  [9.0.0+] AnalogStickModelParameterL
|-
|-
|  0x42A0
|  0x42A0
0x09
0x9
|  [9.0.0+] AnalogStickFactoryCalibrationL
|  [9.0.0+] AnalogStickFactoryCalibrationL
|-
|-
|  0x42B0
|  0x42B0
0x01
0x1
|  [9.0.0+] AnalogStickModuleTypeR
|  [9.0.0+] AnalogStickModuleTypeR
|-
|-
|  0x42C0
|  0x42C0
|  0x12
|  0x12
|  [9.0.0+] AnalogStickModelParameterR
|  [9.0.0+] AnalogStickModelParameterR
|-
|-
|  0x42E0
|  0x42E0
0x09
0x9
|  [9.0.0+] AnalogStickFactoryCalibrationR
|  [9.0.0+] AnalogStickFactoryCalibrationR
|-
|-
|  0x42F0
|  0x42F0
0x01
0x1
|  [9.0.0+] ConsoleSixAxisSensorModuleType
|  [9.0.0+] ConsoleSixAxisSensorModuleType
|-
|-
|  0x4300
|  0x4300
0x06
0x6
|  [9.0.0+] ConsoleSixAxisSensorHorizontalOffset
|  [9.0.0+] ConsoleSixAxisSensorHorizontalOffset
|-
|-
|  0x4310
|  0x4310
0x01
0x1
|  [6.0.0+] BatteryVersion
|  [6.0.0+] BatteryVersion
|-
|-
|  0x4320
|  0x4320
0x01
0x1
|  [10.0.0+] TouchIcVendorId
|  [10.0.0+] TouchIcVendorId
|-
|-
|  0x4330
|  0x4330
0x04
0x4
|  [9.0.0+] ColorModel
|  [9.0.0+] ColorModel
|-
|-
|  0x4340
|  0x4340
0x01
0x1
|  [10.0.0+] ConsoleSixAxisSensorMountType
|  [10.0.0+] ConsoleSixAxisSensorMountType
|
|}
 
== ProductModel ==
This is "nn::cal::ProductModel".
 
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0 || Invalid
|-
| 1 || Nx
|-
| 2 || Copper
|-
| 3 || Iowa
|-
| 4 || Hoag
|-
| 5 || Calcio
|-
| 6 || Aula
|}
|}


Line 429: Line 373:
   return(crc);
   return(crc);
  }
  }
= CalibrationFile =
This is "nn::cal::CalibrationFile".
This is a FAT12 compliant filesystem mainly used to keep calibration logs and other assorted files.
├── Certifications
│  └── WirelessCertification.png
└── ptd
    ├── DeviceIdWithEmsBit.dat
    ├── Ecid.dat
    ├── prodCode.dat
    └── log
        ├── Process_asm1.log
        ├── Process_board1.log
        ├── TestFlagLine.log
        ├── TestFlagQc.log
        ├── AGING
        │  └── Sequence.log
        ├── BOARD_TEST
        │  └── Sequence.log
        ├── BOARD_WIRELESS
        │  └── Sequence.log
        ├── FINAL_CHECK
        │  └── Sequence.log
        ├── LCD_AND_KEY
        │  └── Sequence.log
        └── USB_AND_HP
            └── Sequence.log
== DeviceIdWithEmsBit ==
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].