¿Cómo puedo conectar una Raspberry PI GPIO a un circuito colector abierto para enviar / recibir datos?

1

Tengo un GPIO de una Raspberry PI conectado a un sistema Nintendo 64, como por ejemplo:

Por lo que he recopilado y observado, la línea de datos en el sistema N64 es una salida de colector abierto. La línea está atada a un nivel alto cuando los datos no se transmiten y se baja para transmitir.

El PI es compatible con las configuraciones de subida / bajada para los pines GPIO, pero no veo nada acerca de una configuración de colector abierto.

Con mi configuración actual, puedo leer datos del N64 con el PI. Sin embargo, estoy totalmente atascado en cómo eliminar la línea de datos de forma no destructiva utilizando el pin GPIO y también leer desde el mismo pin.

¿Es esto algo que puedo lograr sin hardware adicional? ¿O debo agregar algo como un transistor que puedo cambiar con el PI para conectar la línea de datos a tierra? Si hago eso, ¿cómo leeré los datos?

Como puede ver, sé lo suficiente como para confundirme por completo, pero no lo suficiente como para resolver el problema.

¡Gracias por tu ayuda!

    
pregunta terrorflops

2 respuestas

1

Suponiendo que la Raspberry Pi es solo un consumidor de datos, su GPIO se configuraría como una entrada, y si habilita o no una resistencia de recuperación dependerá de si está integrado en el controlador o no. No puedo pensar en una razón por la cual la Raspberry Pi haya impulsado activamente la línea de datos. Me gustaría adivinar que necesita habilitar el pull-up en la Raspberry Pi, porque de lo contrario, ¿qué sentido tiene tener una interfaz de colector abierta en el controlador? Es posible que deba utilizar una resistencia de pull-up externa si el pull-up interno es demasiado débil; el tutorial que menciono a continuación sugiere 2.2k Ohms, mientras que los pull-ups internos en el Pi son probablemente gt; 30k.

Me pregunto si realmente será capaz de obtener un muestreo determinista de la señal en la Raspberry Pi lo suficientemente frecuente y sin embargo, mediante el sondeo del GPIO, para decodificar los datos en serie (probablemente) provenientes del controlador. No estoy familiarizado con el protocolo del controlador N64, por lo que es difícil de decir.

Encontré esta referencia en Internet, que podría ser útil para usted :

  

Para entender cómo interactuar con un controlador N64, primero se debe   comprender el protocolo que utiliza un N64 genuino para interactuar con el   controlador. Todos los datos se transmiten en un solo cable semidúplex (el   cable de señal enchufado en el pin 25 arriba). Cuando este cable está inactivo, es   Alto (de ahí la resistencia pull-up). Si se detecta un flanco descendente,   significa que los bits están siendo transmitidos. Los bits se transmiten en 4μs.   intervalos Para un 0, el cable es bajo para 3μs y alto para 1μs. Para un 1,   el cable es bajo para 1μs y alto para 3μs. Para leer un poco, tu   debe simplemente esperar a que caiga un borde, y luego leer el cable 2μs después de   El borde que cae. Si el cable es alto, el valor es 1, si es bajo,   el valor es un 0. Todas las transmisiones terminan con un bit 1 que no es   seguido de un flanco descendente, llamado bit de señal.

Parece una codificación de modulación de ancho de pulso en serie. Soy escéptico de que uno pueda decodificar esto fácilmente con una Raspberry Pi. Sería, por otro lado, trivial para decodificar con un microcontrolador, por ejemplo. utilizando interrupciones de cambio de pin y / o temporizadores de hardware / interrupciones de captura de entrada.

Actualizar

Ya que se trata de un bus bidireccional, nunca debe configurar el GPIO a una salida ALTA. Cuando desea que la salida sea ALTA, simplemente colóquela en una entrada con el pull-up habilitado (o tal vez no con el pull-up). Cuando desee una salida BAJA, configure el GPIO en una salida baja. Sin embargo, una vez más, dudo que puedas acertar con un Pi dado el O / S en el camino.

    
respondido por el vicatcu
1
  

Con mi configuración actual, puedo leer datos del N64 con el PI. Sin embargo, estoy totalmente atascado en cómo eliminar la línea de datos de forma no destructiva utilizando el pin GPIO y también leer desde el mismo pin.

Solo cambie el GPIO entre entrada / alto-z, y salida baja. Nunca lo cambie a salida alta. Así es como funciona un coleccionista abierto.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas