Wii Speak

From WiiBrew
Jump to navigation Jump to search
This page is intended to be a technical guide to the Wii Speak..
For an excellent high-level overview of the Wii Speak, see the Wikipedia entry.

The Wii Speak is an official microphone peripheral for the Wii released back in 2008. It and its channel allowed for users to record audio to send over the Wii message board and live chat over the internet (ala 2008 technology, however). Some games also support this allowing people to use voice commands to control the games, or even talk with other players live while playing the game.

Compatibility

Unlike the Logitech USB Microphone, the Wii Speak is not a regular USB microphone. Using it requires vendor-specific USB commands and firmware.

Hardware

The round microphone enclosure only contains the microphone itself and a controllable blue LED. The rectangular processing box contains three chips of interest:

There is also an unidentified chip labeled "PLLIC MMU 133" that provides the clock for the DSP.

DSP Peripheral
P1,P2,P3 AKM CCLK,CSN,CDTI (3-wire serial)
P4 Atmel PC6
P5 Atmel PC5
P7 Atmel PC2
P15 LED
HD0-HD7 (HIO in 8-bit mode) Atmel PB0-PB7
TSI AKM SDTOB

Boot

  1. To initialize the device, the game sends a control transfer with bmRequestType=0x41, bRequest=0, wValue=0, wIndex=0, wLength=0.
  2. The Atmel resets the DSP and sends it a tiny hardcoded program that zeros IRAM to some degree, clears GPIO pin 5, and stops.
  3. The game reads a status byte by sending a control transfer with bmRequestType=0xC1, bRequest=6, wValue=0, wIndex=0, wLength=1. The response is 1 when the DSP is running and 0 when not.
  4. The game sends the firmware using bulk transfers. All games that support the Wii Speak use the same version of the DSP firmware: 97480 bytes starting with "AE 2F DD EC" and ending with "FD 22 BA FA", SHA-3 hash 778b1f3c2081d9ab577c49884ea155af3d1d8daf4be42d4d9c48e22d.
  5. The Atmel decrypts bootstrap and sparse initialization data of the firmware and passes it all to the DSP.
  6. The DSP bootstrap code applies the list of initialization operations which at the end also contain functions for decrypting the large middle part of the firmware.
  7. The game waits for the status byte to change to 1.
  8. The game sends a few more control transfers, e.g. to configure the AK5702 gain and to unmute the microphone (which enables the blue LED).
  9. The game starts issuing iso transfers in both directions for audio data.

Gallery