Tengo dos microcontroladores que están bastante maximizados en sus capacidades. MC1 necesita hacer que un resultado de medición de 14 bits esté disponible para MC2. MC1 puede comunicarse con SPI y MC2 puede comunicarse con I2c, pero funcionan de forma asíncrona.
¿Hay algún tipo de IC simple disponible de modo que MC1 pueda guardar un valor en el IC usando SPI, y luego MC2 pueda leer ese valor usando I2c, en el tiempo libre de cada uno?
Estoy de acuerdo con @Voltage Spike, probablemente, actualizar cualquiera de los MCU es la solución más fácil.
Sin embargo, si realmente se trata solo de ordenar la entrada y salida de datos, bueno, ese sería un trabajo para otra MCU. Puedo entender que vaciles en traer aún más software a una placa. Pero, sinceramente, configurar el periférico SPI en ese tercer MCU a DMA en un búfer grande y un controlador I²C para brindar los datos más recientes a pedido a MC2 sin duda parecería lo más fácil.
Tenga en cuenta que creo que esto en realidad justifica que la tercera MCU se haga cargo del trabajo de MC1: si el volumen de datos es lo suficientemente bajo como para que se pueda consultar a través de I²C, entonces no estaría presionando un Cortex-M0 + algo moderno a la interfaz con cualquier ADC que tenga, o hacerse cargo de una parte significativa del cálculo de ese valor de 14 bits.
Sería mucho más fácil encontrar una MCU en un paquete diferente con mejores capacidades y actualizar una MCU existente que agregar algo intermedio.
Otra cosa que puede considerar es buscar periféricos SPI o I2C de hardware si no los está utilizando actualmente (casi todas las MCU modernas tienen algo como esto). Un SPI de hardware recibe información, luego la almacena en la memoria sin sondear el SPI y luego alterna una interrupción para que pueda recuperar la información. Lo mismo ocurre con el hardware I2C.
Si eso no se ajusta a sus necesidades, supongo que se podría usar un FPGA (como en la parte de celosía) para la interfaz que describe, pero mucho más difícil y lento de implementar.
Hay puentes I2C/SPI con búferes integrados, como el SC18IS602B, que podrían ser adecuados para este propósito.
¿Puede implementar un maestro I2C en software en MC1? Solo necesitarías 2 GPIO. Por supuesto, tomaría algo de tiempo, pero si su transmisión es lo suficientemente corta y rara, podría ser factible.
Dado que I2C es síncrono y está implementando el lado maestro, no tiene requisitos de tiempo estrictos. Puede continuar con su ciclo de programa principal después de configurar cada bit. En este caso, los requisitos de tiempo de ejecución serían mínimos, solo una sola instrucción de almacenamiento para cada bit y una instrucción de bifurcación. Alternativamente, puede configurar una interrupción de temporizador para que se dispare a, por ejemplo, una frecuencia de 100 kHz y transmita cada bit en la interrupción. En este caso, tendría más gastos generales porque tiene que entrar y salir de la interrupción.
Si también lo implementa en el software en MC2 (por ejemplo, con una interrupción GPIO para la entrada de la línea de reloj), ni siquiera tiene que ser I2C con su sobrecarga para la condición de inicio, la dirección, etc. Simplemente podría transmitir los 14 bits en serie, sincrónicamente. Si tiene más de 2 GPIO disponibles, incluso podría transmitir varios bits en paralelo.
crasico
crasico
crasico
Jasén
lorenzo marcantonio
Sólo yo