Circuito para asignar direcciones de hardware

3

Estoy diseñando un sistema con una placa maestra y un número variable de placas hijas idénticas que me gustaría conectar en una cadena. La placa maestra contiene un microcontrolador, pero las placas hijas no contienen nada inteligente. La tarjeta maestra solo se conectará a una tarjeta hija, y cada tarjeta hija podrá conectarse a la siguiente tarjeta hija.

Me gustaría encontrar una manera para que la tarjeta maestra pueda detectar cuántas tarjetas están conectadas a ella, y poder enviar señales a cada tarjeta dependiendo de dónde se encuentre esa placa en la cadena.

¿Alguien tiene una buena idea para esto? Cuanto más simple, mejor.

    
pregunta Marlon Smith

3 respuestas

3

La forma más sencilla de crear una señal genérica de "selección de tablero" es crear un registro de desplazamiento distribuido, como se muestra a continuación. Esto es similar a lo que haces cuando usas un 74xx595 como expansor de E / S, y también es similar a cómo funciona JTAG.

El microcontrolador puede seleccionar cualquier tablero secundario (o incluso más de uno) cambiando el patrón apropiado de unos y ceros en los flip-flops.

Cada tarjeta secundaria también tiene un transistor de colector abierto que tira de una línea ACK cada vez que se selecciona. Esto permite que el microcontrolador cuente cuántas tarjetas hijas están presentes, cambiando una sola a la primera tarjeta, y luego contando cuántos relojes se necesitan para que la línea ACK alcance el máximo nivel.

Tenga en cuenta que la línea ACK puede no ser necesaria si tiene algún otro medio para determinar que una placa está seleccionada, como por ejemplo, ver si responde a un ciclo de bus SPI.

Tenga en cuenta también que si necesita una señal de selección de tabla activa-baja, solo use la salida no-Q del flip-flop.

Este esquema no necesita ningún tipo de bucle de retorno en la última tarjeta secundaria.

    
respondido por el Dave Tweed
1

Si se supone que las tarjetas hijas simplemente envían señales desde el maestro, un enfoque común es conectar en cascada los chips de registro de desplazamiento 74HC595 o 74HC4094; cada placa tiene entradas de "registro de cierre", "reloj de cambio" y "datos" que se envían al primer registro de cambio, y transmite las señales de "registro de cierre" y "cambio de reloj", junto con la salida de datos del último registro de cambios, a la siguiente tabla. Si uno necesita tanto entradas como salidas, puede hacer que cada placa también acepte una entrada de "datos de retorno" de la placa descendente que alimenta cero o más registros de desplazamiento 74HC165, y la salida del último registro alimenta los "datos de retorno" Entrada de la siguiente placa aguas arriba. La última placa de la cadena debería tener su "salida de datos" que alimentaría a una próxima tabla no existente a la "entrada de retorno" que provendría de esa placa.

De esta manera, el dispositivo maestro puede determinar cuántos registros de desplazamiento hay emitiendo un número de bits "0" que se sabe que es mayor que el número de bits de registro de desplazamiento, confirmando que la entrada de retorno de datos es baja , y luego registrando los bits "1" hasta que un bit "1" vuelva a aparecer en el retorno de datos.

    
respondido por el supercat
0

Si usa un bus SPI, puede simplemente encadenar a sus esclavos de esa manera:

Las restricciones son las siguientes:

  • no es posible leer y escribir en ráfaga
  • todos los esclavos deben tener el mismo tamaño de datos SPI X
  • el maestro puede determinar exactamente cuántos esclavos están conectados bajando SS, enviando un '1' en MOSI y observando cómo regresa después de los ciclos de reloj Y en SCLK: hay esclavos Y / X conectados.
  • si necesita leer la fecha de los esclavos (lo que significa que los esclavos tienen que inyectar sus datos en el flujo de datos SPI de alguna manera) el protocolo no puede ser el protocolo SPI habitual (esclavo sin estado, datos leídos en una transacción SPI) porque cada esclavo no tiene forma de saber cuántos otros esclavos están conectados, por lo tanto, cuántos bits deben pasar sin cambios y dónde están los bits que puede modificar.
respondido por el Sylvain

Lea otras preguntas en las etiquetas