Wie erkennt das Nintendo 64, dass ein Controller angeschlossen ist?

Um etwas Kontext zu geben, versuche ich, die Controller-Eingabe an den N64 über einen GPIO-Pin auf dem Raspberry PI zu emulieren.

Um dies zu erreichen, habe ich einen der GPIOs des PI in einer Pull-up-Konfiguration mit der Datenleitung des N64-Controller-Eingangs auf der Vorderseite des Systems verbunden. So sieht das aus:

kein Controller angeschlossen

In dieser Konfiguration sehe ich, dass das N64-System die Leitung hochzieht, wenn es eingeschaltet ist, aber es gibt keine Datenanforderung oder weitere Änderung.

Wenn ich jedoch zusätzlich einen Controller an alle drei Eingänge (Daten, Masse, VCC) wie folgt anschließe:

Steuerung verbunden

Mit dem PI kann ich den Datenfluss zwischen dem System und dem Controller überwachen.

Abschließend also die Frage: Wie erkennt das N64, dass der Controller angeschlossen ist, und wie kann ich das emulieren? Ist es der Widerstand zwischen der 3,3-V- und der GND-Leitung? Etwas ganz anderes?

Dies ist mein erster Beitrag, also lassen Sie mich wissen, ob ich irgendwelche Stack-Tausch-Richtlinien verraten habe oder ob Sie zusätzliche Informationen benötigen.

Vielen Dank für Ihre Hilfe!

Wahrscheinlich durch tatsächliche Teilnahme am Signalisierungsprotokoll. Dies ist wahrscheinlich zu weit gefasst, um hier in einer Antwort darauf einzugehen, aber es gibt viele Online-Ressourcen, die mit einer Websuche leicht gefunden werden können - zum Beispiel developer.mbed.org/users/fomartin/notebook/… Beachten Sie, dass die Richtlinien hier dies nicht zulassen Antworten, die lediglich auf externe Seiten verlinken, müsste eine Antwort genügend Details enthalten, um für sich allein zu stehen, was in diesem Fall möglicherweise übertrieben ist.
Hallo Chris, danke für die Antwort! Ich habe mir viele Websites angesehen, einschließlich dieser, aber alle beschreiben die Kommunikation vom Controller <-> pi, die nichts über die n64 -> Controller-Erkennung enthält. Der Controller reagiert immer korrekt auf 0x00 und andere Abfragebefehle von diesem Setup. Nach dem, was ich gelesen habe, sollte das n64-System die Leitung nach unten ziehen, um den Befehl 0x00 "Controller-Status abrufen" zu senden, aber das sehe ich nicht. Meine Theorie ist, dass das n64 ohne eine Art elektrischer Erkennung nicht mit dem Controller spricht. Ist das sinnvoll?
Möglicherweise möchten Sie einen Speicherbereich oder einen billigen USB-basierten Logikanalysator darauf verwenden. Persönlich würde ich vermuten, dass es nur versuchen würde, alle paar Sekunden abzufragen, da dies das billigste zu implementierende Schema wäre. Aber es könnte etwas mit dem Ziehen von Widerständen oder dem Stromverbrauch oder unerwünschten Nachrichten oder längeren "Hey, ich bin hier" -Impulsen von der Steuerung sein.
Ich hatte gehofft, die Kosten für den Logikanalysator zu vermeiden, aber vielleicht ist es Zeit zu investieren. Ich werde versuchen, die Kommunikation während des Bootens zwischen dem Controller und N64 mit dem PI aufzuzeichnen. Hoffentlich gibt mir das genug Details, um herauszufinden, ob es etwas Interessantes gibt, das ich verpasst habe. Danke!
Sie können Ihrer Frage einen Text hinzufügen, der erklärt, was ein N64-Controller ist. Ein Link zum Datenblatt ist eine Voraussetzung für die Frage.
@Transistor Gibt es ein öffentlich zugängliches Datenblatt für einen N64-Controller?
@Transistor N64 = Nintendo 64 . Kein Datenblatt ist öffentlich verfügbar.
Ja – Nintendo ist schlechter als Broadcom, wenn es um die Veröffentlichung von Datenblättern für ihre Geräte @Transistor geht

Antworten (1)

Es stellt sich heraus, dass ich den GPIO nicht lange genug abgetastet habe. Ich habe ein kleines Raspberry PI-Kernelmodul geschrieben, um den GPIO so schnell wie möglich für 3 Sekunden abzutasten und eine halbgenaue Ablaufverfolgung aufzuzeichnen. Folgendes wurde nach einer Sekunde auf dem Kabel angezeigt:

GPIO-Trace

Zusammenfassend wartet der N64 eine Sekunde nach dem Booten, um die Controller aufzufordern, sich mit 0x00 gefolgt von einem Stoppbit zu identifizieren.

Danke Chris Stratton für deine Hilfe!

Ist dein Code dafür irgendwo verfügbar?