GPIO SNES controller issues

Welcome Page Forums RetroPie Project GPIO Adapter, ControlBlock etc. GPIO SNES controller issues

This topic contains 17 replies, has 3 voices, and was last updated by  Dinofly 2 years ago.

Viewing 18 posts - 1 through 18 (of 18 total)
  • Author
  • #111510


    (topic was renamed, as my issue changed after re-installing a supported version)


    I bought the GPIO adapter, soldered the parts and installed the SNESDev driver using the setup script. The driver is installed properly, as EmulationStation says that 2 gamepads have been detected. But pushing the button does nothing, and my SNES controllers are not working either.

    I tested the button without plugging the controllers in with the testButton program, downloaded from as i could not find it in my local installation. It doesn’t detect anything when i press the button.

    For the SNES controllers, i soldered the ribbon cable to SNES extension cables and pressing any button does nothing (tried with jstest on js0 and js1, and EmulationStation).

    Given the fact that the button on the adapter isn’t working, i assume that fixing this issue will fix the SNES controllers issue too. But maybe the cables to the controllers are too long and the signal is lost ?

    I can show you pictures of my soldering if needed.




    Here are the pictures. Am I doing something wrong ?



    I just found out that the SNESDev process is using 100% of a CPU at all times, the sames goes for emulationstation :

      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
      575 root      20   0    3708   1800   1700 R 100.0  0.2   4:58.57 SNESDev
      694 pi        20   0  124452  44936  18084 R  99.7  6.0   4:34.96 emulationstatio
      279 root      20   0       0      0      0 S   0.3  0.0   0:00.16 RTW_CMD_THREAD
      735 pi        20   0    5092   2468   2120 R   0.3  0.3   0:01.04 top
        1 root      20   0    5360   3908   2740 S   0.0  0.5   0:05.73 systemd
        2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
        3 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/0
        4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0
        5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
        6 root      20   0       0      0      0 S   0.0  0.0   0:00.09 kworker/u8:0
        7 root      20   0       0      0      0 S   0.0  0.0   0:00.12 rcu_preempt
        8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_sched
        9 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
       10 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/0
       11 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/1
       12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 ksoftirqd/1
       14 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H
       15 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/2
       16 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/2
       18 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H
       19 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/3
       20 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/3
       22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H
       23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 khelper
       24 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs


    I must mention that i’m using Raspbian Jessie, and i understand that it isn’t officially supported. I’ll reinstall the official image and try again.



    I reinstalled the SD image from scratch and it works now. Still having issues with one of the 2 SNES controllers but i’ll figure it out.



    Glad that you figured it out yourself already. Yes, Jessie is still not officially supported because of those observations.

    If one of the SNES controllers is not working, it might be a connection problem with the data line of that controller.



    OK now i have some other problem… the button on the GPIO adapter works well in command line mode (it types “r” when pushed), but i can’t use it to exit a game or rewind. I can shut down the Pi with 5 consecutive pushs.

    I think it has something to do with the fact that my keyboard can’t be used at all in Retroarch. Why is that ?



    I have two new weird problems :

    1 – i can only plug one SNES controller at a time. When both controllers are plugged in, none of them works (tested with jstest and EmulationStation). If i unplug one of the two, the remaining one works.

    2 – the SNES controller pushes buttons by itself, or pushes the wrong buttons. For example when pressing right, sometimes it presses “A” and when pressing up, sometimes it presses “Start”. I saw in the SNES controller protocol that these buttons are next one to another in the Button-to-Clock Pulse Assignment. So i suppose that i have a problem with the clock sync, do you think it is because my cables are too long ?



    Some thoughts:

    Which Raspbian / RetroPie image are you using?
    Are you overclocking?
    Are the controllers properly connected to the sockets and the sockets, in turn, with the GPIO Adapter?
    How long are the cables? SNESDev is tested with standard SNES controllers so far.
    It sounds as if the timing is somehow off, yes.
    What is the CPU load of the SNESDev service?



    I’m using the latest stable sd image and just upgraded from binaries using the setup script. Overclocking is set to “Pi2” settings and i’ve put a heatsink on the main chip. The snesdev process is using less than 10% CPU. The controller cable + extension cable is 3 meters long. Everything is connected properly: as I said, when only 1 controller is connected (be it in port 1 or 2), it works (but still has issues with buttons).
    Attached is a picture of my soldering to the extensions cables (male side). I will try this on a real snes but the heat of the soldering iron bent some pins in the extension cable male plug so I’ll have to fix this.



    Turns out it’s even worse on a real SNES. Why do these extension cables even exist ? X and A buttons get pressed without touching anything…
    So it’s not a GPIO or SNESDev issue. I’ll shorten the cables and try again.



    I just tried plugging the ribbon cables directly into my SNES controller and the issue is still the same. My setup is now as follows :

    • A SNES controller plugged directly to the ribbon cables
    • A SNES extension cable shortened to 70cm soldered to the ribbon cables, with no controller plugged in
    • No overclocking

    The issues are still :

    • Pressing buttons sometimes trigger other button presses (“A” gets sometimes pressed when “right” is pressed for example). This happens often but games are mostly playable… it’s just really annoying. And in EmulationStation, sometimes it launches games when i just want to go to the next machine by pressing right.
    • Plugging a second controller into the extension cable disables both controllers

    Do you think both issues are related ? Do i have a short circuit somewhere ? What tests should i do to investigate ?

    I think i will try axle-h’s SNESDev fork, i’ve read he made some timing changes so maybe i will have more luck with this version.



    I installed axle-h’s SNESDev fork and it solved one of the issues: no more ghost button presses !
    But i still can’t connect both of the controllers at the same time 🙁



    Am i the only one who has this issue ?
    Is there anything i can do to diagnose the cause of it ? I have a multimeter and checked every pin for continuity: everything seems ok. Is there a software i can use to monitor the GPIO status and see what changes when i plug in a second controller ?
    I still don’t know if it is software related or hardware…



    I’m talking to myself here, but maybe this will help someone facing the same issue. I finally got 2 controllers working.

    I have 5 SNES controllers: 1 old official, 3 new non officials that i bought from Adafruit and 1 old non official “Super-4” turbo controller. All of them work fine on my Super Nintendo.

    On the Pi with the GPIO Adapter, i always tested plugging in my official gamepad and one of my Adafruit gamepads. And i had issues with this configuration. Today, i tested with my 2 old controllers (official and “Super-4”). Both worked without any issue with the official SNESDev driver. No ghost buttons, no issues when both are plugged in at the same time.

    So this means that the recent SNES controllers from Adafruit don’t quite use the same settings than the old controllers. They work on my real SNES, but have issues on the Pi. Old controllers work as expected. Or am i the only one having issues with recent SNES controllers on the Pi ?



    I really have no idea if this matter or not, but I’ve always wondered why the GPIO adapter seems to use the 3.3V pin instead of the 5V pin to power the SNES contoller… According to pin out diagrams, the actual console outputs 5V on the Vcc pin. Maybe that’s the difference? *shrug*



    I think I answered my own question about why it’s used after digging around a bit. The GPIO pins use 0V or 3.3V, not 5V. I would assume if the controller was powered with 5V, the data stream would be at a 5V “on” level.

    Still may be the issue on some controllers not working well at 3.3V instead of 5.



    I’ve read about that today and i think you are right. The 3.3V tolerance might be the difference between the old and the new controllers.

Viewing 18 posts - 1 through 18 (of 18 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