6 votos

Cómo preconfigurar un expansor I2C IO

Tengo una placa de circuito impreso que utilizo para hacer algunas mediciones en un chip de silicio propio. Estamos incluyendo una serie de estructuras de prueba en la PCB para permitir algunas pruebas automatizadas, por ejemplo, relés que abren/cierran algunas conexiones, multiplexores analógicos que permiten la detección de ciertos pines del chip, etc.

Todas las estructuras de prueba se controlan a través de expansores I2C IO 'tontos', los controlas a través de I2C y puedes establecer la dirección de cada pin, de entrada o de salida, y puedes establecer el estado lógico, o leerlo.

En la placa tenemos un microcontrolador que sirve de interfaz entre el PC (USB) y la propia placa (I2C).

En el POR todos los pines de los expansores están configurados como entradas, por lo que cada vez que se quiera utilizar la placa hay que conectarla a un PC, ejecutar un pequeño código para preconfigurarla correctamente, y luego utilizarla.

Esto es, por supuesto, aceptable si necesitas ejecutar pruebas automatizadas, pero no es tan conveniente si sólo quieres alimentarlo y usarlo rápidamente, o si necesitas enviarlo a un cliente que quiere evaluar el silicio, porque distribuir todo el software no es una opción en este momento.

Hay varios enfoques para resolver el problema.

Puentes Tenemos varios, pero se vuelve engorroso rápidamente, estamos hablando de más de 100 OI. Además, si quieres poder puentear un relé por completo, es decir, forzado abierto y forzado cerrado, necesitas dos puentes.

subir/bajar Esto es un poco más atractivo, pero en cierto modo frustra el propósito: quiero un hardware reconfigurable por software, no quiero rehacer decenas de placas si encuentro un error.

La solución ideal Estoy soñando con un chip muy simple, como una EEPROM I2C o algo así, donde se escribe una especie de secuencia de arranque:

0xAE  0xAA
0xAE  0xBC
0x18  0x00

Y así sucesivamente. Los datos anteriores representan parejas de dirección, datos. Este fantástico chip debería tener una entrada gpio a la que puedo conectar un botón: cuando pulse el botón, la EEPROM debería actuar como maestro I2C y enviar los datos al bus I2C, así que como ejemplo los bytes de arriba significan "Enviar 10101010 a 0xAE, luego enviar 10111100 a 0xAE y finalmente enviar 00000000 a 0x18".

Mi pregunta es:

  • ¿Hay una forma mejor de inicializar un expansor I2C IO?
  • ¿Existe el chip que he previsto, o debo aguantarme y utilizar un microcontrolador?

1 votos

Eso se llama microcontrolador.

6voto

Bernd Puntos 61

Ya has indicado que tienes un microcontrolador en la placa con todos los expansores de E/S. ¡¡Dijiste que ya habla con el material I2C!! Por qué no hacer que el firmware del microcontrolador configure el estado inicializado por defecto necesario de los expansores de E/S.

Si necesitaras varios estados diferentes de estos estados inicializados, podrías incluso añadir varios puentes en esa MCU para seleccionar el perfil particular que se necesita.

0 votos

Hola Michael, gracias por la sugerencia. Utilizar la MCU principal no es tan fácil, ya que su firmware está programado desde un equipo totalmente diferente, para toda la empresa.

0 votos

@VladimirCravero - Te escucho con respecto a la propiedad/ubicación del firmware. Pero a pesar de eso es la forma correcta de abordar el tema. Cualquier otra cosa que intentes parchear sería un lote de hardware extra que ensuciaría el diseño de tu placa.

3voto

TonyM Puntos 41

Nunca he visto un dispositivo así. Pero un microcontrolador puede hacer esta función perfectamente, leyendo sus direcciones y valores por defecto desde un chip Flash/EEPROM separado o desde el Flash/EEPROM interno.

Una vez que hayas programado tu microcontrolador para que lo haga, no se distinguirá del maravilloso chip con el que habías soñado, así que todo son ventajas.

