Uno de mis proyectos se beneficiaría enormemente de poder ejecutar un programa que no está almacenado en el microcontrolador (sino que está almacenado en una tarjeta SD).
Entonces, estoy buscando un dispositivo que me permita cargar el código de la tarjeta SD en la RAM y luego ejecutar el código desde la RAM. Actualmente, solo tengo el programador que viene con PicKit2, por lo que preferiría quedarme con los PIC.
¿Alguien sabe qué, si alguno, los PIC pueden hacer esto? Si ningún PIC es capaz de esto, ¿cuáles son algunos microcontroladores diferentes que funcionarían para esto? Preferiblemente los que están disponibles en un paquete compatible de placa de pruebas.
microcontroller
pic
Ponkadoodle
fuente
fuente
Respuestas:
Hay algunos PIC que le permiten agregar memoria de programa externa. Nunca he hecho esto, pero las Notas de aplicación AN869 y AN778 tienen más información sobre cómo implementar la memoria externa.
fuente
Otra opción a considerar es usar un lenguaje interpretado para sus programas almacenados en la tarjeta SD. De esta manera, el procesador no está ejecutando el código de máquina leído desde la tarjeta, solo lo trata como datos.
Este enfoque le brinda flexibilidad a costa de la velocidad.
Hay muchas opciones para elegir: Encuesta de intérpretes / compiladores de lenguaje de alto nivel para microcontroladores
fuente
Como ya se ha dicho, los PIC (que no sean el PIC32) no pueden hacer esto. Probablemente tendrá que ir a los procesadores más grandes de cualquier familia o a un procesador con un bus de memoria externo ya que la mayoría de los microcontroladores tienen recursos de RAM muy limitados.
Los procesadores MSP430 pueden ejecutar código desde su espacio RAM, pero necesitará algo como el F5438 con 16k de espacio RAM: ¡ejecutar código en 128 bytes no es realmente una opción!
Si un procesador tiene un bus externo, puede colocar RAM en el espacio de código. Es posible que deba agregar algo de lógica adicional para asignar la RAM en dos regiones de memoria si la arquitectura del procesador no permite que los datos se escriban en la memoria de ejecución.
He ejecutado código desde RAM en un sistema basado en 8051, pero eso significaba que la RAM tenía que asignarse al espacio de memoria EXTERN para la programación y luego de vuelta al espacio de CÓDIGO para la ejecución. El programa cargador / monitor manejó el cambio y la carga del banco de memoria. No solicite el código: lo hice hace unos 30 años y hace mucho que se perdió (y está escrito en PL / M-51)
fuente
Ninguno de los PIC de rango medio y bajo puede ejecutarse desde RAM debido a su arquitectura de memoria.
Cualquier CPU basada en ARM debe ejecutarse desde RAM. Aunque tienden a estar en paquetes smd, hay bastantes módulos de tamaño 'DIP' que ya tienen el microcontrolador cargado. Eche un vistazo a mbed o LPCXpresso, por ejemplo. Ambos vienen con un gestor de arranque o, en el caso de LPCXpresso, una interfaz de depuración junto con compiladores gratuitos.
Si prefiere quedarse con micros simples de 8 bits, quizás considere algo de la familia HCS08 de escala libre. Estos pueden ejecutarse desde RAM y hay una versión de código limitado del compilador Codewarrior IDE y C disponible de forma gratuita.
Estoy bastante seguro de que el MPS430 también debería ser capaz de hacer esto, pero nunca lo he hecho yo mismo.
fuente
La hélice carga su programa desde el almacenamiento externo.
fuente
Recuerdo haber leído sobre un gestor de arranque para AVR que volvería a flashear el chip con un archivo .hex (presumiblemente) desde una tarjeta SD. No puedo encontrar la fuente original, pero esta búsqueda en Google arroja un par de resultados interesantes. Sí, sé que esto es AVR y no PIC, pero puede resultarle útil si el PIC no funciona.
fuente
Como han señalado otros carteles, no se puede ejecutar desde RAM en un PIC de 8 o 16 bits, porque usan una arquitectura de Harvard (código separado y espacios de datos). Si es práctico o no cargar un programa de una tarjeta SD y actualizarlo a la memoria de código depende de la frecuencia con la que lo va a hacer.
Si está intentando crear un entorno dinámico como un sistema operativo que está superponiendo programas constantemente, entonces no. Pero en mi caso, tengo un programa que carga los controladores según sea necesario desde una tarjeta SD de 2 GB. El PIC24FJ256GB110 tiene un mínimo de 10,000 ciclos de borrado / escritura. Incluso si esto se hiciera cinco veces al día, el flash duraría un mínimo de 5 1/2 años.
(Nota: la cifra de 10,000 es un mínimo. La resistencia típica de los ciclos de borrado / escritura puede ser cinco veces mayor que, por lo tanto, si está haciendo desarrollo, probablemente pueda volver a flashear un procesador 140 veces al día, cada 3 1/2 minutos durante ocho horas, y aún podría durar un año).
fuente
En mi escuela utilizamos procesadores HC11 o HC12 con RAM externa para cargar y ejecutar programas en ... pero olvidé el nombre de las placas / kit :( En cualquier caso, las MCU de línea Freescale HC (S) abordan la RAM y la ROM de forma idéntica , para que pueda cargar el código en la RAM y ejecutarlo.
Tomando una cola
blalor
, la mejor solución podría ser simplemente agregar un botón en su placa que pueda actualizar el PIC de los datos almacenados en una tarjeta SD que inserte con un gestor de arranque. No puedo imaginar qué tipo de código no encajaría en los PIC más grandes; Si tiene algunos datos estáticos (gráficos, texto, sonido), guárdelos en un almacenamiento externo.fuente
Probablemente no pueda asignar desde la RAM, pero para su aplicación puede tener un pequeño cargador en flash que luego puede leer los datos de la tarjeta SD en el resto del flash. He utilizado este enfoque con un chip flash controlado por SPI para permitir que el firmware se cargue desde un enlace inalámbrico y luego se instale una vez que se recibió por completo; No se me ocurre ninguna razón en particular para que no funcione con una tarjeta SD, aunque un gestor de arranque compatible con SD podría ocupar algo de espacio.
fuente
Unos cuantos microcontroladores te permitirán hacer esto, parece que no es la foto. lo que querría hacer es tener un gestor de arranque que use spi para leer desde la tarjeta sd, copiar el programa, que probablemente quiera ser un nombre de archivo conocido o codificado, probablemente en el directorio raíz, analizar ese archivo en ram y luego bifurcarse a El programa en ram. Los controladores basados en ARM ciertamente le permitirán hacer algo como esto.
Una alternativa sería hacer que el gestor de arranque lea la tarjeta SD a través de spi y en lugar de copiar en ram y ramificar quemar en una parte de la memoria flash. Probablemente desee tener un botón si se presiona el botón al encender o reiniciar, luego cargue un nuevo programa desde la tarjeta SD, de lo contrario, si la firma o la suma de verificación se ve bien en esa parte cargable del flash y luego en la rama de arranque en esa parte del flash. O tal vez si la tarjeta SD está presente, cargue de ella, de lo contrario, bájela a la parte cargable del flash. Puede usar este método con brazo y avr, posiblemente incluso con foto, pero mi experiencia con la foto está anticuada. msp430 Yo asumiría también. Básicamente, si puede reprogramar partes del flash desde el que ejecuta el microcontrolador,
fuente