Cómo interactuar con un bus que está encendido cuando el resto de mi circuito está apagado

Estoy trabajando en la interfaz con un bus SPI que muestra algún... mal comportamiento.

El autobús sale de una caja de control en una batería de juguete. La caja de control es el maestro SPI y se puede encender y apagar con un botón incorporado. Un circuito separado que lee de los pads de batería es el único esclavo en el bus.

Lo que estoy haciendo es esto: básicamente he agregado un maestro al bus, en forma de microcontrolador. Sé que este no es un uso estándar de SPI, pero es para un proyecto de pasatiempo, así que no me importa. Los dos maestros nunca operan simultáneamente, por lo que no hay conflictos. Principalmente hago cumplir esto: si la caja de control está encendida, no conecto el cable USB al microcontrolador (estoy usando un Pro Micro). Además, si el microcontrolador detecta que la caja de control está encendida, el uC finalizará las comunicaciones SPI.

Aquí está mi circuito. Todavía necesito almacenar en búfer la línea MISO, pero aparte de eso, es lo que estoy usando.

ingrese la descripción de la imagen aquí

Hay tres estados en los que puede estar este circuito:

  1. Apagado: la caja de control está apagada y el Pro Micro está desenchufado
  2. Alimentación de la caja de control: la caja de control está encendida, pero el Pro Micro está apagado, gracias al diodo Schottky. La caja de control es la maestra y el Pro Micro está aislado del circuito.
  3. Pro Micro power: el cable USB está enchufado y el Pro Micro es el maestro. La caja de control está apagada.

Mi problema ocurre durante el estado 1. Aunque la caja de control está apagada, las líneas SPI que salen muestran 3.3V . Por alguna razón, la caja de control alimenta MOSI, CLK y CS a pesar de que su VCC muestra 0V. Cuando ni la caja de control ni el Pro Micro están encendidos, el búfer no tiene alimentación y las salidas ven 3,3 V. De alguna manera esto está alimentando a la inversa el búfer, que a su vez alimenta el resto de mi circuito.

Estoy usando un búfer SN74AHC125 .

Antes de comenzar a usar el búfer, conecté las líneas SPI directamente a mi microcontrolador (ATMega 32U4). Tuve el mismo problema: las líneas SPI alimentaban mi Pro Micro a través de los diodos de protección inversa en los pines.

Entonces, ¿cómo puedo conducir estas líneas cuando todavía están encendidas mientras el resto de mi circuito está apagado?

¿Puedes adjuntar un diagrama de tus conexiones?
@Bruno Ferreira: Listo
¿Ha intentado colocar una resistencia de 1K entre las líneas del bus y la tierra solo para verificar si el voltaje de salida está activo o solo debido a pull-ups?
¡Es una gran idea! Sin embargo, es extraño que ese sea el caso incluso cuando el dispositivo está apagado. Una vez que coloco las resistencias, ¿cómo puedo verificar si está activo o solo debido a pull-ups? No tengo osciloscopio, pero si multímetro y analizador lógico
Verifique con un multímetro si los 3.3V permanecen cuando apaga el circuito.
Ok, puse 1K entre CS y GND, y medí alrededor de 3 voltios en la resistencia. Supongo que es activo alto :(
Esto es fácil de arreglar: todo lo que se necesita es toda la información :-). Las palabras pueden contener toda la información disponible, pero las palabras tienden a necesitar un análisis cuidadoso y una paliza hasta la muerte, y es fácil escribir lo que parece una descripción completa, pero a otros les resulta difícil seguir. mientras que [tm] un diagrama de circuito verdaderamente completo puede analizarse por derecho propio. Puede necesitar algunas palabras de apoyo, pero la información principal debe estar en el diagrama. Su diagrama es un buen comienzo, pero creo que está incompleto. claro, mi cerebro intenta agregar los bits perdidos, pero ¿qué puedo perder? | ...
... Creo que su suministro zener puede mostrarse al revés. | ¿Cómo llega la energía al bus cuando Vcc está apagado? ¿Cómo se apaga Vcc? Lo que REALMENTE se está apagando. ¿Por qué, por ejemplo, puede poner un interruptor en los cables de la batería o cortar los cables con un sable de luz cuando no está en uso:-)). | Back to mack MODFETS en cada línea de autobús lo apagará, pero debería funcionar más simple una vez que sepamos todos los hechos. ||
Interruptor MOSFET. Dos mosfet. puerta a puerta, fuente a fuente, los drenajes son pines bidireccionales de entrada/salida. conecte las puertas a través de 1 megaohmio, digamos al sistema V+ para encender (si es FETS de canal N). Conecte a tierra las puertas a través de 1 megaohmio para apagar. El voltaje máximo conmutable es Vgates - Vgs_threshold, por lo que necesita una fuente más alta que Vbus y/o Vgsth FETS muy bajo. Funciona.
@Russell: estoy de acuerdo, esto es un poco confuso tal como está, por lo que solo estaríamos adivinando. Un diagrama de circuito adecuado, con, por ejemplo, información sobre exactamente dónde/cómo se está "apagando" Vcc ayudaría a obtener una respuesta rápida.
@RussellMcMahon: en realidad es un diodo Schottky, no un Zener. La biblioteca de partes que usé tenía el símbolo incorrecto y no me di cuenta.
Ok, he publicado el esquema completo. Sin embargo, creo que también he encontrado una solución. Lo escribiré ahora, aunque todavía estoy muy interesado en otras opiniones.