Desde el punto de vista de cualquier fabricante de circuitos integrados, no tiene sentido que diseñe un circuito integrado personalizado para el que hay una demanda limitada. Saben que la misma función se puede hacer programando un CI existente. Si quieren rentabilizar sus inversiones en desarrollo, diseñarán otros circuitos integrados.

Como apunte, ¿el uso de un microcontrolador es algo que hay que "chupar" o hay satisfacción en saber que has hecho una buena elección de diseño :-)

1voto

Passerby Puntos 28913

No, puedo decir con seguridad que no se trata de un circuito integrado prediseñado que haga lo que usted quiere. Podrías tenerlo diseñado como un ASIC, pero un microcontrolador sería más sencillo y, dependiendo de tu volumen, más barato. Tambien podrias implementar esto en tu microcontrolador USB a I2C, asi no tendrias que agregar un segundo.

Como alternativa, si tiene un volumen lo suficientemente alto o un agujero ardiendo en su cartera, el fabricante del expansor podría diseñar una versión personalizada con el estado de arranque que desee.

1voto

user92574 Puntos 13

Me gusta la respuesta de @Michael Karas, pero en caso de que el microcontrolador de a bordo no sea algo con lo que quieras meterte (por ejemplo, curva de aprendizaje + recursos para programar), entonces podrías ir por el otro camino y sustituir el gran PC por algo pequeño y sencillo como una Raspberry Pi u otro pequeño controlador embebido.

Por ejemplo, este sombrero LCD+interruptor de 20 dólares de Adafruit le permitirá mostrar el texto y leer las pulsaciones de los botones.

Podrías autoejecutar un programa Python que lea un archivo de texto en la tarjeta SD, muestre las configuraciones en la pantalla LCD, permita al usuario desplazarse por la selección, y una pulsación de botón pueda enviar los datos I2C.

Si necesitas algo aún más pequeño y barato, puedes optar por una Raspberry Pi Zero ( $5 or $ 10) aunque necesitarás un adaptador de cable USB para conseguir un receptáculo de tamaño completo (USB Tipo A) para tu dispositivo de prueba. Los "sombreros" LCD+Switch también están disponibles para la RPi Zero.

De todos modos, utilizar un pequeño y barato ordenador con Linux sería una forma sencilla de preconfigurar el banco de pruebas para realizar pruebas básicas. Con la configuración adecuada puede ser barato y sencillo de manejar para un cliente. Tener un sistema operativo completo te permite escribir en un lenguaje de alto nivel como Python, no tendrías que comprar ninguna herramienta de desarrollo (gratis en Linux), puedes aprovechar las potentes capacidades de red, puedes configurarlo usando simples archivos de texto para que la reconfiguración sea una cuestión de editar un archivo de texto en su tarjeta SD, incluso puedes querer reemplazar tu MCU USB-a-I2C con un RPi Zero u otro ordenador embebido en Linux (estas placas tienen I2C, SPI, PWM, GPIO, ADC, etc. incorporados).

En algún momento, puede que te des cuenta de lo potente, sencillo y barato que es Linux y estos pequeños ordenadores embebidos y que lo hagas funcionar en tus pruebas en lugar de un gran PC. Ahí es donde he acabado yo :)

0voto

ozmank Puntos 127

Hay muchos chips de este tipo de tamaño 1k ... 512k con varias velocidades y rangos de bajo voltaje.

http://www.microchip.com/wwwproducts/en/24AA01
http://www.microchip.com/wwwproducts/en/24AA16
http://www.microchip.com/wwwproducts/en/24AA512

0 votos

Hola Tony, gracias por tu ayuda pero creo que has interpretado mal la pregunta. Estoy buscando un dispositivo que pueda escribir la configuración de forma autónoma, no sólo un chip eeprom "pasivo".

0 votos

Ah ok, pensé que podría ser capaz de hacer que el Esclavo transmita los datos de configuración necesarios. En el pasado utilicé una EEPROM serial para inicializar el hardware.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X