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:
- NEC µPD77210 (DSP), relabeled as "MAIN MMU JAPAN", Architecture, Instructions
- Atmel AT90USB162 (USB interface), Datasheet
- AKM AK5702 (ADC), Datasheet
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
- To initialize the device, the game sends a control transfer with bmRequestType=0x41, bRequest=0, wValue=0, wIndex=0, wLength=0.
- The Atmel resets the DSP and sends it a tiny hardcoded program that zeros IRAM to some degree, clears GPIO pin 5, and stops.
- 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.
- 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.
- The Atmel decrypts bootstrap and sparse initialization data of the firmware and passes it all to the DSP.
- 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.
- The game waits for the status byte to change to 1.
- 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).
- The game starts issuing iso transfers in both directions for audio data.