Skip to content

Instantly share code, notes, and snippets.

@webhdx
Created March 30, 2024 09:09
Show Gist options
  • Save webhdx/c1e37dffb43c07c2ab7680bbd603a765 to your computer and use it in GitHub Desktop.
Save webhdx/c1e37dffb43c07c2ab7680bbd603a765 to your computer and use it in GitHub Desktop.
USB Gecko Commands List

USB Gecko Protocol

USB Gecko communicates with a GameCube or Wii via EXI bus. In essence, EXI bus acts like well known SPI.

Commands

If command names are confusing to you, read them as if you were issuing commands from PC to console i.e. 0xA Receive Byte means "read 1 byte from GC".

These commands were documented by studying Shuriken USB VHDL code. The official USB Gecko and USB Gecko SE supported more commands like 16 bit reads/writes or NOR flash access.

All commands are 4 bits long.

[0xA] Receive Byte (GC <- PC)

Receive 1 byte of data from PC. RX Status bit tells there was data in FIFO. If RX Status = 1 you should discard the data.

Command:
Bit 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
In 1 0 1 0 X X X X X X X X X X X
Response:
Bit 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Out X X X 1 X X X 1 1 1 1 1 1 1 1
RX Status Data[7] Data[0]
Bit Name Note
Out[11] RX Status 0: no data, 1: has data
Out[7:0] Data Data received from PC

[0xB] Send Byte (GC -> PC)

Send 1 byte of data to PC. TX Status bit tells you if device was ready to accept data. If TX Status = 1 the data could not be written and you should retry.

Command:
Bit 12 11 10 9 8 7 6 5 4 3 2 1 0
In 1 0 1 1 1 1 1 1 1 1 1 1 1
Cmd Data[7]
Response:
Bit 12 11 10 9 8 7 6 5 4 3 2 1 0
Out X X X X 1 X X X X X X X X
TX Status
Bit Name Note
Out[11] TX Status 0: sent, 1: not sent
Out[7:0] Data Data received from GC

[0xC] Check TX Status

Checks if PC is ready to accept data.

Command:
Bit 4 3 2 1 0
In 1 1 0 0 X
Response:
Bit 4 3 2 1 0
Out 0 0 0 0 1
TX Status
Bit Name Note
Out[0] RX Status 0: can write, 1: do not write

[0xD] Check RX Status

Checks if there is data from PC available for read.

Command:
Bit 4 3 2 1 0
In 1 1 0 1 X
Response:
Bit 4 3 2 1 0
Out 0 0 0 0 1
RX Status
Bit Name Note
Out[0] RX Status 0: no data, 1: has data

[0xE] Receive and Send Byte (GC <-> PC)

Writes and reads 1 byte of data. RX Status bit tells you there was data on the FIFO. TX Status bit tells you if device was ready to accept data.

Command:
Bit 12 11 10 9 8 7 6 5 4 3 2 1 0
In 1 1 1 0 1 1 1 1 1 1 1 1 1
Cmd Write[7] Write[0]
Bit Name Note
In[7:0] Write Data to be sent to console
Response:
Bit 12 11 10 9 8 7 6 5 4 3 2 1 0
Out X X X 1 1 1 1 1 1 1 1 1 1
RX Status TX Status Read[7] Read[0]
Bit Name Note
Out[9] RX Status 0: no data, 1: has data
Out[8] TX Status 0: can write, 1: not sent
Out[7:0] Read Data received from GC

[0x7] LED Off

Turns off onboard LED.

Command:
Bit 3 2 1 0
In 0 1 1 1
Cmd

[0x7] LED On

Lights up onboard LED.

Command:
Bit 3 2 1 0
In 1 0 0 0
Cmd

[0x9] Identify USB Gecko

This commands identifies the device as USB Gecko. The typical 0x00 EXI command used to identify devices like Memory Cards or Broadband Adapter is not implemented and will return 0x00. You have to use 0x9 USB Gecko specific command to be sure the device is present. Correct response is ID: 0x8E.

Command:
Bit 12 11 10 9 8 7 6 5 4 3 2 1 0
In 1 0 0 1 1 1 1 1 1 1 1 1 1
Cmd Write[7] Write[0]
Response:
Bit 11 10 9 8 7 6 5 4 3 2 1 0
Out X X X X 1 0 0 0 1 1 1 0
ID[7] ID[0]
Bit Name Note
Out[7:0] ID Device identifier, always 0x8E
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment