Wii Motion Plus fails to initialize

Damn... Just realized that I might actually have wired up the arduino to the extension port instead of the normal port. Disregard everything I wrote until I can check this ;)

Hello!

I am trying to connect to the Wii Motion Plus through I2C as described in quite a few threads on the forum. I am beginning to think that there is something wrong with my WMP though.

This is what I've done.
(Registers and addresses have been looked up at http :// Wiimote/Extension Controllers - WiiBrew and in several other threads)
(Sorry for breaking up the link, but I am not allowed to post active links in my first post)

  1. I have connected the WMP directly to the Arduino with:
    Vcc -> 5v
    SCL -> Analog 5
    SDA -> Analog 4
    Gnd -> Gnd
    I am using no pull-up resistors, since this should not be needed (even though I have seen mention that it will probably improve the signals). TWI_FREQ is 100MHz.

  2. When I read address 0x53, register 0xFA, the WMP responds with 00 00 A6 20 00 05 which is the correct identification sequence.

  3. I can successfully send 0x04 to address 0x53, register 0xFE.

  4. Any further attempts to send anything to any address is blocked by the WMP. I have tried using an alternative I2C implementation that gives better debug information and the place where it fails is right before it is going to send the register to the WMP. There it does

while (!(TWCR & (1<<TWINT)));

which I would assume is some kind of polling function which in this case turns into an infinite loop.

If I remember correctly from what I've read about I2C, this seems to be what is called clock stretching, or in other words, the I2C slave holds SCL low until it is ready, which in my case seems to be never when I have sent the init code to it.

Is my WMP broken or have I missed something? It is obviously connected in the right way since I get valid information before I send the init...

Best regards,
//Leo

Heh...

I was right, for some odd reason I misread the connection instructions and connected the Arduino to the WMP extension port.

Now it works perfectly.