Respuestas (1)

Ok, he resuelto esto. Agregué buffers entre la caja de control y el controlador del pad de batería. Esto se suma a los búferes entre el microcontrolador y el controlador del pad de batería.

Entonces, la configuración del búfer en (una) de las líneas se vería así, con otras partes del circuito omitidas con fines de demostración.

ingrese la descripción de la imagen aquí

Los pines no conectados en los búferes son los pines de habilitación de salida, que no conecté (nuevamente, con fines de demostración).

Este circuito resuelve el problema porque nunca hay alimentación en la salida de un búfer cuando el búfer no está alimentado. Por lo tanto, no se produce flujo inverso.

Estoy bastante seguro de que el búfer tiene diodos de protección de entrada. Si hay un voltaje presente en la entrada del búfer sin alimentación, seguirá fluyendo corriente a través de los diodos de protección. Probablemente funcionará, pero no creo que sea lo ideal. Todavía estoy desconcertado acerca de cosas como qué se está apagando, cuántos suministros están involucrados (creo que otros también lo están), etc., así que puedo estar equivocado. Por ejemplo, ¿por qué no puede simplemente apagar los maestros (es decir, la caja de control)?
Hay dos suministros. La caja de control tiene dos baterías AA y el Pro Micro se alimenta a través de USB. Este es un uso no estándar de SPI porque estoy tratando de interactuar con un dispositivo ya existente. No puedo desconectar la alimentación de la caja de control. Cuando está encendido, está encendido. Mi objetivo con estos búferes es que mi circuito (el microcontrolador) "no estorbe" cuando la caja de control está encendida. Sin embargo, cuando el Arduino está alimentando al esclavo, es cuando tomo el control de él.
Bien, entonces, ¿qué significa "apagado" cuando dices "cuando la batería está apagada, las líneas SPI muestran 3.3V"? ¿Qué está apagado? También "... ¡aunque Vcc muestre 0V!" - ¿Qué VCC?
Lo siento, déjame aclarar eso. Cuando la caja de control está apagada, las líneas SPI que salen de la caja de control muestran 3.3V. Sin embargo, el Vcc de la caja de control muestra 0V.
¿Pero acabas de decir que no puedes apagar la caja de control? Una vez más, ¿qué quiere decir exactamente con "apagado"? ¿Quieres decir en espera? ¿De dónde estás leyendo la caja de control Vcc? ¿Lo ha abierto para ver de dónde obtienen energía las líneas? Creo que si aclaras bien todos los detalles, probablemente obtendrás algunas buenas respuestas ;-)
Ok, he editado la pregunta para aclarar las cosas.