Estoy trabajando en un nuevo proyecto en el que intento identificar dispositivos en una especie de "red" de protocolo cerrado.
Estoy tratando de determinar cuántos dispositivos hay y las identificaciones únicas de cada dispositivo. Probablemente tendré una EPROM o algo similar para almacenar el identificador único.
La pregunta que tendría para el foro sería: ¿es una conexión en cadena la mejor manera de identificar los dispositivos? (Como se muestra abajo)
Estaba pensando que también podría intentar enrutar líneas de control individuales a los dispositivos, pero no sabré necesariamente cuántos dispositivos hay en total. Podré volver a conectar el dispositivo final a una línea de retorno (físicamente usando un puente e identificado aquí por el punto azul) .
Entonces, nuevamente, mi pregunta es: ¿hay una mejor manera de hacer esto?
Sería útil saber qué capa física está utilizando. Pero, aquí hay alguna información general:
Si está utilizando I2C, su bus debería verse así:
(tomado de societyofrobots.com)
En tiempo de ejecución, puede detectar las direcciones I2C escaneando el bus enviando una condición de INICIO a cada dirección y buscando un ACK.
Si usa SPI, necesitará una línea de selección de chip por dispositivo. Si te quedas sin pines, podrías usar algún tipo de multiplexor. Es posible que pueda escanear el bus afirmando cada línea de selección de chip por turno e intentando comunicarse.
http://kkamagui.springnote.com/pages/422905/attachments/177111Es posible que desee ver LIN , que puede usar algo llamado SNPD para detectar y asignar direcciones a los nodos en tiempo de ejecución. Hay tres métodos presentados en el artículo de Wikipedia, y cualquiera funcionaría, pero aparentemente algunos están patentados, así que tenga cuidado.
El protocolo LIN en sí es un protocolo basado en SCI bastante simple con algunas características de confiabilidad adicionales, pero las técnicas SNPD podrían aplicarse a cualquier transferencia de datos en serie.
Envíe un comando al primer dispositivo para enviar su dirección, seguido de un contador (cero para comenzar) Cada dispositivo leerá el comando y lo emitirá.
Luego lea el contador, increméntelo y emita el contador.
Luego lea las direcciones anteriores y envíelas.
Luego envíe su dirección.
A medida que cada dispositivo recibe el comando, agrega su dirección a la respuesta.
Si los dispositivos están numerados 1, 2, 3, entonces la respuesta resultante será:
DISCOVER CMD
COUNT = 3
ADDRESS 1
ADDRESS 2
ADDRESS 3
Si no tiene que hablar demasiado rápido, busque Dallas One-Wire para su autobús.
1 cable (y una tierra implícita)
direccionable, 250 de descuento por bus, enrutable y los dispositivos de interfaz son muy baratos.
Realmente útil como bus de administración del sistema porque es muy prescindible. Tengo una familia de sistemas que usan 1 cable para la administración del sistema y el descubrimiento de dispositivos, luego algo más (como) jindi para las comunicaciones.
Recomiendo de todo corazón algo con un meta-protocolo para que puedas cambiar las cosas más tarde.
Realmente ni siquiera puede elegir aquí sin determinar la capa PHY, pero algunas ideas:
Si el sistema realmente está conectado en cadena como se ha dibujado, muestre cada dispositivo en orden. Programa de fábrica a la "dirección de transmisión" si el PHY tiene uno (como lo hace I2C). Luego, solo haga que cada dispositivo elija una dirección y envíe esa dirección al siguiente dispositivo a medida que avanza en la cadena.
Si usa UID de 8 bits, obtiene puntos de bonificación, al menos de mí, si escribe algo cómico en ASCII con las direcciones:
Maestro: "Oye dispositivo 1, elige una dirección" Dispositivo 1: "M", oye dispositivo 2 elige una dirección Dispositivo 2: "y" Dispositivo 3: "B" Dispositivo 4: "o" Dispositivo 5: "s" Dispositivo 6 : "s" Dispositivo 7: "S" Dispositivo 8: "u" Dispositivo 9: "c" Dispositivo 10: "k" Dispositivo 11: "s"
Alternativamente, si su diseño tiene una cantidad fija de dispositivos: tenía un diseño que usaba una placa posterior que permitía conectar hasta 4 tarjetas. Lo que terminé haciendo fue colocar un expansor GPIO basado en I2C en la placa posterior (en realidad era un IC de control de ventilador que necesitaba de todos modos, solo elegí uno con una interfaz I2C y algunos GPIO en él).
Enruté un GPIO a través de cada conector de borde de tarjeta al pin de reinicio del DSP en cada tarjeta enchufable. Todos los DSP se programaron de fábrica en 1 dirección. El controlador del sistema sacó las ranuras del reinicio 1 a la vez, se envió un comando I2C, si algo ACKed, se asumió que la ranura estaba poblada y se envió un comando para cambiar su dirección I2C a un UID para esa ranura. Esto se hizo para cada ranura con un tiempo de espera de respuesta razonable.
Si es un bus compartido capaz de iniciar transferencias como esclavo, también conocido como multimaestro. Simplemente haga que el dispositivo esclavo asuma el control del bus y solicite una dirección al maestro, el maestro simplemente le da la siguiente dirección en línea, piense en DHCP. Los mismos puntos de bonificación que el anterior.
Si el PHY es un solo maestro y tiene una cantidad completamente desconocida de dispositivos... ¿conectar en cadena un GPIO a través de ellos y usarlo para controlar si responden a una dirección programada de fábrica? Luego, cuando el esclavo obtiene su dirección, ¿deshabilita el siguiente dispositivo en línea? De esta manera, solo necesita 2 pines GPIO por dispositivo y 1 para el maestro y puede activar los dispositivos uno a la vez. Debería funcionar, creo.
De todos modos, honestamente, toda especulación hasta que elija un PHY y pueda contarnos más sobre cómo está conectado el sistema en general.
Las formas para que la CPU principal descubra cuántos dispositivos están conectados a ella, y la ID de cada uno, incluyen:
Muchas personas afirman que "si está utilizando SPI, necesitará una línea de selección de chip por dispositivo". Si eso es cierto, ¿cuál es un buen nombre para ese otro protocolo que no requiere una línea de selección de chip por dispositivo, solo 4 pines fijos en la CPU principal, incluso con docenas de dispositivos periféricos, es decir, el protocolo utilizado por los dispositivos? que Wikipedia llama "SPI en cadena de margaritas" ?
En lugar de reinventar otra rueda cuadrada, es posible que desee consultar la lista de protocolos de sistemas integrados comunes , para evitar la mayoría de los errores que a menudo molestan a las personas que diseñan protocolos desde cero. Tal vez tenga suerte y pueda usar uno de esos protocolos tal como está, o con ajustes relativamente menores.
Kellenjb
barrido
Marca
Chris Gamall