SNES gamepad does not work using ControlBlock

Welcome Page Forums RetroPie Project GPIO Adapter, ControlBlock etc. SNES gamepad does not work using ControlBlock

This topic contains 55 replies, has 10 voices, and was last updated by  petrockblog 2 years, 4 months ago.

Viewing 21 posts - 36 through 56 (of 56 total)
  • Author
  • #97863


    disregard my last two posts. reinstalled retropie and now it works fine! ha, what the hell.

    I am glad to hear that!
    Could you briefly describe what you did when you “reinstalled retropie”? I think that might help people here.



    Well, I’ve actually worked out what the issue was.


    My Pi 2 was overclocked to the Pi2 setting, which is what it should run at as default to take advantage of the higher specs. However, the controlblock does not function at all on this mode. If I revert back to the lowest option for overclocking (pi 1 spec), it works.

    Now the issue is that for some reason the controlblock works fine under that spec – but that entirely defeats the purpose of me buying the pi2 in the first place. SNES hardly runs at all and most games are unplayable without that extra speed.

    Now, as you increase the overclocking bit by bit it’s clear what the issue is – the controlblock seems to go into overdrive and registers random button presses. By the point of getting even close to the stock pi2 spec, the controlblock is inputting every button at complete random, choosing random games and rendering it unusable. By the point you get to pi2 spec, it’s basically got every input as ON.

    So that’s why. And that’s why I didn’t get it resolved until I restarted retropie from scratch – because of the overclocking settings, which didn’t even occur to me as a possible issue.

    So my question is this: is there any chance of a resolution for this? It’s a damn shame having a controlblock that I bought for my Pi2 that doesn’t work at all at any spec over than the lowest setting. I’ve had to revert back to using Bluetooth controllers which operate perfectly even at pi2 spec overclock.



    Thanks for that hint!

    I can reproduce this issue – interestingly, this “only” occurs with “snes” as “gamepadtype”. Gamepadtype “arcade”, e.g., works with the Pi2 overclocking settings. This seems to be a timing issue within the ControlBlock driver and I will try to find a fix for that!



    That would be great

    It would fix my problem as well as the others in this thread as its clearly the cause.

    Keep us updated as to when the update is out! Thanks!



    I was having the same problem (no matter what I did, NES controller didn’t respond). I saw the posts here today, switched the overclock from “pi2” (which is a mild overclock for the pi2, not the native clockspeed of the pi2) to “none” (which makes it run much slower), and the controller started working.

    Looking forward to the fix so that the driver works independent of clockspeed!



    All right – I have just pushed a fix for the issue regarding the broken polling of SNES controllers with “RPi2” overclocking settings:

    Polling of the SNES controllers works for all official (=raspi-config) overclocking modes now!

    To update the ControlBlock driver you need to follow these steps:

    cd ControlBlockService  # change to repository folder
    git pull  # update repository to latest version
    sudo make uninstallservice  # uninstall ControlBlock service
    sudo make uninstall  # uninstall ControlBlock binaries
    make  # re-compile ControlBlock driver
    sudo make install  # install ControlBlock driver
    sudo nano /etc/controlblockservice.cfg  # enable gamepad type "snes" with the text editor
    sudo make installservice  # install ControlBlock service


    I can confirm it now works. Awesome!

    Only issue is there is quite noticeable input lag – this is not present on the lower clocked settings or when using other controllers (bluetooth or usb).

    Any ideas?

    edit: hard gpu sync seems to have fixed it in FCEUMM at least!

    Fixes it in other emulators too, SNES runs beautifully.thanks!



    As mentioned before, overclocking is not the problem in my (and OP’s?) case.
    Even with the new version, the controller is not working (showing “off” when disconnected, “on” when connected) on both controller ports. If set to arcade controller, all buttons are working correctly when connected to GND.
    Any other ideas?



    I’m struggling too

    Pi Model: 2 B
    RetroPie Version Used: 3.0.0 Beta 2
    Built From: SD Image
    USB Devices connected: Keyboard

    Guide used:

    built the controlblock last night. Plugged it all in. emulationstation saying there are 2 controllers connected but the snes controllers are not responding at all.

    Tried to follow the steps provided for dotarj

    Here is a pic of my setup
    controlblock 2 snes

    i2c was next

    went into the ControlBlockService folder

    sudo make uninstallservice

    pi@retropie ~/ControlBlockService $ sudo i2cdetect -y 0
    Error: Could not open file <code>/dev/i2c-0' or</code>/dev/i2c/0': No such file or directory
    pi@retropie ~/ControlBlockService $ sudo i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          03 -- -- -- -- -- -- -- -- -- -- -- -- 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    70: -- -- -- -- -- -- -- --  

    I tried a fresh image still having exactly the same issue.

    Do i need to swap GND and VCC?



    @rumbaldo: Looking at your wiring everything seems to be ok. GND and VCC do not need to be swapped. To be sure, I have updated the ControlBlock article and added a diagram that shows the pin out with which I have successfully connected the original SNES controller front with the ControlBlock. You can find the diagram at

    Maybe you have a short somewhere?

    Also it is important that only a single service uses the I2C port. Also, there were issues with overclocking. I have tested the bug fix as thoroughly as possible, but maybe there is still something wrong. You could try and set the overclocking setting back to “normal”. Also, you could check the functionality of the GPIO expanders by configuring the gamepad type as “arcade”, manually pulling each pin to GND and using the tool “jstest” to see the status changes of the virtual gamepads.



    Just another note: I just wired up another controlblock from scratch. Works fine.



    Hi guys,

    been having similar problems.

    At first I thought it was the overclocking, but nope, even at none there was no playing.

    Thought it was my wiring. Nope all fine. Did Jtest and that was all good.

    Then Florian put out the fix for overclocking. Still no joy.

    Figured therefore, it must be my soldering work, and that I had in some way (undetectable to me) damaged the board. So I bought a new one that comes pre-soldered as one unit. It arrived today.

    Wired the new one up, did a fresh install of V3.0 Beta2 for rpi2. Went through the steps to install the service, and… Still doesn’t work…(!!) The switch works, as does the LED. When the system is booted, two gamepads are recognised, but each gamepad will only detect one button press before it says “already allocated”.

    The only thing I can think now is that it might be my editing of the cfg file. Could anyone possibly throw up a moron-proof, keystroke-by-keystroke instruction?

    The ridiculous bit is that the machine I am building isn’t even for me, but for my best friend, as a surprise wedding present (on the 27th June).

    Any help would be awesome and hugely appreciated.




    Hi guys,

    still having trouble. Have done clean install of v2.6 and 3.0Beta2 for Rpi2.

    Running Rpi2 Model B

    USB devices: Keyboard

    Overclocking; None (just to be sure)

    Also, I have two control blocks. (1 I soldered myself, and another that came pre-soldered, just in case I messed up the soldering)

    With both 2.6 and 3.0 Beta 2, I do a clean install. Starup. Exit Emulation Station. Raspi-config. Expand File System. Restart.

    Then I go through the steps as per:

    ControlBlock: Power Switch, Game Controllers, and I/O for the Raspberry Pi

    Restart system.

    I then edit controlblockconfig.cfg in /etc/ (using “sudo nano /etc/controlblockconfig.cfg”)

    I edit as follows:

    (TAB) “input” : {
    (TAB)(TAB) “gamepadtype” : “snes”
    (TAB) },
    (TAB) “powerswitch” : {
    (TAB)(TAB) “activated” : true
    (TAB) }



    In both versions, the switch and LED work, but when starting up emulation station, at the opening controller configuration screen, it will either acknowledge the controlblockservice with 2 controllers, but when holding a button, it will only accept one button input, before saying already assigned.

    With both versions, I then follow the update fix instructions as above.

    Interestingly, when I get to the “sudo make uninstall” phase, an error pops up in the script:

    pi@retropie ~/ControlBlockService $ sudo make uninstall
    cd src/controlblock && make uninstall
    make[1]: Entering directory ‘/home/pi/ControlBlockService/src/controlblock’
    rm /usr/local/bin/../../build/controlblock
    rm: cannot remove ‘/usr/local/bin/../../build/controlblock’ : No such file or directory
    Makefile:51: recipe for target ‘uninstall’ failed
    make[1]: [uninstall] Error 1 (ignored)
    rm //etc/controlblockconfig.cfg
    make[1]: Leaving directory ‘home/pi/ControlBlockService/src/controlblock’

    I continue nonetheless:
    sudo make install
    sudo nano /etc/controlblockservice.cfg

    **This brings up a blank file, which I fill in as above. I also do:

    sudo nano /etc/controlblockconfig.cfg

    and fill in as above (just to be sure) (is it /etc/controlblockservice.cfg or controlblockconfig.cfg or both?)

    Then I do “sudo make installservice”.

    I switch the machine off. (Power Switch still working). Switch it on again, but when I try to input, it recognises control block service, but will again only allow me 1 input before it’s ‘already taken’.

    I’m pretty sure my wiring is correct (see pictures). And there aren’t any detectable shorts.

    I’ve previously polled the ports using jstest and that all seemed fine.

    Anyone have any ideas?



    Sorry for the delayed response. I’ve had some other things on my mind lately…

    I finally took the time to test the ControlBlock with the new ControlBlockService and it all seems to work now!

    Thanks for the fix Florian!



    Sorry for the delayed response. I’ve had some other things on my mind lately…

    I finally took the time to test the ControlBlock with the new ControlBlockService and it all seems to work now!

    Thanks for the fix Florian!

    Glad to hear that!



    Hi guys,

    Now works like a dream. Couple of tips –

    When I was having my troubles, I had two different pairs of third party replacement controllers for SNES, and was using ports I had ‘harvested’ from a ‘replacement controller ports circuit board’.

    In this respect I was a little unlucky, since all the afforementioned were ‘dodgy’. I replaced the SNES ports and acquired origional, official snes controllers, and presto! It works!!!

    So anyone having similar problems should probably do similarly. Well done Florian! 🙂



    @sudobarn: Also to you – very glad to hear that!



    Unfortunately, I am still unable to use my controllers. I have no idea what else I can try to solve the problem. In jstest all of my controller buttons are shown “off” with no controller connected and stay “on” after connecting. To isolate the problem I swapped the following parts:
    – power supply
    – raspberry pi (two different Pi 2 B)
    – controlblock (got a second one, pre-soldered, just in case…)
    – wiring of the controller
    – snes controller
    – micro sd card
    – installaton of retropie (both stable and beta release)
    – overclocking

    Any ideas? Anything I forgot to check? I am clueless… 🙁



    Hopefully you’re still monitoring this thread. After hooking up my new controlblock, my snes controllers weren’t being recognized, so I’ve made it to this thread to try and debug the problem. When I reached the step below, my output remained all dashes. What should my next step(s) be?

    Sorry, I did not think about this before. You need to disable the controlblockservice before this test. You can simply do this with these commands run from within the ControlBlockService folder:
    sudo make uninstallservice
    Does the output of sudo i2cdetect -y 1 look different then? If the GPIO expanders are recognized correctly, we will see a line
    20: 20 -- -- -- -- -- -- 27



    I found the problem. I had ordered a pre-soldered board to save some time (lol, THAT didn’t work!). Where one of the 8 pin terminal blocks was soldered, too much solder had been placed shorting out two pins from the header. I removed the excess solder, cleaned up the board, and now everything is working.



    omg, glad to hear that you figured it out!

    I will check the solder process to try to enhance it in the future.

Viewing 21 posts - 36 through 56 (of 56 total)

Forums are currently read only - please visit the new RetroPie forums at

PLEASE NOTE: All orders that are placed between January 14th and January 28th will be shipped on January 29th. Dismiss