Estoy usando un microcontrolador P8X32A (Parallax "Propeller") en muchos de mis proyectos de hobby. No tiene NV RAM interna en el chip, por lo que carga su código de programa desde los pines TX / RX del puerto serie o desde una EEPROM I2C (24LC256) en los pines SDA / SCL. Esta carga es totalmente manejada por el silicio en el micro y no puede ser alterada.
No toma más de aproximadamente 2 segundos para que se complete el proceso de carga de código, ¡luego de lo cual esos cuatro pines se convierten en IO de propósito general en los 4 MSB de un puerto GPIO de 32 bits! Esa es una gran característica, pero significa que debo tratar esos 4 pines como un caso especial, lo cual no es ideal.
- Del P8X32A Manual v1.2 (página 17). La línea roja irregular indica las 4 señales que deseo redireccionar después de que se haya completado el arranque.
Paraunproyectofuturo,estoyplaneando.Megustaríausarlos32pinesdeestepuertoGPIOparaE/Sdealtavelocidad,peronoquierotenerlos4pinessuperioresconectadosalpuertoserieoalbusI2C.
Mipregunta:
¿CuálseríaunmétododeconteoparcialsólidoysólidoparacortarautomáticamentelaslíneasdepuertoserieyI2CdelmicrocontroladoruntiempofijodespuésdesalirdelestadoRESET?
Alprincipiopuedopensarenalgunasmaneras,perotienendesventajas...
TengaunICdeinterruptordigitalde4polosy2poloscontroladoporI2Cquecompartaunalíneadereinicioconelmicrocontrolador.Alinicio,las4señalesestánconectadasdemanerapredeterminadaalbusI2Cylaserie,yluegoloprimeroquehaceelcódigodelprogramaesenviaruncomandoI2CaeseinterruptorparaquesalgadelbusI2C.
Useunaseñalgeneradaexternamente(básicamenteuntemporizadortontoounmicrocontroladorsecundariobaratoquepuedaresponderalimpulsoderestablecimiento)paraalternaruninterruptor"normal" de nivel lógico activado.
-
Coloque un segundo microcontrolador pequeño (por ejemplo, ATTiny2313 o similar) entre la hélice y la EEPROM, luego haga que cuente la cantidad de bytes que la atraviesan y luego la apague. poseer IO completamente hasta el pulso de restablecimiento.
No me gusta (1) porque necesitaría implementar la pequeña parte de I2C en mi código de programa, lo cual es molesto pero factible, pero el problema principal es encontrar un conmutador I2C adecuado en un paquete SOIC / SOP .
No me gusta (2) porque agrega cierto potencial para que surjan problemas de glitchiness o de sincronización. O si voy con un segundo microcontrolador (ATTiny5 por ejemplo) tendría que tener un encabezado de programación en el Tablero o tener las fichas preprogramadas fuera de tablero. Una molestia de cualquier manera.
No me gusta (3) porque es mucho trabajo y agrega un segundo conjunto de firmware bastante complicado al proyecto, que prefiero evitar.
Sospecho que estoy pensando demasiado en esto, ¿hay una mejor manera de desconectar completamente un bus I2C después de que termine de usarlo?
El "IO de alta velocidad" con el que quiero que participen los 32 pines GPIO será una lógica digital 3v3 que se ejecutará en cualquier lugar entre 1MHz y 40MHz.