Ejecute las instrucciones de la RAM en un microcontrolador aficionado a los aficionados

12

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).

Por lo tanto, 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 el PicKit2, así que prefiero quedarme con los PIC.

¿Alguien sabe cuál, si alguno, PIC puede hacer esto? Si ningún PIC es capaz de hacer esto, ¿cuáles son algunos microcontroladores diferentes que funcionarían para esto? Preferiblemente los que están disponibles en un paquete compatible con el tablero.

    
pregunta Ponkadoodle

10 respuestas

5

Hay algunos PIC que le permiten agregar memoria de programa externa. Nunca he hecho esto, pero las Notas de aplicación AN869 y AN778 tiene más información sobre cómo implementar la memoria externa.

    
respondido por el Daniel Grillo
11

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 en 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

    
respondido por el Toby Jaffey
6

Como ya se ha dicho, los PIC (aparte del 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 de RAM, pero necesitará algo como el F5438 con 16k de RAM. ¡El código de ejecución de 128 bytes no es realmente una opción!

Si un procesador tiene un bus externo, entonces puede poner RAM en el espacio de código. Es posible que tenga que agregar alguna lógica adicional para asignar la RAM a 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 la 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 al espacio de CÓDIGO para su ejecución. El programa cargador / monitor maneja la carga y el cambio del banco de memoria. No solicite el código; lo hice hace aproximadamente 30 años y hace mucho que se perdió (y está escrito en PL / M-51)

    
respondido por el uɐɪ
5

Ninguno de los PIC de rango bajo y medio puede ejecutarse desde la RAM debido a su arquitectura de memoria.

Cualquier CPU basada en ARM debe ejecutarse desde la RAM. Aunque tienden a estar en paquetes smd, hay bastantes módulos de tamaño 'DIP' que tienen el microcontrolador ya cargado. Eche un vistazo a mbed o LPCXpresso por ejemplo. Ambos vienen con un cargador 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, tal vez considere algo de la familia HCS08 de freescale. Estos pueden ejecutarse desde la RAM y hay una versión de código limitado del IDE y el compilador C de código de código disponibles de forma gratuita.

Estoy bastante seguro de que el MPS430 también debería poder hacer esto, pero nunca lo he hecho yo mismo.

    
respondido por el Clint Lawrence
5

El Propeller carga su programa desde un almacenamiento externo.

    
respondido por el joeforker
3

Recuerdo haber leído sobre un cargador de arranque para los AVR que volverían a flashear el chip con un archivo .hex (probablemente) de una tarjeta SD. No puedo encontrar la fuente original, pero esta búsqueda en Google muestra un par de resultados interesantes. Sí, sé que esto es AVR y no PIC, pero puede que te resulte útil si el PIC no funciona.

    
respondido por el blalor
3

Como han señalado otros carteles, no se puede ejecutar desde RAM en un PIC de 8 o 16 bits, porque utilizan una arquitectura de Harvard (código separado y espacios de datos). Si es práctico o no cargar un programa desde una tarjeta SD y guardarlo en la memoria de código, depende de la frecuencia con la que vaya a hacer esto.

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 duración de los ciclos de borrado / escritura típicos puede ser cinco veces mayor que eso. Por lo tanto, si está haciendo un desarrollo, probablemente pueda flashear un procesador 140 veces al día, cada 3 1 / 2 minutos por ocho horas, y aún puede durar un año.)

    
respondido por el tcrosley
2

En mi escuela, usamos 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 Freescale HC (S) -line en la dirección RAM y ROM de manera idéntica, para que pueda cargar código en la RAM y ejecutarlo.

Tomando una cola de blalor , la mejor solución podría ser simplemente agregar un botón en su tablero que pueda volver a flashear el PIC de los datos almacenados en una tarjeta SD que inserte con un cargador de arranque. No puedo imaginar qué tipo de código no cabría en los PIC más grandes; Si tiene algunos datos estáticos (gráficos, texto, sonido), guárdelos en un almacenamiento externo.

    
respondido por el Nick T
1

Es probable que no pueda asignar desde la RAM, pero para su aplicación podría 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 método 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 puedo pensar en ninguna razón particular por la que no funcione con una tarjeta SD, aunque un cargador de arranque compatible con SD puede ocupar algo de espacio.

    
respondido por el supercat
0

Bastantes microcontroladores te permitirán hacer esto, parece que no es la foto. lo que querría hacer es tener un cargador 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 el ram y luego ramificar a El programa en ram. Los controladores basados en ARM ciertamente te 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 a RAM y la quema de ramificación a una parte del flash. Probablemente quiera tener un botón si se presiona el botón durante el encendido o el reinicio, luego, cargue un nuevo programa desde la tarjeta SD, de lo contrario, si la firma o la suma de comprobación se ve bien en esa parte del flash que se puede cargar, en la rama de arranque de esa parte del flash. O tal vez si la tarjeta SD está presente, entonces cargue desde ella, de lo contrario, bájese a la parte cargable de flash. Puedo usar este método con base en brazo y en base a avr, posiblemente incluso con base en imágenes, pero mi experiencia en imágenes es antigua. msp430 asumiría también. Básicamente, si puede reprogramar partes del flash que ejecuta desde el procesador del microcontrolador y tiene los pocos pines de E / S necesarios para que spi hable con la tarjeta SD (y tenga suficiente flash para tener un cargador de arranque que pueda lea de una tarjeta SD) puede usar un método como este.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas