He hecho la pregunta en enlace y alguien se ofreció a preguntar aquí para obtener Mejores respuestas, así que aquí está:
Historial:
Decidí diseñar un circuito con algunos ic periféricos. Aunque SPI Puede lograr grandes tasas de datos, debido a su arquitectura maestro-esclavo. y requisito de pin de selección de chip separado, decidí usar I2C porque de su diseño multi-master y serial real. (SPI no es una serie completamente protocolo, es más como un protocolo híbrido: puerto serie para datos intercambio, puerto paralelo para líneas de selección de chip)
Problema :
He estado planeando agregar algunos adc, dac, gpio ic's a un microcontrolador pero estos módulos se producen con algunos esclavos Direcciones disponibles. Los fabricantes están incrustando direcciones de esclavos en el hardware ic. ¡Qué mala idea! Así que, me he enfrentado a la Abordar el problema del protocolo i2c.
Algunos de los pines actuales de asignación de direcciones del ic (3 pines, lo que significa No usaría más de 7 de ellos). Eso no es suficiente en mi caso.
Algunas personas ofrecen direcciones de escaneo de 0x00 a 0xff, pero esto es No es un buen enfoque porque es una pérdida de tiempo (creo). Alguien dice "Hay i2c buffer o i2c MUX que puedes usar" o incluso otro microcontrolador para la traducción de direcciones (NAT como enfoque) pero ¿No elegimos y usamos i2c para simplificar (como menos rutas en tablero, flexibilidad, etc.) en primer lugar?
Hay personas que tienen este problema de asignación de direcciones (por ejemplo, enlace )
Sugerencia:
La asignación automática de direcciones se podría hacer con un algoritmo algo así:
- Los componentes esclavos tendrían 2 bytes de memoria no volátil para mantener sus direcciones permanentemente.
- Los esclavos tendrán una dirección predeterminada (por ejemplo, 0x01).
- En el encendido, si el esclavo no ha sido asignado con una dirección diferente de la predeterminada, los esclavos se volverán maestros y pedirán una Dirección del host (por ejemplo, en la dirección 0x00).
- Nuestro nodo maestro real (el microcontrolador, el host) (en este ejemplo, que tiene una dirección "0x00") actuará como un esclavo de forma natural, porque es otro maestro en el bus y responderá (asignará) siguiente disponible Direccion al esclavo.
- La dirección 0x01 se reservará para la transmisión. El maestro puede usar esta dirección para hacer que los esclavos reinicien sus direcciones asignadas.
Eso sería suficiente para la asignación automática de direcciones.
Sí, sé de SMbus. Cuenta con protocolo de resolución de direcciones automático, pero tiene otras limitaciones (velocidad, tiempo de espera, etc.) que no me permiten Quiere preferir SMbus sobre I2C.
Este protocolo de asignación de direcciones puede ser opcional y podría ser Activado por un solo pin en el paquete ic. Por lo tanto, será al revés compatible.
Pregunta :
Probablemente no soy la persona más inteligente del universo, pero
- hay un protocolo de asignación de direcciones que los proveedores ya implementan en i2c
- si no, ¿qué estaría mal con este protocolo?
- si nada está mal, ¿por qué no empiezan a implementar un protocolo como este (una vez más, sé que no soy la persona más inteligente, por lo que deberían haber enseñado sobre este problema y ya deberían haber descubrí un algoritmo como este)