Estoy trabajando en un proyecto que utiliza un simple microcontrolador (I2C) maestro y un componente (I2C esclavo). Cuando el microcontrolador recibe energía, lo primero que debe hacer es determinar qué dispositivo está en la línea I2C. Solo se espera un dispositivo en la línea.
¿Cómo se podría determinar qué dispositivo está en la línea I2C?
He pensado en algunas maneras:
- Intente todas las direcciones posibles para los elementos y luego busque la ID del dispositivo en cada elemento. (He encontrado que la ubicación del registro de ID del dispositivo es diferente en la mayoría de los chips).
- Envíe una solicitud de ID de dispositivo, pero la especificación dice que esto es opcional. Y no pude encontrar a nadie que confíe en esto.
- Dirija de forma única cada componente, cree un mapa. (es decir, esta dirección significa que debe ser este componente). Pruebe cada dirección.
Para un contexto adicional, una vez que se determina el dispositivo, las capacidades se asignan en el firmware y el firmware se ejecuta.
Solución 1 suena como un enfoque de fuerza bruta. Me gustaría que esto fuera rápido, y esto no parece ser rápido.
Solución 2 no es confiable, pero tal vez solo sea por mi falta de experiencia.
Solución 3 parece posible, pero luego estoy limitado a la cantidad de dispositivos I2C que el espacio de direcciones puede admitir.