Hardware/SMC
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 |