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]]. |