TwBurn received the final parts and he just made the description how to create a USB2CDi adapter yourself: "Got the mini host shields today, soldered up pins and attached it to my prototype board and got it to work. Time to make a final/integrated prototype now. Now I just need to see if I can get/make a housing for it, I published some schematics/manual below.. One of the output pins unfortunately doesn't work on this one, but since I only need 2 out of 4 (for one controller) that wasn't really a problem. On my other prototype (where everything does work) I did manage to succesfully test 2 player support (using an analog stick and a USB controller) - I've been unable to pair two controllers to one BT dongle, and I can't find my small USB hub anywhere so can't test two USB devices. Description is up: https://github.com/TwBurn/cdi-controller-library/wiki"
- Arduino Pro Micro 3.3v
- USB Host Shield Mini
- Logic Level Shifter (4 pin)
- The reset pin of the USB host shield lines up with a GND pin on the Arduino, this one needs to be connected to VCC instead.
- By default the VCC is hooked up to the VBUS of the USB connector, which is 3.3V. Most USB devices will work on 3.3V, but in order to get 5V on the VBUS, you need to cut a trace on the board (indicated in the schematic) and hook up the VBUS pad to the RAW pin on the Arduino.
The Logic Level Shifter is needed to convert the 3.3V signals of the Arduino to the 5V which is used by the CD-i player. The pin connections listed in the schematic are made in a way that supports two controllers at once (integrated splitter).
When built in this way the example sketches can be run without any alterations.
3. Alterations to create a compact design
In order to create a very compact version, I've soldered the Logic Level Shifter (rotated 180 degrees from the schematic) on top of the Arduino Micro, connecting all six pins (LV1 to LV4) to digital outputs on the Arduino (pins 2 to 7) - connecting "LV" to pin 4, and "GND" to pin 5. This does require an alteration to the sketches, namely the following code needs to be added to the top of the setup() function:
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
This configures pins 4 and 5 as output, and provides 3.3V on pin 4 and ground on pin 5.[Thanks, TwBurn]