Estoy tratando de leer datos de un sensor táctil conectado a I2C. Concretamente la Azotec IQS266 . Planeo preprogramar todas las configuraciones de la manera que quiero, y luego no volver a tocarlas después de eso. Además de esto, en realidad solo hay una pieza de memoria que me interesa, la información de gestos del trackpad en TP_FLAGS (0x02, desplazamiento 0).
Esto me lleva a la pregunta: ¿cómo podría monitorear una sola dirección de memoria de un solo dispositivo en una línea I2C, sin el uso de un microcontrolador? Digamos, por ejemplo, que quería encender 8 LED de acuerdo con los 8 bits de información almacenados en esa dirección cada vez que el dispositivo Azotec producía una señal de listo.
Estoy de acuerdo en que un microcontrolador tendría más sentido, pero hay algunos casos en los que tal vez prefiera evitar su uso. Ciertos organismos reguladores se vuelven más difíciles de tratar cuando se introduce 'software' en un diseño, y puede ser ventajoso obtener datos simples de un dispositivo compatible con I2C con un enfoque más basado en 'hardware'. ¿Es posible monitorear un dispositivo I2C para una dirección específica y, esencialmente, convertir su información en una salida GPO paralela?
No estoy seguro de que exista un producto que haga lo que usted quiere. Si iba a diseñar una solución personalizada, algunas opciones podrían incluir:
Use lógica programable como un CPLD pequeño para implementar la interfaz I2C y tener una actividad de bus de seguimiento de máquina de estado para capturar los datos que desea.
Como el n. ° 1, pero use un chip dedicado como el PCA8584 (I2C a puente paralelo) para hacer el trabajo pesado para el protocolo I2C y haga que un CPLD maneje el monitoreo de actividad de nivel superior. Este chip tiene un modo snoop en el que se garantiza que no conducirá nada en el bus I2C y lo monitoreará de forma no destructiva.
Utilice un microcontrolador con un modo snoop I2C similar, como el LPC1769. Sin embargo, no sé si tener esta funcionalidad implementada en el hardware (en el chip) le permitiría eludir las regulaciones sobre el software, ya que un error de software podría sacarlo del modo snoop e introducir un tráfico I2C erróneo. Así que eso es un poco exagerado.
Su solución de hardware puro es: 1 eprom SST39VF010, 1x 74hc4060, 1x 74HC4094. 2xR, 2xC. Costo ~$1 Los pines eprom serán SDA, SCL, CLK4094, RST4094. Los datos 4094 se conectan a SDA. El flujo de bits que lee su Azotec se almacena en la memoria flash y el contador 4060 registra su salida en un ciclo sin fin. Cuando se leen los datos de Azotec, los registra en el 4094. El flujo de bits necesitará de 20 a 30 bytes por byte I2C, aproximadamente ~ 256 bytes.
(La lógica mixta Silego greenpak + la memoria SPI podría ser una solución de 2 chips).
Lo más probable es que el producto Azotec en sí sea algo con firmware interno, como la mayoría de los dispositivos esclavos I2C complejos, por lo que su idea subyacente se vuelve algo discutible.
Una casa a mitad de camino es usar un pequeño micro exactamente como el eprom+counter, pero en lugar de leer y escribir mediante programación, simplemente descargas en serie un flujo de bits de control que hace lo que quieres. El microprograma se convierte en un simple ciclo de volcado, quizás de solo 20 palabras. Se puede implementar con una complejidad ciclomática de 1 usando un registro de desplazamiento de LED externo o 2 (quizás 1) cuando se manejan los LED desde el micro, y se puede demostrar formalmente que es correcto. El flujo de bits es una secuencia almacenada invariable sin bifurcaciones, por lo que se puede demostrar que es correcta mediante pruebas exhaustivas de la única secuencia posible.
Nuestro producto BL233C es capaz de ser un redirector I2C independiente para hacer lo que desee, leer un sensor I2C, procesarlo mínimamente y escribir en otro dispositivo de visualización I2C.
Por supuesto, también tiene firmware subyacente, pero al igual que el sensor, puede parecerle a un revisor como un chip confiable (bueno, lo es, por supuesto), en lugar de un sistema de software. Esto no es irrazonable: los especialistas como nosotros y Azotech deberían tener productos más maduros y, por lo tanto, mejor depurados que los que tendría su propio programa cuando se implementó inicialmente.
cuando introduces 'software' en un diseño
Software: Un programa interpretado por un procesador.
Lo que necesitas es lo siguiente:
Malas noticias: es un flujo programático y, con solo escribir las especificaciones de lo que desea, determinamos que es un programa. Tendrás que lidiar con el software, pase lo que pase.
Si, por ejemplo, implementaste lo siguiente:
ciclo en hardware lógico, felicitaciones, ha construido un procesador muy específico de la aplicación que ejecuta un programa de cuatro pasos.
Es realmente el punto donde dices que este es un trabajo para un microcontrolador. Y realmente, ¿qué piensas, cuántos núcleos de procesador hay en ese panel táctil? Supongo que es al menos uno, pero si tuviera que diseñar uno, en realidad serían dos microcontroladores vinculados. Entonces, si su organismo regulador tiene un problema con los microcontroladores: mala suerte.
La solución basada en hardware para su pequeña secuencia de control I2C se denomina "FPGA no volátil" o un buen CPLD. Usted diseña un convertidor en serie en cualquier VHDL, asigna/configura una parte de la memoria dentro de CPLD y crea un pequeño secuenciador para ejecutar los bytes de sus datos I2C predefinidos. Todo es una máquina de estado precompilada, sin software.
Si una reprogramabilidad no autorizada es la principal preocupación, un FSM basado en ROM puede ser una solución.
La alternativa al "software" en un digital es una máquina de estado finito. Esto ha sido discutido aquí . Si realmente desea evitar tanto el software como el FSM, tendrá que volverse totalmente analógico (p. ej., LM3914 para controlar los LED).
danmcb
usuario253751
crasico
usuario253751
chris stratton
brandon
Nick Alexeev
chris stratton
brandon
chris stratton
brandon
chris stratton
brandon
chris stratton
brandon
chris stratton
brandon
chris stratton
brandon
chris stratton
brandon
AndrejaKo