i2c asignación automática de direcciones

3

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í:

     
  1. Los componentes esclavos tendrían 2 bytes de memoria no volátil para mantener sus direcciones permanentemente.
  2.   
  3. Los esclavos tendrán una dirección predeterminada (por ejemplo, 0x01).
  4.   
  5. 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).
  6.   
  7. 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.
  8.   
  9. 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.
  10.   

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

     
  1. hay un protocolo de asignación de direcciones que los proveedores ya implementan en i2c
  2.   
  3. si no, ¿qué estaría mal con este protocolo?
  4.   
  5. 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)
  6.   
    
pregunta ceremcem

4 respuestas

1
  

¿existe un protocolo de asignación de direcciones que los proveedores ya implementan en i2c [?]

El protocolo actual es que cada fabricante de dispositivos escribe a NXP y solicita que se asigne una dirección para cada dispositivo que crean.

  

¿Qué estaría mal con este protocolo [propuesto] [?]

I2C se implementa a menudo en piezas de muy bajo costo.

Su propuesta requiere agregar memoria no volátil a las partes que en su mayoría aún no la tienen.

La memoria no volátil generalmente requiere pasos de procesos especializados en la fabricación de circuitos integrados.

La adición de pasos de proceso aumenta el costo de un IC.

Por lo tanto, su propuesta no es compatible con el mantenimiento del bajo costo de muchas piezas I2C.

Además, su propuesta requiere que cada dispositivo maestro implemente algún protocolo para asignar las nuevas direcciones cuando se solicite. Esto agrega una complejidad que muchos usuarios podrían no querer.

  

si nada está mal, ¿por qué no comienzan a implementar un protocolo como este?

Esta es una pregunta de marketing, no una pregunta de diseño electrónico.

    
respondido por el The Photon
0

El problema de la asignación automática de direcciones parece ser un concepto utilizable en los casos en los que se hacen dispositivos con microcontroladores de bajo costo.

Intentar establecer este protocolo en chips de gama baja como expansores de puertos, muxes, sensores de temperatura, eeproms y chips similares realmente pone más carga de diseño y área de silicio en el chip. Esto hace que los chips simples cuesten más y más difícil de implementar en una implementación a nivel de plataforma.

    
respondido por el Michael Karas
0

Hacer que el maestro asigne una dirección, y algunas de las otras características que describe, simplemente no forman parte del estándar i2c. El resultado podría funcionar pero no sería i2c. Pierde muchos de los beneficios de usar un estándar.

    
respondido por el Scott Seidman
0

Si realmente necesita esta función de asignación de dirección por host en absolutamente todos los periféricos que necesita usar, debe agregar un microcontrolador de puerta a cada periférico e implementar SMBus ARP en esos. Esos microcontroladores también traducen la dirección emitida en el bus a la dirección descubierta desde el dispositivo al que está conectado.

Tenga en cuenta que esto tendrá como resultado que tenga que morder b2 de alguna manera. Pero como ya está utilizando los microcontroladores que traducen los protocolos, también puede diseñar su propia pila de protocolos.

    
respondido por el Maxthon Chan

Lea otras preguntas en las etiquetas