In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Hardware/SMC

From WiiUBrew
< Hardware
Revision as of 00:51, 13 April 2025 by Hexkyz (talk | contribs)
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 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 ? 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)

SMC_CMD_SYSTEM_EVENT

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

SMC_CMD_CCIND_FLAG

Value Name
0x20 Blue LED on
0x10 Blue LED pulse
0x08 Red LED on
0x04 Red LED pulse
0x02 Yellow LED on
0x01 Yellow LED pulse

SMC_CMD_DEVEN_FLAG

Value Name
0x01 SMC_DEVEN_WIFI24

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