¿Puedo cambiar de forma segura el pin CS sin enviar ningún dato?

2

Actualización: probé la solución que propuse en los comentarios en la práctica (utilizando el pin E en el 138 IC durante el cambio de dispositivo de destino) y de hecho funcionó. Lee todo el tema si quieres más detalles.

simular este circuito : esquema creado usando CircuitLab

Estoy intentando multiplexar varios dispositivos SPI utilizando un 74HC138 multiplexor de 3 a 8 . La lógica de mi programa cambió de típico "establecer CS bajo, SPI fuera, establecer CS alto" a algo como:

void selectDevice(int n) {
    digitalWrite(mux0, n & (1 << 0));
    digitalWrite(mux1, n & (1 << 1));
    digitalWrite(mux2, n & (1 << 2));
}

selectDevice(3); // my device
spiOut();
selectDevice(7); // dummy, not used

Funciona perfectamente si solo hay un dispositivo con el que estoy hablando. Sin embargo, hay algunos problemas cuando dos o más dispositivos se usan de esa manera.

Esta brillante respuesta tiene esto:

  

La línea CS baja, el reloj se desplaza y se desplaza esencialmente en los bits de entrada y elimina los bits de salida, hasta que finaliza la transacción, momento en el cual la línea CS pasa a nivel alto. Cuando su línea CS es alta, los dispositivos esclavos no se comunican: ignoran las líneas CLK y MOSI, y ponen su pin MISO en un estado de alta impedancia para permitir que otra persona lo use.

Este tendría sentido, pero parece contradecirse directamente con el 74HC595 comportamiento de registro de cambios para bajo - > alto ST_CP (así que mi CS) transición de pin:

  

los contenidos de las etapas de registro de desplazamiento (QnS interno) se transfieren a   el registro de almacenamiento y las etapas de salida paralelas

La tabla de comportamiento y el diagrama funcional básicamente indican que ST_CP es irrelevante cuando los datos entran en SH_CP / DS, y se almacenarán en el registro de desplazamiento. Eso significaría que si escribo algunos datos en otros dispositivos, y luego alterno brevemente el pin ST_CP, ¡escribiré esta basura! (asumiendo que la salida esté siempre habilitada).

Como lo veo, esto es precisamente lo que hace mi código de selección, porque los bits no se voltean de inmediato; El multiplexor pasará por otros pines. ¿Eso significa que necesito un pin separado para deshabilitar (hacer alto) todas de las salidas mux durante el cambio? ¿Estoy entendiendo esto correctamente?

    

2 respuestas

5

El HC595 no tiene una entrada CS, no es un dispositivo 'SPI', aunque con cuidado puede manejarse desde un maestro SPI. Los datos siempre se registran en el registro de desplazamiento con la línea del reloj. La entrada de Latch se puede forzar a hacer algo del trabajo de una línea CS, como transferir los datos de S / R a los latches de salida, pero no se puede usar para deshabilitar la entrada de S / R .

Hay varias formas de conducir HC595 desde un maestro SPI.

a) Conecte todos los dispositivos en una cadena larga y transfiera los datos válidos a todos ellos.

b) Tener una línea de reloj separada que vaya a cada grupo de 595s, con datos compartidos y CS, para que los datos en sus S / R no se vean afectados, por lo que se pueden enganchar en las salidas.

c) O tiene una línea CS / latch separada que va a cada grupo 595, con reloj y datos compartidos, de modo que aunque la basura se desplace hacia el S / R, no se trabe en las salidas, y cuando Si quieres actualizarlos, cambias los datos válidos.

Dependiendo de su biblioteca SPI, esto puede implicar un poco de bit de bit manual para separar los grupos.

    
respondido por el Neil_UK
1
  

¿Eso significa que necesito un pin separado para deshabilitar (hacer alto) todas las   ¿Salidas mux durante la conmutación?

Sí.

Si el 138 está habilitado permanentemente, responderá a los códigos intermedios que pueden ocurrir al configurar cada uno de los tres mux bits. En otras palabras, "fallará" las salidas que no quisiste.

El 138 tiene tres entradas de habilitación que deben activarse (/ E1, / E2 = bajo, E3 = alto) para habilitar la salida descodificada. Debería controlar una de estas entradas de habilitación para que, al configurar el número de dispositivo, el 138 esté deshabilitado, haciendo que todas las salidas se mantengan altas. Después de configurar el número de dispositivo, puede habilitar y deshabilitar el 138 para impulsar la salida descodificada.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas