¿Cómo "recuerda" un microcontrolador un programa?

Oct 12 2020

Esto es algo que me ha molestado mucho desde que me gradué. Programamos los microcontroladores PIC16f877a en clase, pero nunca entramos en cómo funciona, solo para que funcione. Digamos que escribo un programa que hace que los LED parpadeen en un orden específico y envío este programa al microcontrolador a través de este adaptador especial a los pines correctos. ¿Qué sabes? Los LED comienzan a parpadear según las instrucciones. Ahora, desconecto la energía y quito el PIC del tablero. Vuelvo a colocar el PIC en su lugar correcto, enchufo la alimentación y los LED siguen parpadeando como se programó previamente sin tener que reprogramarlo. Como esta pasando esto? ¿Cómo este microcontrolador esencialmente "recuerda" lo que le dije que hiciera?

Respuestas

35 DaveTweed Oct 12 2020 at 01:05

El PIC incluye un tipo de memoria no volátil llamada " Flash EEPROM ". Cuando "envía su programa al microcontrolador", el adaptador especial de hecho está programando su código en esta memoria. La memoria física es un tipo especial de transistor con una puerta flotante que puede almacenar una carga de manera más o menos indefinida, incluso sin energía aplicada. En la mayoría de los dispositivos, "cargado" = 0, "sin cargo" = 1.

Siempre que el PIC se reinicia o se enciende, comienza a ejecutar su código y lo obtiene directamente de esta memoria.

En el PIC, esta memoria está integrada en el mismo chip que contiene la CPU y el resto de la lógica (periféricos, etc.). El mismo tipo de memoria se usa para mantener el BIOS en su computadora de escritorio / portátil, pero es un chip separado de la CPU. Las primeras pantallas que ve cuando enciende su PC provienen del BIOS, que luego carga su sistema operativo desde el disco duro o SSD y lo ejecuta.

10 PeterGreen Oct 12 2020 at 12:49

Hay bastantes partes para hacer que la magia de programar un microcontrolador funcione.

Su cadena de herramientas de desarrollo (compilador, ensamblador, enlazador, etc.) traduce su programa del código fuente a una serie de instrucciones de la máquina que se almacenarán en el microcontrolador.

El microcontrolador normalmente almacena el programa en la memoria flash (también existen microcontroladores programables de una sola vez y borrables UV). Este es un tipo especial de memoria que está diseñado para retener datos incluso cuando la alimentación está apagada. Estos se basan en una estructura conocida como "mosfet de puerta flotante". Esencialmente, cada mosfet en la matriz de memoria tiene un pequeño capacitor en serie con su puerta y la carga en este capacitor cambia el comportamiento del transistor.

La puerta flotante está rodeada de material aislante y, por lo tanto, en condiciones normales, la carga no puede entrar ni salir de la puerta flotante. Esto permite que la puerta flotante retenga la carga y, por lo tanto, la información incluso cuando el circuito está apagado.

Sin embargo, cuando se aplican voltajes suficientemente altos, los electrones pueden cruzar la capa aislante. Esto permite agregar o eliminar carga de la puerta flotante. Generalmente, el mecanismo para cargar las puertas (conocido como "programación") se puede realizar en forma de bit individual, pero el método para eliminar la carga (conocido como "borrado") solo se puede realizar para un bloque completo de memoria a la vez.

Cuando conecta su adaptador de programación y le dice al software que programe el microcontrolador, pone al microcontrolador en un "modo de programa" especial. Los detalles de esto varían entre diferentes microcontroladores, pero en su PIC16f877a normalmente se hace aplicando 13V a la línea Vpp / MCLR. En chips flash más antiguos, Vpp en realidad suministraría la energía necesaria para la programación, pero en su PIC es solo una línea de señal con los voltajes necesarios para programar la matriz flash generada internamente. Una vez en el modo de programa, el procesador deja de ejecutar instrucciones normales y en su lugar responde a comandos especiales enviados a través de la interfaz de programación. En los PIC, esta es una interfaz serial síncrona con una línea de reloj unidireccional PGC y una línea de datos bidireccional PGD.

Una vez en el modo de programación, el software de programación enviará una serie de comandos en serie a través del adaptador de programación para escribir su programa en flash. Son posibles dos enfoques diferentes, en un enfoque se utilizan los comandos "borrar y programar" para borrar y reprogramar un bloque a la vez. En el otro enfoque, todo el chip se borra con un comando de "borrado masivo", luego se pueden usar comandos de "solo programa" para programar los nuevos datos. En ambos casos, antes de emitir un comando "borrar y programar" o "programar solo", los datos deben cargarse primero en registros de etapas. Puedes encontrar los detalles sangrientos enhttp://ww1.microchip.com/downloads/en/devicedoc/39589b.pdf

7 DKNguyen Oct 12 2020 at 01:22

Lo primero es lo primero ... ¿entiende cómo funciona una memoria fusible programable de una sola vez? Como si tuviera mil millones de pequeños cables y cada uno de ellos elijo conectarme a + V para un HI (UNO) lógico y GND para un LO lógico (CERO), ¿entienden cómo eso almacena un programa en sí mismo de unos y ceros? ? Puede tomar un voltímetro y para cada cable puede medir si está conectado a + V o GND para determinar si el bit en esa ubicación es un ALTO o un BAJO. Un microcontrolador hace lo mismo.

Todo lo demás es una versión elegante y más flexible de este concepto: ¿Cómo funciona la ROM?

Esto tiende a llevar a la pregunta: "¿Cómo toma un microcontrolador el programa de unos y ceros y hace cosas con él? ¿Qué sucede a nivel de hardware cuando alimentamos un código?"

6 RuskBox Oct 12 2020 at 01:08

El código del programa se almacena en la memoria ROM de los microcontroladores (en este caso flash). Los datos almacenados en dicha memoria se retienen después del apagado. Su microcontrolador tiene 14 KB de memoria flash, el código reside después de la programación.

Esta memoria se basa en estructuras MOSFET, que retienen datos después de que se desconecta la energía. Para obtener más información sobre cómo funciona la memoria flash, le sugiero que lea el artículo wiki .

5 GrahamStevenson Oct 12 2020 at 01:31

Dependiendo de la antigüedad del microcontrolador, está equipado con EPROM borrable UV en un paquete de cerámica con ventana de vidrio, EPROM 'programable una vez' en empaque de plástico (para producción) o memoria Flash (típico de la mayoría de los dispositivos actuales). Algunos incluso se pueden comprar con ROM programada con máscara para una gran cantidad de fabricación.

Algunos programadores admiten varios microcontroladores o el fabricante del dispositivo puede tener algún EVB dedicado o lo que sea. La programación en serie a través de SPI, USB, puerto serie (vieja escuela) o puerto paralelo también es compatible con algunos chips.

Me gusta más la "programación en circuito".