9 votos

¿Se puede utilizar la memoria flash de programación del microcontrolador para almacenar la configuración del usuario?

Muchos microcontroladores, por ejemplo PIC18F tienen memoria flash de programa: "La memoria Flash de programa es legible y escribible durante el funcionamiento normal". ¿Significa esto que puedo almacenar algunas configuraciones de usuario en la memoria de programa?

12voto

RelaXNow Puntos 1164

Sí que puedes. Yo lo he hecho muchas veces.

Sin embargo, existen algunos inconvenientes en relación con el uso de EEPROM independientes:

  1. El número de escrituras de por vida para programar la memoria flash es significativamente menor que la EEPROM de datos.

  2. El procesador saldrá a comer durante los tiempos de borrado y escritura.

  3. La flash de programa se borra en bloques. No se puede actualizar un solo byte. Yo suelo utilizar un esquema de caché de bloque para hacer frente a esto.

0 votos

Perfecto, parece que de alguna manera sabe que mi pregunta es realmente "¿por qué la necesidad de EEPROM mientras que usted puede utilizar la memoria de programa tanto para el programa y los datos de usuario" :)

0 votos

Olin, ¿se borra toda la Flash cuando se graba una nueva versión de firmware en el PIC? ¿Existe una buena manera de evitar que la configuración del usuario (o los datos de calibración) en la Flash se borren durante la descarga del firmware? Se trata de comodidad durante el desarrollo del firmware. Me imagino que la configuración de usuario se almacenará en el último bloque o Flash.

6 votos

@Nick: Eso depende del programador PIC que utilices. Muchos, incluyendo todos los míos, hacen un borrado masivo, por lo que los datos de calibración se borran. En algunas ocasiones he escrito una aplicación de programación especial que lee los datos de calibración, hizo el borrado masivo, a continuación, escribió los datos de calibración de nuevo como parte del proceso de programación normal. Algunos de los programadores de Microchip pueden ser capaces de actualizar sólo partes de la memoria de programa. Tenga en cuenta que si activó la protección de código, el programador debe hacer un borrado masivo.

7voto

Matt McMinn Puntos 6067

Muchos PIC18 tienen memoria EEPROM, de hasta 1K de tamaño. Desafortunadamente, el PIC18F46J50 al que haces referencia no la tiene. Si la EEPROM está disponible, es una opción mucho mejor si es lo suficientemente grande para tus datos, ya que la EEPROM tiene un mínimo de 1.000.000 de ciclos de borrado/escritura, y la flash sólo 10.000.

El PIC18, como la mayoría de los otros microcontroladores, utiliza lo que se llama una arquitectura Harvard, lo que significa que hay áreas direccionables físicamente separadas para programas y datos (es decir, usted puede tener una dirección de programa 4 y una dirección de datos 4, y no son lo mismo). Por lo tanto, no se puede leer o escribir en la memoria flash utilizando los métodos normales, ya sea en C o lenguaje ensamblador.

En cambio, en la familia PIC18, se establece una dirección de inicio en un registro de 22 bits llamado TBLPTR. Para leer bytes de la flash, se utiliza una instrucción TBLRD. Hay una opción para incrementar o decrementar automáticamente la dirección después de una lectura, no tienes que hacerlo manualmente.

Para escribir en la memoria flash, primero hay que borrar uno o varios bloques de 64 bytes de la memoria flash sobre la que se escribirá. Después de configurar de nuevo la dirección de inicio en TBLPTR, y los valores en algunos otros registros para inicializar la operación de borrado, las interrupciones se desactivan y entonces debes escribir 0x55 inmediatamente seguido de 0xAA en un registro; esto desbloquea el comando de borrado y es necesario para evitar que código errante borre accidentalmente la memoria. Finalmente se ejecuta el comando para realizar el borrado, seguido de la reactivación de las interrupciones.

La escritura en la memoria flash es similar al borrado, con la diferencia de que el tamaño del bloque es menor. En realidad, la escritura se ejecuta mediante una instrucción TBLWT, que también permite el incremento/decremento automático como la instrucción TBLRD.

Además de guardar los datos de configuración, la escritura en la memoria flash permite actualizar el firmware sobre el terreno mediante lo que se denomina "firmware over the air". Es necesario tener un bloque fijo de firmware, normalmente al principio de la memoria de programa, que pueda recibir la actualización desde un módulo Bluetooth, Wi-Fi, módulo celular o incluso una conexión por cable, y actualizar la flash por encima de un determinado punto del programa (por ejemplo, una "valla") con nuevo código. Una vez completada la actualización, se inicia un reinicio y el nuevo código se pone en uso.

Muchos otros microcontroladores, además de la familia PIC, tienen la capacidad de actualizar su memoria flash; la mayoría utiliza alguna combinación de registros de configuración, un puntero de dirección e instrucciones especiales para llevar a cabo la tarea.

0 votos

Ese método de "firmware por aire" parece muy interesante. Elimina la necesidad de programación en el sistema (ISP)?

0 votos

@student1 No elimina la necesidad de una programación inicial del chip a través de una interfaz ISP, porque tienes que poner algo de firmware en el chip para poder manejar las actualizaciones más adelante. Los microcontroladores ATmega utilizados en las placas Arduino ya tienen este tipo de firmware en ellos, llamado Bootloader, que es la razón por la que no es necesario utilizar una interfaz ISP para descargar sketches a un Arduino. Sin embargo, si quieres actualizar el Bootloader, necesitarás una interfaz ISP. Este Bootloader sólo gestiona actualizaciones a través de USB, por lo que no es realmente "firmware over the air".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X