Actualmente me encuentro con el siguiente problema: hay un sistema, que consiste en un dispositivo maestro y un cierto número de dispositivos esclavos (todos esos dispositivos tienen pequeños MCUs). Se comunican con algún protocolo personalizado basado en el cable de serie (se parece bastante a Modbus). Todos los dispositivos esclavos deben tener IDs únicos dentro de un bus, para que el dispositivo maestro pueda dirigirse a cada uno de esos esclavos. Actualmente me veo obligado a codificar esos IDs en cada dispositivo esclavo. Mi objetivo es flashear todos esos dispositivos con el mismo firmware, por lo que no se deben utilizar IDs codificados para que esto sea posible. Estoy pensando en un dispositivo maestro, que sea capaz de asignar direcciones únicas a todos esos dispositivos, pero no puedo averiguar cómo hacerlo. ¿Puede alguien darme alguna idea o concepto de cómo extender mi protocolo de comunicación para que esto sea posible? ¿Quizás alguien pueda darme un ejemplo?
Las colisiones se detectan mediante la suma de comprobación de cada mensaje. ¿O se refiere a algo como los métodos CSMA?
1 votos
Este es, por supuesto, un problema de diseño muy común. Si existe una solución "sagrada", no estoy seguro de que haya muchos CI de identificación única en el mercado. Sin embargo, me gustaría ver una solución.
3 votos
Podrías añadir una EEPROM preserializada si tienes una pequeña cantidad de área de PCB disponible y un puerto I2C o SPI. Algo así como un 24AA02E48 .
2 votos
¿Sus MCUs manejan el protocolo ModBus-ish en software? Si lo hacen, entonces en el encendido no podrías usar ModBus hasta pasar por una fase de enumeración de su propio protocolo. Los esclavos necesitan una identificación única, así que pon un CI de número de serie de 48 bits DS2401 en cada uno. Entonces implementas un protocolo simple con esclavos de drenaje abierto usando lectura fallida (sobre 48 lecturas seriales, los esclavos pasan de vuelta un 0 como bajo, 1 como hi-Z, entonces comprueban la línea de lectura y sientan esta ronda si es diferente a lo que enviaron). Sigue leyendo números de 48 bits del bus y asignando direcciones hasta que todo esté hecho. Puedo ampliar esto, pero primero, ¿lo permitirá tu hw/sw?