Saltar al contenido principal
LibreTexts Español

16.3: Memoria

  • Page ID
    81992
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Otro aspecto importante es la memoria. Tenga en cuenta que el AVR contiene varios tipos diferentes de memoria, incluida la memoria de programa flash, la memoria de datos estáticos o SRAM (memoria de acceso aleatorio estática) y EEPROM (memoria de solo lectura programable eléctricamente borrable). Las aplicaciones integradas típicas ejecutan un solo programa repetidamente. Este programa debe ejecutarse desde el momento en que se enciende el dispositivo hasta que se apaga. En muchas aplicaciones, este programa nunca se actualiza (un horno microondas, tal vez). En otras aplicaciones, puede ser actualizado pero sólo por técnicos calificados, no por el consumidor (por ejemplo, un sistema de gestión de motores automotrices). En consecuencia, la memoria del programa necesita ser no volátil, es decir, debe poder sobrevivir sin energía. Históricamente, esto se hizo a través de ROM (Memoria de Solo Lectura) o PROM (Memoria Programable de Solo Lectura). En ambos, las brocas individuales se pueden ajustar o borrar mediante el uso de enlaces fusible/antifusible. La diferencia es que las ROM se programan en el momento de la fabricación mientras que las PROMs se programan después de la fabricación. Ambos son permanentes y no pueden ser reprogramados. ROM es menos costoso para grandes tiradas de producción pero más caro en pequeñas cantidades. EEPROM tiene la ventaja de ser borrable y por lo tanto es una forma de almacenamiento de lectura/escritura no volátil. La memoria RAM flash es similar pero es mucho menos costosa. Tiene la desventaja de que debe programarse en bloques mientras que EEPROM es programable en bytes. Por lo tanto, Flash RAM (también llamada NVRAM) es ideal como medio de almacenamiento para el programa principal y EEPROM es útil como medio para almacenar datos que deben sobrevivir a un ciclo de alimentación. Un posible ejemplo de uso de EEPROM implicaría guardar los ajustes de preferencia del usuario para una cámara digital. Cuando se apaga y se vuelve a encender, el usuario espera que el dispositivo esté “como lo dejó”, no volviendo a un estado predeterminado. Por lo general, se necesitan instrucciones o procedimientos especiales para escribir o leer en EEPROM.

    A diferencia de Flash RAM y EEPROM, la SRAM es volátil, al igual que las variantes comunes de DRAM (RAM dinámica) que se encuentran en las computadoras personales. La RAM estática típicamente está hecha de seis transistores dispuestos como un flip-flop para cada bit de almacenamiento. DRAM, en comparación, generalmente consiste en una sola combinación de transistor-condensador por bit. La SRAM es menos densa y más cara por bit que la DRAM, pero es muy rápida y no necesita actualizarse (la carga en una celda DRAM se filtrará con el tiempo requiriendo que la celda se actualice a intervalos regulares). Como resultado, SRAM se utiliza para registros de propósito general y registros de propósito especial/IO. El ATMega 328P utilizado en la placa de desarrollo Arduino Uno presenta 32k bytes de RAM Flash, 1k de EEPROM y 2k de SRAM. El Uno se detalla en el siguiente capítulo. En comparación, el ATMega 48A consta de 4k Flash, 256 bytes de EEPROM y 512 bytes de SRAM. Claramente, estas son huellas de memoria muy modestas cuando se comparan con las computadoras personales, pero son suficientes para alimentar una amplia gama de aplicaciones. El 328P no está de ninguna manera en la parte superior del montón, por así decirlo. Otros controladores cuentan con megabytes de memoria direccionable. Sin embargo, no hay necesidad de sobreespecificar un controlador para una aplicación incrustada dada. La memoria extra que no se usa no hará que la aplicación sea más rápida; simplemente conducirá a un hardware más costoso.

    Continuando, todos los registros en el núcleo AVR están mapeados en memoria, es decir, están vinculados a direcciones específicas en la SRAM. Por ejemplo, los bytes alto (ADCH) y bajo (ADCL) de la salida del convertidor analógico a digital 328P se encuentran en las direcciones 0x79 y 0x78. De manera similar, la salida del puerto B (PORTB) se encuentra en la dirección 0x25 mientras que el registro de dirección de datos del puerto B (DDRB) se encuentra en 0x24. Una tabla detallada de todos los registros se encuentra en la documentación de Atmel 2014 bajo “Resumen del registro”. Una parte de estos están disponibles en el Apéndice.

    Finalmente, una serie de otros bloques como la unidad de interrupción y los módulos IO completan el diseño. Vamos a echar un vistazo mucho más de cerca a estos bloques en los próximos capítulos.


    This page titled 16.3: Memoria is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.