Tengo un PCB que utilizo para realizar algunas mediciones en un chip de silicona patentado. Estamos incluyendo varias 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, y así sucesivamente.
Todas las estructuras de prueba se controlan mediante expansores de E / S I2C 'tontos', los controla con I2C y puede establecer la dirección de cada pin, entrada o salida, y puede configurar el estado lógico o leerlo.
En la placa tenemos un microcontrolador que sirve como interfaz entre la PC (USB) y la placa (I2C).
En POR, todos los pines de expansión están configurados como entradas, por lo que cada vez que quiera usar la placa necesita conectarla a una PC, ejecute un pequeño fragmento de código para preajustarlo correctamente, y luego úselo. / p>
Por supuesto, esto es aceptable si necesita ejecutar pruebas automatizadas, pero no es tan conveniente si solo quiere alimentarlo y usarlo rápidamente, o si necesita enviarlo a un cliente que quiera evaluar el silicio. porque la distribución de todo el software no es una opción en este momento.
Hay varios enfoques para resolver el problema.
Puentes Tenemos varios de ellos, pero se vuelven engorrosos rápidamente, estamos hablando de más de 100 IO. Además, si desea poder omitir un relé por completo, es decir, forzado para abrir y forzar para cerrar, necesita dos puentes.
tirar arriba / abajo Esto es un poco más atractivo, pero un poco pierde el propósito: quiero un hardware reconfigurable por software, no quiero volver a trabajar en decenas de tableros si encuentro un error.
La solución ideal Estoy soñando con un chip muy simple, como una EEPROM I2C o algo así, donde escribes una especie de secuencia de arranque:
0xAE 0xAA
0xAE 0xBC
0x18 0x00
Y así sucesivamente. Los datos anteriores representan parejas de direcciones, datos. Este fantástico chip debería tener una entrada gpio a la que puedo conectar un botón: cuando presiono el botón, la EEPROM debe actuar como un maestro I2C y enviar los datos en el bus I2C, por ejemplo, los bytes anteriores significan "Enviar 10101010 a 0xAE, luego envíe 10111100 a 0xAE y finalmente envíe 00000000 a 0x18 ".
Mi pregunta es:
- ¿Existe una mejor manera de inicializar un expansor de IO I2C?
- ¿Existe el chip que imaginé o simplemente debería absorberlo y usar un microcontrolador?