Recientemente comencé a trabajar en una pequeña empresa que produce productos electrónicos relacionados con el diagnóstico automotriz. Mi jefe, que tiene más de 50 años, dijo que estaba usando derivados 8051 y que estaban haciendo el trabajo. Seguí buscando en Google para saber si 8051 sigue siendo popular hoy en día. Y en Quora, vi estos:
... es probablemente la arquitectura MCU más simple que existe. Cada periférico parece la versión básica. ¡Mis conceptos de temporizadores, cronometraje, UART, etc. se aclararon mucho! Y luego comencé a apreciar otras arquitecturas, porque realmente entendí la diferenciación.
... obviamente, ninguna industria la utilizará para desarrollar un producto debido a su simplicidad ...
¿Pero por qué? Hasta ahora, al menos como estudiante, solía hacer muchas cosas sin jugar con la arquitectura. Felizmente codifiqué con C, utilicé periféricos LCD, conectado a otros IC con diferentes protocolos (SPI, I2C, etc.)
¿Por qué debería molestarme con la arquitectura de mi microcontrolador, aparte de los campos limitados de las aplicaciones críticas y en tiempo real?
Respuestas:
¿Todavía se usan el 8051 y otros microcontroladores de bajo bit?
Sí, casi en todas partes. Son pequeños y fáciles, hay muchos núcleos flotando alrededor que puede poner en su silicio personalizado a bajo costo o sin costo, hay compiladores maduros. Todo esto hace que el 8051 siga siendo una de las arquitecturas principales más populares entre los fabricantes de silicio. Los núcleos ARM pueden estar disponibles en productos más diferentes, pero, de nuevo, cuando hablas con alguien que está construyendo muchos dispositivos con una restricción de precios muy estricta, es probable que prefiera un núcleo 8051 más barato / gratis si hace el trabajo. . Solo para oponernos a la afirmación de @ Nitro2k01 de uso exclusivo de nicho: Mouser tiene casi 800 modelos de microcontroladores 8051 en stock ¹. Y el hecho de que estos comiencen, incluso en Mouser, a precios inferiores a 40ct podría ser una indicación de para qué se usan:
MCU convencionales, de bajo rendimiento y alto volumen
así:
es una tontería de alta calidad. Especialmente porque tú mismo estás dando un contraejemplo
¡Exactamente! Se usan en todas partes, están bien probados y son baratos, y son suficientes ; ¡nunca subestimes la ventaja de tener una solución a un problema común en un cajón en alguna parte!
Por supuesto, a menudo es el caso de que necesite una solución con, digamos, dos buses automotrices típicos, una interfaz de alta velocidad para un ADC, algunos temporizadores de vigilancia confiables, tres unidades PWM ... y luego comienza a armar algo que consiste en cuatro derivados 8051 y 8080 .. uh. Esa es una mala situación, y muy probablemente podría resolverse mucho más rápido y más confiable usando un MCU único, más versátil y más potente (por ejemplo, un ARM). Pero que "tenemos conocimiento de la empresa sobre cómo funciona algo con tecnología antigua" frente a "estamos preparados para el futuro al tener la capacidad de funcionar con hardware moderno" es un compromiso clásico de seguridad de inversión. Si encuentra uno de ese tipo de proyectos, trataría de hablar con el jefe en ese contexto. Para trabajos pequeños y fáciles, sí, 8051.
¿Debería molestarme en aprender sobre arquitecturas MCU en general?
¡Si! Creo que @jfkowes lo explica muy bien. Pero honestamente: esto es un poco como preguntar "¿debería aprender cómo funciona el motor de combustión interna si quiero ser mecánico de automóviles"; la respuesta es "puede que vivas bien si solo puedes ejecutar los manuales de reparación lo suficientemente bien, pero probablemente serás un técnico mucho mejor (solo ingeniero) si entiendes lo que hace tu hardware.
Tan pronto como se enfrente a un problema que no se puede buscar en Google, sería una tortuga sobre su espalda si no entendiera aproximadamente cómo funciona su procesador.
¿Debería molestarme en aprender la arquitectura 8051?
Probablemente no. En el sentido de que sí, siempre y cuando el costo no sea su enfoque principal, lo más probable es que pueda usar MCU mucho más potentes y versátiles basados en núcleos ARM u otras arquitecturas más modernas.
Por otra parte, el núcleo 8051 es tan fácil que recomendaría comprender cuáles son sus unidades antes de tratar de abordar un núcleo MCU más moderno y complejo. Es un buen ejemplo.
Entonces, si 8051 no es el núcleo que estoy buscando en una aplicación de bajo volumen, ¿qué estoy buscando?
Entonces, personalmente: elija un ARM Cortex-M0, -M3, -M4F; Estos son abundantes en todo tipo de microcontroladores asequibles, fáciles de programar (sí, soporte GCC maduro, bibliotecas estándar CMSIS, muchos sistemas operativos integrados que se ejecutan en estos), y comúnmente vienen con interfaces de depuración estándar (que es una gran ventaja).
Los ARM son, desde el exterior, generalmente relativamente fáciles de entender, ya que normalmente mapearía cada periférico en el espacio de memoria, y eso es todo. Internamente, tienen diversos grados de sofisticación y optimizaciones de velocidad / robustez / tamaño, lo que hace que no sean perfectamente fáciles de entender en detalle, pero supongo que puede ser un poco pedir a menos que esté interesado en el diseño de la CPU.
Si está interesado en el diseño de CPU, creo que (esto es realmente una creencia personal basada en mi observación de las actividades de investigación y las inversiones "prometidas" de la industria) actualmente estamos observando el surgimiento de una nueva ISA importante: el RISC-V. Hay varias implementaciones de esta arquitectura para FPGA o silicio, y personas como Nvidia también parecen jugar con la idea de reemplazar sus multiprocesadores de flujo con este tipo de núcleos.
¹: Es muy probable que me falte más de la mitad de los 8051 reales que tiene el ratón (porque, hey, acabo de seleccionar todas las MCU cuyo nombre principal era * 80 * 5 *). Lo más probable es que si elige un microcontrolador aleatorio de 8 bits, es probable que su núcleo se derive al menos parcialmente de 8051. Es decir, solo mire la "lista de proveedores de derivados [8051] de Wikipedia" .
fuente
En general, aquí hay algunas buenas razones para aprender (o al menos tener un conocimiento práctico de) la arquitectura del microcontrolador que está utilizando.
Advertencia: en el contexto de su trabajo, la empresa, la aplicación, el hardware asociado, etc., puede haber razones por las que no debería aprender la arquitectura particular que está utilizando en este momento.
Depuración
Cuando las bibliotecas de alto nivel funcionan, es posible que no necesite conocer la arquitectura. Cuando comience a tener problemas, conocer las partes internas de su microcontrolador puede ayudar mucho a aislar y solucionar esos problemas rápidamente.
Eficiencia y simplicidad de código
Si conoce la arquitectura, puede mover la funcionalidad del software al hardware. Esto tiene el potencial de reducir la carga de software y eliminar las fuentes de errores.
Reducción de costo
El conocimiento de la arquitectura puede reducir el uso de memoria de programa y datos y la carga del procesador. Esto puede significar que puede seleccionar un microcontrolador con menos recursos, lo que puede reducir los costos.
Aumentando su utilidad
Incluso si no usa el conocimiento en este momento, las discusiones con colegas / vendedores / ingenieros de soporte, etc., podrían requerirlo. Por ejemplo, algo que sabes podría ayudar a alguien más con un problema que están teniendo. Salvar el día es algo que la gente recuerda.
El conocimiento es poder
Incluso si no necesita el conocimiento en su trabajo actual, cuando vea un anuncio de un trabajo que se ve increíble que dice "Se requiere / prefiere el conocimiento de la arquitectura de <familia de microcontroladores>" , estará en una mejor posición ir por ello.
fuente
¿Todavía se usan el 8051 y otros microcontroladores de bajo bit?
Sí, aunque principalmente para casos de uso de nicho. Se utilizan principalmente para tareas simples, en productos producidos en masa, con costos o en los que es deseable un historial probado. A menudo tienen licencia e integradas a una solución de chip único. Debido a su arquitectura simple, es fácil integrarlos con periféricos personalizados en el mismo chip. Otra ventaja es que pueden producirse en un área pequeña con técnicas de fabricación de semiconductores más antiguas (y más baratas).
Un ejemplo de ello es el chip de control en las tarjetas inteligentes, que a menudo usan un núcleo 8051 o similar con extensiones de hardware criptográfico. Es probable que encuentre núcleos de microcontroladores de 8 bits en cosas como el controlador para un monitor de cepillo de dientes eléctrico inteligente. La ECU de un vehículo a menudo usará un microcontrolador de 8 bits, junto con uno de 32 bits, como un perro guardián debido a su mayor confiabilidad y menor complejidad.
¿Deberías aprenderlo?
Además de la posibilidad de que realmente pueda terminar en una situación en la que se necesita el conocimiento de esa arquitectura en particular, diría que es una habilidad útil en general. Incluso si programa C en su trabajo diario, es útil tener una comprensión general de lo que sucede en "un nivel por debajo". Al solucionar errores extraños o problemas de rendimiento, puede ser mucho más fácil detectar el problema si tiene una comprensión general del hardware subyacente. También podría analizar más fácilmente el resultado del lenguaje ensamblador del compilador de C. Aprender una arquitectura también facilitará aprender otras diferentes en el futuro. Estas habilidades también pueden ayudarlo a escribir un mejor código incluso para núcleos de CPU más modernos.
fuente
Puedes aprender mucho sobre diseño digital aprendiéndolos. La electrónica digital se construye utilizando dos cosas. Primero están los elementos lógicos, las interconexiones de los elementos AND, OR, NOT que implementan una expresión lógica. (En la práctica, se utilizan otros elementos lógicos como NAND, pero AND, OR y NOT son más fáciles de entender). En segundo lugar, hay elementos de memoria que pueden contener uno o más bits. Cuando se introducen elementos de memoria, los dispositivos pueden tener lo que se llama un estado . Las diferentes combinaciones de bits en sus elementos de memoria corresponden a diferentes estados.
Considere una máquina expendedora de estados que comienza en el estado 0 y se mueve a otro estado cada vez que se inserta una moneda. Al hacerlo, la máquina puede realizar un seguimiento de la cantidad total de dinero, saber cuándo se ha invertido suficiente dinero y saber cuánto cambio devolver.
Para diseñar los circuitos de la máquina, comience con un diagrama de los estados con flechas que muestren las transiciones a otros estados junto con las condiciones que los desencadenan. Para cada flecha, una expresión lógica identifica una condición. Luego se puede determinar cuáles son todas estas expresiones e implementarlas con elementos lógicos.
Para una máquina expendedora, esto no es muy difícil. Para controladores complejos se vuelve mucho más difícil. Los microcontroladores son una forma rápida y fácil de hacer lo mismo. Considere una "memoria" que (en el sentido de un byte o palabra) tiene k bits de ancho y tiene n líneas de dirección que dan como resultado 2 ^ n ubicaciones en la memoria. Esta memoria está programada con un diseño y es de solo lectura en la práctica. Tenga en cuenta que al usar los bits de dirección de la memoria como "entradas" y los bits de datos como salidas, la memoria se puede programar para realizar cualquier función lógica.
Agregar un registro también de k bits de ancho para contener el contenido de una ubicación de memoria produce una máquina de estado.
Si los k bits se dividen en, por ejemplo , un código de operación y una dirección. El conjunto de bits del código de operación controla otras partes del circuito (como dispensar un producto de máquina expendedora) y los otros son una dirección de memoria de n bits de ancho, cada conjunto de k bits se convierte en una microinstrucción con capacidad de ramificación.
Agregue a esto algo de lógica aritmética, algunos registros más (donde uno o más de ellos toman entradas de control para desplazarse hacia la izquierda y hacia la derecha) y puede construir una CPU cuyas instrucciones de máquina se implementan mediante una secuencia de microinstrucciones.
En las décadas de 1970 y 1980 se construyeron varias computadoras exitosas utilizando este diseño. Uno de ellos (VAX 11 de Digital Equipment) tenía una instrucción de máquina para calcular un polinomio entero, destinado a cálculos de direcciones (think array). Resultó que la instrucción podría implementarse más rápido usando instrucciones más simples.
Los microcontroladores pueden ser, y generalmente son, una implementación menos eficiente que una máquina de estado tradicional. Pero se pueden cambiar fácilmente, mucho más rápido de diseñar y son excelentes soluciones de controlador.
fuente