0
\$\begingroup\$

The goal of this project is to create a working adapter between a wired Xbox 360 controller and a Nintendo 64 game console. The signals from the Xbox 360 controller USB port data pins (Data+ and Data-) will be picked up and modified appropriately by a microcontroller; the modified 32-bit output signal will feed into the console. I am not going to inquire on how to perform the bulk of the tasks, rather a means of surpassing a roadblock that occurred during preliminary testing.

A computer running a Windows 7 OS is typically capable of locating drivers for the controller, which then allows the controller to communicate with the PC. Rather than plugging into a USB port, however, I have provided 5V directly from a power supply across the VCC and GND terminals on the physical male USB stick appended to the controller. This was partially a success in that the light indicating power is received turned on; but only momentarily, for about a third of a second. The light then turned off until I reconnected the DC signal. In other words lifting a lead from either GND or VCC and then reconnecting caused the light to blink again - for about a third of a second each and every time it was tested.

I presume there is a particular sequence of data that needs to be sent in through the two data pins, that the Windows driver would know how to communicate with. In this way a computer with the drivers installed will power the controller on and then immediately initiate some sort of coded signal through the data pins to keep the controller powered on indefinitely. It is at this point that I believe the controller can send data through the USB data pins, to the computer, though which the signal will vary based on the combination of buttons being pressed. Because I cannot get the controller to stay on I cannot even begin to test this, so it is all theoretical to me.

Could anyone shed light on what I may be doing wrong in powering the controller? Am I required to send data in the same way a Microsoft driver would to get the light to stay on? If so, how can I know the required signals to be sent? Am I potentially missing something else? I could not find a datasheet for the Xbox 360 controller that contains any information on how to intercept its signals and provide power (no shock there), so I have addressed my question here in hopes that someone has knowledge in this area.

Not looking particularly for a quick reply, just one that may concretely address these low-level questions.

\$\endgroup\$
5
  • 1
    \$\begingroup\$ You'll probably want to use a USB sniffer/analyzer to determine what's happening. You might either buy a hardware analyzer, or try something like vusb-analyzer.sourceforge.net. I've never used either. \$\endgroup\$ Commented Mar 6, 2014 at 2:48
  • 3
    \$\begingroup\$ This might be more complex than you're expecting, your microcontroller will need to act as a USB host and it's quite a complex protocol. You might find it a lot easier to use a Linux SBC such as a Raspberry Pi, BeagleBone etc that already has the full stack and after a quick look it appears there are XBox controller drivers already available for Linux. \$\endgroup\$
    – PeterJ
    Commented Mar 6, 2014 at 2:48
  • \$\begingroup\$ Both suggestions are much appreciated. I am interested in first attempting to understand or decode what signals the controller is sending through the USB data pins. Though I will consider using a SBC as a potential alternative. How would I read signals received through the SBC USB port? Is this a built-in capability that can be programmed on the board? \$\endgroup\$
    – user33573
    Commented Mar 7, 2014 at 3:11
  • \$\begingroup\$ @user33573, you'd need to learn a bit about Linux, but you'd end up with a device that could be read like a normal file. At that level the protocol should be easy to decode just by looking at the output from different buttons. Then you could write a small program to read that file and set the outputs as appropriate. \$\endgroup\$
    – PeterJ
    Commented Mar 7, 2014 at 5:22
  • \$\begingroup\$ Your first step should be to read the USB protocol, that will tell you about the signals and the process of establishing USB communications. \$\endgroup\$
    – John U
    Commented May 6, 2014 at 16:47

2 Answers 2

3
\$\begingroup\$

The xbox controller is a composite USB device, consisting of a USB Hub, a USB HID device, and a memory device or two for the memory cards (or other accessories). Before the driver even begins to take control, the USB Host (I.e. the computer) must initiate a standard usb enumeration process.

If you plug in the controller to power, but the usb D+ and D- are left floating, it does not see any enumeration and shuts down. Like if you plug it into a dumb charger. Enumeration is typically expected to take place in milliseconds, which is why you only see it on for a third of a second (330 milliseconds, an eternity to a microcontroller).

\$\endgroup\$
2
  • \$\begingroup\$ What signals are sent to the Xbox controller during enumeration that allows the controller to stay on? Would this require reverse engineering to figure out? If so is there a known USB adapter device that has leads sticking out allowing for signal interception? When the exact wave forms of the signals are identified, should it not be a trivial task to replicate said signals with a MCU? \$\endgroup\$
    – user33573
    Commented Mar 7, 2014 at 2:57
  • 1
    \$\begingroup\$ @user33573 the signals are "usb enumeration". That's what it is called. An adapter would be a usb breakout, and you would connect the d+ and d- to individual channels of a logic probe or oscilloscope, or if you have a couple hundred to spare, a usb logic analyzer. As for replicating enumeration on a MCU, that requires creating a USB HOST for usb composite devices and usb hid devices. A MCU with hardware USB Host support would be your best bet. \$\endgroup\$
    – Passerby
    Commented Mar 7, 2014 at 4:53
1
\$\begingroup\$

The N64 only supplies 3.3V over the power pin to controllers.

I used a beaglebone black to make a n64/gamecube adapter for any usb device, but it needs external (5V) power.

I am in the process of re-writing the software so if you want to collaborate just shoot me an email. Bulk of the work is getting certain utilities to compile on Angstrom Linux. ( Or finding a way to get Qt4 embedded to run on Ubuntu )

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.