Estoy familiarizado con el uso de microcontroladores, tanto con frameworks como Arduino como de forma nativa (PIC/AVR). También estoy familiarizado con la arquitectura general de los sistemas integrados, en la medida en que sé que tiene un procesador con RAM discreta y ROM/flash conectado a través de varios buses. Sin embargo, nunca he construido un proyecto desde cero utilizando un microprocesador.
¿Qué debo saber antes de pasar a proyectos basados en microprocesadores? Por ejemplo, en un microcontrolador, estoy acostumbrado a enviar un código a través de mi compilador y obtener un binario que se puede cargar a través de ISP o similar. ¿Cómo funciona esto con un procesador con flash discreto? ¿Y qué pasa con las fuentes de reloj? ¿Los procesadores normalmente vienen con un reloj interno como lo hacen las MCU? Estoy seguro de que también hay muchas "incógnitas desconocidas", ¿dónde debo buscar para comenzar?
Estoy principalmente interesado en las plataformas ARM y x86, pero también sería útil un consejo general.
La principal diferencia en estos sistemas es que, por lo general, no ejecutan la mayoría directamente fuera de la memoria flash; en su lugar, habrá un pequeño programa en la memoria flash que actúa como cargador de arranque, y luego el programa se copiará desde algún medio como una tarjeta SD, SSD o disco duro en la RAM, desde donde se ejecuta. Si es necesario actualizar el cargador de arranque, habrá algún medio, ya sea a través del microprocesador o externo, para actualizarlo y reprogramarlo.
Entonces, cuando actualice su programa, se descargará a su sistema y luego se escribirá en la tarjeta SD, SSD o disco duro, lo que sea que tenga.
Cuando se está ejecutando, realmente no hay diferencia entre un microcontrolador y un microprocesador. Es solo que en el último caso, hay mucha más RAM (quizás varios cientos de MB) de la que encontraría en un microcontrolador. A la CPU no le importa si se está quedando sin RAM o flash. Una cosa que debe tener en cuenta: un programa erróneo puede borrarse en la RAM, mientras que esto no puede suceder en la memoria flash.
Los microprocesadores casi siempre tendrán un cristal externo como fuente de reloj. El procesador puede usar un PLL (bucle de bloqueo de fase) para multiplicar la frecuencia del cristal hasta un valor mucho más alto (varios cientos de MHz o incluso un GHz). Esto será parte del código de inicialización.
Acceder a los periféricos es esencialmente lo mismo que con un microcontrolador; simplemente son externos al chip en lugar de estar dentro de él, por lo que el acceso no es tan rápido. (Los únicos "periféricos" normalmente en un chip x86 son temporizadores, DMA y controlador de interrupción). El procesador se comunica con los dispositivos periféricos a través de puertos de E/S.
En mi opinión, uno de los mejores métodos para discriminar entre una MPU y una MCU es si la CPU incluye una unidad de administración de memoria (MMU), es decir, un mecanismo de hardware para mapear bloques de memoria no contiguos en un espacio contiguo virtual en la mosca, con el mapeo dependiendo de qué proceso se está ejecutando.
Esto permite que los procesos individuales usen cualquier memoria que puedan "ver" y protege cualquier memoria que no puedan "ver" de accesos accidentales.
Una CPU con una MMU es una MPU; una CPU sin MMU es una MCU.
Ignacio Vázquez-Abrams
Polinomio
Ignacio Vázquez-Abrams
pjc50
Spehro Pefhany
Polinomio
ricardo