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 a 78K0/KC2-L from NEC/Renesas.
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 |
SMC_CMD_ODD_ON
|
0x01 |
Command |
SMC_CMD_ODD_OFF
|
0x02 |
Command |
SMC_CMD_ODD_EJECT
|
0x10 |
Command |
SMC_CMD_SBYLED_OFF
|
0x11 |
Command |
SMC_CMD_PWRLED_ON
|
0x12 |
Command |
SMC_CMD_PWRLED_OFF
|
0x13 |
Command |
SMC_CMD_PWRLED_BLINK
|
0x14 |
Command |
SMC_CMD_C24LED_OFF
|
0x15 |
Command |
SMC_CMD_C24LED_ON
|
0x16 |
Command |
SMC_CMD_C24LED_BLINK
|
0x1E |
Command |
SMC_CMD_SBYLED_ON
|
0x1F |
Command |
SMC_CMD_SBYLED_BLINK
|
0x20 |
Command |
SMC_CMD_RESET_BT
|
0x21 |
Command |
SMC_CMD_RESET_WIFI24
|
0x22 |
Command |
SMC_CMD_RESET_WIFI5
|
0x30 |
Read/Write |
SMC_CMD_TIMER_23_16
|
0x31 |
Read/Write |
SMC_CMD_TIMER_15_08
|
0x32 |
Read/Write |
SMC_CMD_TIMER_07_00
|
0x40 |
Read |
SMC_CMD_PROG_REVISION (val: 0xC5)
|
0x41 |
Read |
SMC_CMD_SYSTEM_EVENT
|
0x42 |
Read |
SMC_CMD_ODD_FLAG (val: 0x0B, 0x0A?)
|
0x43 |
Read/Write |
SMC_CMD_USB_FLAG (bitmask; front USB: 0x1, rear USB: 0x2)
|
0x44 |
Read/Write |
SMC_CMD_CCIND_FLAG
|
0x45 |
Read/Write |
SMC_CMD_PWRERR_FLAG (val: 0x08)
|
0x46 |
Read/Write |
SMC_CMD_DEVEN_FLAG (val: 0x00)
|
0x47 |
Read |
? not writable (val: 0xFF)
|
0x48 |
Read |
ChipRevision (val: 0x0F)
|
0x49 |
Read |
? (val: 0x4000000; needs ProgramRevision > 0xD3?)
|
0x60~0x6F |
Read/Write |
Nvram
|
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)
|
SMC_CMD_SYSTEM_EVENT
Bits
|
Description
|
0
|
SMC_WAKE1
|
1
|
SMC_WAKE0
|
2
|
SMC_BT_IRQ
|
3
|
SMC_TIMER
|
4
|
SMC_DISK_INSERT
|
5
|
SMC_EJECT_BUTTON
|
6
|
SMC_POWER_BUTTON
|
7
|
|
SMC_CMD_CCIND_FLAG
Bits
|
Description
|
0
|
Yellow LED pulse
|
1
|
Yellow LED on
|
2
|
Red LED pulse
|
3
|
Red LED on
|
4
|
Blue LED pulse
|
5
|
Blue LED on
|
6-7
|
|
SMC_CMD_DEVEN_FLAG
Bits
|
Description
|
0
|
SMC_DEVEN_WIFI24
|
1-7
|
|
Nvram
Must be written from largest to smallest address for values to be set.
Offset |
Size |
Description
|
0x0 |
0x1 |
LAPSSetting
|
0x1 |
0xF |
SystemError
|
Pinout
Counter-clockwise from the dot and PCB arrow:
Pin number
|
Name
|
Notes
|
01
|
INTP0/EXLVI
|
Connects to TP146, RTC, WIFI24 (connector pin 21) and BT (connector pin 11). Input. Triggers blinking red LED on LOW.
|
02
|
RESET
|
Connects to TP145 and RTC. Resets SMC when measured. On WUP-DEV-X9, attached to a 5-pin header (pin1).
|
03
|
XT2/EXCLKS
|
Connects to TP144 and RTC. Input. SMC stops i2c on LOW.
|
04
|
XT1
|
Connects to TP168 and SW4 (pins 1 and 3).
|
05
|
IC
|
Disconnected (Internally Connected).
|
06
|
X2/EXCLK/TOOLD0
|
Disc presence sensor (receiver). Connects to TP19 and disc drive (connector pin 19). On WUP-DEV-X9, attached to a 5-pin header (pin2).
|
07
|
X1/TOOLC0
|
Clock (pulses between 3.3v and 0v at 1Hz). Connects to TP175 and RTC. On WUP-DEV-X9, attached to a 5-pin header (pin3).
|
08
|
REGC
|
Connected to GND via C137.
|
09
|
Vss
|
|
10
|
Vdd
|
Connects to decoupling cap C73.
|
11
|
P60/SCLA0
|
Connects to TP153. I2C SCL.
|
12
|
P61/SDAA0
|
Connects to TP154. I2C SDA.
|
13
|
P62
|
Connects to TP70 (separated by resistor). Power Button (active low).
|
14
|
P33
|
Connects to TP155.
|
15
|
P73/KR3
|
Rear USB enable. Connects to TP80.
|
16
|
P72/KR2
|
Rear USB fault. Connects to TP109.
|
17
|
P71/KR1
|
Connects to TP38.
|
18
|
P70/KR0
|
Connects to TP15.
|
19
|
P32
|
Connects to TP157.
|
20
|
P31
|
Front USB enable. Connects to TP39.
|
21
|
P30
|
Connects to TP68, and faceplate (connector pin 8, not connected to any buttons). Internal pull-up.
|
22
|
P17
|
Front USB power fault. Connects to TP95.
|
23
|
P16
|
Connects to TP156 and BT (connector pin 12).
|
24
|
P15
|
White LED. Transistor pin. PWM at 100Hz.
|
25
|
P14
|
Eject button. Connects to faceplate. Input, internal pull-up.
|
26
|
P13
|
Yellow LED. Connects to TP2001 and faceplate. PWM at 100Hz.
|
27
|
P12
|
Connects to TP37.
|
28
|
P11
|
Connects to TP171 and faceplate.
|
29
|
P10
|
Connects to TP16.
|
30
|
AVref
|
Connects to decoupling cap C73.
|
31
|
AVss
|
|
32
|
P26
|
Disc presence sensor (transmitter). Connects to TP18. 8Hz.
|
33
|
P25
|
Fake power button (connected to RTC, pulsed low with Eject). Connects to TP9.
|
34
|
P24
|
Disk eject (to drive, active high). Connects to TP5.
|
35
|
P23
|
Optical power enable? Connects to TP152, TP88 and battery.
|
36
|
P22
|
Connects to TP172 and BT (connector pin 13).
|
37
|
P21
|
Connects to TP173 and WIFI5 (connector pin 7).
|
38
|
P20
|
Connects to TP174 and WIFI24 (connector pin 16).
|
39
|
P01
|
Blue LED. Transistor lead. PWM at 100Hz.
|
40
|
P00
|
Red LED. Connects to TP66, TP2000 and faceplate. PWM at 100Hz.
|
WUP-DEV-X9 has an unpopulated through-hole 5-pin debug header for SMC.
Pin number
|
Name
|
Notes
|
01
|
nRST
|
Connects to SMC RESET.
|
02
|
?
|
Connects to SMC TOOLD0 (data input/output for tool).
|
03
|
?
|
Connects to SMC TOOLC0 (clock input for tool).
|
04
|
3v3
|
Connects to TP122.
|
05
|
GND
|
Connects to GND.
|