Hardware/SMC

From WiiUBrew
Jump to navigation Jump to search

General

The Wii U added a new chip to assist with power management alongside the RTC, labeled "SMC". The SMC is responsible for managing disc drive power/eject, power LED patterns, wireless resets, regulator enable/PGOOD monitoring, and possibly other unknown functionality. Known part numbers include 1224EE429 301, 1225EE423 301. Chip is likely related to the RL78/G13, since their pinouts are similar (reset on pin2, i2c pins match, REGC pin matches, "EE" = 40pin 64KB ROM, etc).

Communication

SMC resides as device ID 0x50 on I2C bus 3. It communicates at 5kHz in IOS and 10KHz in Cafe2Wii?

Registers

SMC has two types of registers: Read/write and command-based. Read/write registers operate by having the register number written (1 byte), followed by either another written byte, or a 1 byte read. Command-based registers perform their action just by writing the register number (1 byte). When attempting to read a command-based register, it will read as 0xFF.

Index Type Description
0x00 Command ODD On
0x01 Command ODD Off
0x02 Command ODD Eject Request
0x8D Read/Write? 00 on power on?
0x8E Read/Write? 00 on power on?
0x8F Read/Write? 00 on power on?
0x10 Command ON LED on
0x11 Command ON LED on?
0x12 Command ON LED off
0x13 Command ON LED pulse
0x14 Command CC LED off
0x15 Command CC LED on
0x16 Command CC LED pulse
0x17 ? ?
0x18 ? ?
0x19 ? ?
0x1A ? ?
0x1B ? ?
0x1C ? ?
0x1D ? ?
0x1E Command OFF LED on
0x1F Command OFF LED pulse
0x20 Command bt_rst
0x21 Command wifi_rst
0x22 Command drc_wifi_rst
0x30~0x32 Read/Write TimerCounter
0x40 Read ProgramRevision (val: 0xC5)
0x41 Read SystemEventFlag
0x42 Read ?, read-only (val: 0x0B, 0x0A?)
0x43 Read/Write USB Power (bitmask; front USB: 0x1, rear USB: 0x2)
0x44 Read/Write NotificationLED
0x45 Read/Write PowerFailureState, writable (val: 0x08)
0x46 Read/Write WifiRstCtrl (val: 0x00)
0x47 Read ? not writable (val: 0xFF)
0x48 Read ? not writable (val: 0x0F)
0x49 Read ? (val: 0x4000000; needs ProgramRevision > 0xD3?)
0x60~0x6F Read/Write SystemError, 0x60=LAPSSetting. Values must be written from largest to smallest address for values to be set.
0x70 Read UnkDataValid (0x01 when UnkData is valid, else 0x00)
0x71 Read/Write? Blinks the drive LED/reset on read? (I2C reads 0xFF briefly).
0x72 Read/Write Seems to affect whether UnkDataValid is set for addrs 0x4~0x81. bit1 fills in UnkData with 0x5, ((reg & 0xF0) > 0x80) returns UnkDataValid to 0? (val: 0x00)
0x73 Read/Write UnkAddrHi? Changes to 0x10 when UnkAddrHi is less than 0x10. (val: 0x00)
0x74 Read/Write UnkAddrLo? Changes UnkData and UnkDataValid. (val: 0x00)
0x75 Read ? (val: 0x00)
0x76 Read UnkData. Changes to 0x5 then 0xf1 when 0x74 is written to 0x00 twice.
0x80~0xFF Read/Write scratch mem? (val: 0x00)

SystemEventFlag

Bitmask Name
0x40 SMC_POWER_BUTTON
0x20 SMC_EJECT_BUTTON
0x10 SMC_DISK_INSERT
0x08 SMC_TIMER
0x04 SMC_BT_IRQ
0x02 SMC_WAKE0
0x01 SMC_WAKE1

NotificationLED

Value Name
0x80 ?
0x40 ?
0x20 Blue LED en
0x10 Blue LED pulse en
0x08 Red LED en
0x04 Red LED pulse en
0x02 Yellow LED en
0x01 Yellow LED pulse en

Pinout

Counter-clockwise from the dot and PCB arrow:

Pin number Name Notes
01 P40/TOOL0? TP146, to RTC and Bluetooth(?). Input. Triggers blinking red LED on LOW.
02 nRESET TP145, resets SMC when measured. On WUP-DEV-X9, attached to a 5-pin header (pin1)
03 Main SoC nRST. Input, interrupt(?). SMC stops i2c on LOW. TP144
04 3v3? TP168. Input? SMC stops i2c on LOW?
05 INTP0? Disconnected
06 Disc presence sensor (receiver) TP19. On WUP-DEV-X9, attached to a 5-pin header (pin2)
07 RTC1HZ? TP175, to RTC, clock? Pulses between 3.3v and 0v at 1Hz. On WUP-DEV-X9, attached to a 5-pin header (pin3)
08 REGC Connected to GND via C137
09 GND/Vss
10 Vdd/3v3 Decoupling cap C73
11 I2C SCL TP153, 3v3 pullup resistor
12 I2C SDA TP154, 3v3 pullup resistor
13 Power Button (active low) TP70 (separated by resistor), internal pull-up.
14 ? TP155, to farthest WiFi module? verify
15 Rear USB enable TP80, 3v3 pullup resistor
16 Rear USB fault TP109, 3v3 pullup resistor
17 ? TP38, regulator-related?
18 ? TP15, regulator-related?
19 ? TP157, to closer wifi module? 3v3 pull-up?
20 Front USB enable TP39, regulator-related?
21 ? TP68, mystery faceplate pin, not connected to any buttons. Internal pull-up.
22 Front USB power fault TP95, 3v3 pullup?
23 ? TP156, to Mitsumi/vWii module, 3v3 pullup?
24 LED_W to transistor pin, PWM at 100Hz.
25 BTN_EJECT to faceplate, input, internal pull-up
26 LED_Y TP2001, to faceplate, PWM at 100Hz.
27 ? TP37, regulator-related?
28 Disc present? TP171, to faceplate?
29 ? TP16, regulator-related?
30 AVref? Decoupling cap C73
31 GND
32 Disc presence sensor (transmitter) TP18, 8Hz
33 Fake power button (connected to RTC, pulsed low with Eject) TP9
34 Disk eject (to drive, active high) TP5
35 Optical power enable? TP152, TP88, near backup battery
36 ? TP172, to Mitsumi/vWii module, input?
37 ? TP173, 3v3 pullup? 5GHz wifi?
38 ? TP174, 2.4GHz wifi? input?
39 LED_B to transistor lead. PWM at 100Hz.
40 LED_R TP66, TP2000, to faceplate. PWM at 100Hz.

WUP-DEV debug header

WUP-DEV-X9 has an unpopulated through-hole 5-pin debug header for SMC, possibly for debugging or programming?

Pin number Name Notes
01 nRST TP145
02 ? TP19
03 ? TP175
04 3v3 TP122
05 GND GND