Tipos de memória no Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Neste artigo, aprenderemos sobre os blocos de memória integrados da plataforma de prototipagem do Arduino. Vamos dar ênfase especial à descrição e compreensão das operações básicas dos diferentes blocos de memória do Arduino, a saber, a Memória Flash, a Memória Somente Leitura Programável Apagável Eletricamente (EEPROM) e a Memória Estática de Acesso Aleatório (SRAM). Também abordaremos a arquitetura e o design físico da memória, e o que acontece quando a memória acaba.

Anúncio PCBWay

O que é memória?

A memória é um recurso essencial importante para qualquer sistema de computação, especialmente em sistemas embarcados. O subsistema de memória é um dos muitos subsistemas dentro de um microcontrolador. No figura 1, um barramento conecta o módulo de memória aos dispositivos da CPU e de E / S. O objetivo do bloco de memória é armazenar dados ou informações em tempo de execução temporária ou permanentemente, dependendo dos requisitos do programa.

Tipos de memória no Arduino 53
Figura 1: Estrutura interna do microcontrolador

No contexto dos sistemas de computação, a memória refere-se aos dispositivos semicondutores de óxido de metal que armazenam e recuperam informações ou dados para processamento adicional pela CPU. Podemos considerar a memória como uma matriz tabular de células, como mostrado no diagrama abaixo. Cada célula armazena essas informações na forma de unidades básicas chamadas bits, que alternam os estados entre 0 e 1.

Tipos de memória no Arduino 55

As células têm as seguintes propriedades:

  • Cada célula pode se lembrar de dados de determinados tamanhos. Normalmente, tamanhos de 1 byte ou 8 bits de informação podem ser armazenados em uma célula.
  • Cada célula possui um número exclusivo para identificação e localização.
  • Mais importante, podemos armazenar ou ler informações de cada célula através de um ESCREVA ou LER Operação.
Leia Também  Tendências de conteúdo: esses tipos de conteúdo são importantes no futuro

Operações de memória

UMA Escreva A operação aceita um endereço e um valor. UMA ler A operação aceita um endereço e retorna as informações armazenadas nesse local específico. Armazenamento de dados – em alguns textos, a notação hexadecimal representa dados na memória. A principal vantagem é que a notação hexadecimal armazena dados com mais eficiência do que números inteiros ou seqüências de caracteres. Por exemplo, a notação hexadecimal de 01111101 é 7D, esse valor é armazenado em uma célula cujo endereço é 175. Aqui, vemos que cada byte de memória é equivalente a apenas dois dígitos hexadecimais. Em outro exemplo, o armazenamento de memória para o número decimal 1962 é 1F1A. Isso requer apenas 2 células de memória para armazenamento. Podemos repetir a mesma operação para armazenar uma string como “memória”.

Tipos de memória no Arduino 57
Figura 2: Como os dados são armazenados nas células da memória: 1 byte, número inteiro de 2 bytes e uma string

Memória volátil vs não volátil

Existem diferentes tipos de dispositivos de memória disponíveis, e a área de aplicação de cada dispositivo de memória depende da arquitetura do sistema de memória.

Alguns sistemas de memória requerem energia para manter as informações armazenadas. Esse sistema é chamado memória volátil. O dispositivo mantém os dados enquanto houver energia elétrica. Isso significa que esses sistemas de memória de curto prazo são adequados para armazenar dados de trabalho e código de máquina.

Por outro lado, alguns sistemas de memória podem lembrar as informações mesmo que a energia do dispositivo tenha sido desligada. Estes são chamados Memória não volátil. O objetivo desses sistemas de memória é o armazenamento de dados a longo prazo. Exemplos de memória não volátil são ROM e memória flash.

Agora, vamos ver a diferença entre memória volátil e não volátil:

Memória volátil Memória não volátil
Descrição Perde todos os dados quando a energia é perdida Retém todos os dados quando o ciclo é ligado
Usos Cache, Registros,
RAM estática (SRAM),
RAM dinâmica (DRAM)
Drives de disco rígido
EEPROM
Memória flash
Retenção temporária de dados Retenção permanente de informações

Tipos de memória incorporada no Arduino

Figura 3 mostra a árvore de memória geral de um sistema de computador. O diagrama também mostra os subsistemas de memória relacionados ao Arduino.

Tipos de memória no Arduino 59
Figura 3: Tipos de memória do computador. Os subsistemas de memória destacados são relevantes para o Arduino.

O que é memória flash?

A memória flash, também conhecida como armazenamento flash, é a atual líder no mercado de memória de semicondutores em termos de unidades de produção e vendas. Isso ocorre porque a memória flash tem o menor custo por bit de memória. Além disso, é rápido e fácil armazenar informações. É uma memória não volátil, o que significa que as células mantêm as informações por um período prolongado, mesmo quando a energia do dispositivo foi interrompida. Nos chips de microcontrolador, a memória flash é integrada no chip e é usada como memória de programa. As células de memória flash são gravadas ou apagadas eletricamente e podem ter até 10.000 ciclos de gravação e apagamento.

A memória flash é comum nos seguintes dispositivos:

  • Celulares
  • Dispositivos de rede de computadores
  • Produtos eletrônicos de consumo, como câmeras digitais, filmadoras e consoles de videogame,
  • Dispositivos industriais, p. sistemas de segurança, sistemas militares e produtos de varejo
  • Cartões de memória e unidades de disco de estado sólido

Como funciona a memória flash

Para entendermos os princípios de funcionamento de uma célula de memória flash, precisamos entender a operação de um transistor de efeito de campo ou MOSFET de semicondutor de óxido metálico de porta flutuante, como mostrado na Figura 4.

Uma célula de memória flash, na Figura 4b, usa o conceito de um MOSFET de porta flutuante para salvar um pouco de informação. O MOSFET possui um portão de controle e um portão flutuante. O objetivo de um material dielétrico é separar a porta de controle e a porta flutuante do substrato e dos terminais. O portão flutuante é responsável por armazenar a carga e controlar o fluxo de corrente.

Tipos de memória no Arduino 61
Figura 4: (a) estrutura básica do MOSFET e (b) uma seção transversal básica da célula de memória flash [1]

Um MOSFET é um comutador acionado por tensão que controla o fluxo de corrente em um circuito eletrônico. Os dispositivos são feitos de um material semicondutor dopado. Ao contrário dos dispositivos de controle de potência magnética, os MOSFETs têm um fator de forma muito pequeno e não possuem partes móveis. Isso significa que os MOSFETs podem operar muito mais rápido que os dispositivos de comutação magnética. Como mostra a Figura 4, os dispositivos têm três conexões externas básicas: a fonte, o dreno e o portão. A fonte está conectada ao terra, o dreno está conectado à carga e, finalmente, o MOSFET será LIGADO quando uma tensão positiva estiver conectada ao portão.

Célula de Memória Flash

A carga do portão flutuante determina o fluxo de corrente da fonte para o dreno. O portão flutuante pode ser neutro, positivo ou carregado negativamente. Se o portão flutuante for neutro, o transistor de armazenamento se comportará como um MOSFET normal. Uma carga positiva na porta de controle cria um canal condutor no substrato p e a corrente flui da fonte para o dreno. Por fim, uma carga negativa no portão flutuante impede a formação de um canal no substrato-p.

Outro parâmetro importante é a tensão limite. Essa é a tensão mínima na porta de controle que pode tornar o canal condutor.

As operações que podem ser executadas na célula de memória flash incluem a programação e a exclusão da célula. Quando programamos uma célula de memória Flash, o que estamos fazendo fisicamente é colocar elétrons no portão flutuante. Por outro lado, quando removemos a carga do portão flutuante, estamos basicamente apagando a célula de memória. No entanto, o processo detalhado de aprisionar ou remover elétrons da porta flutuante está além do escopo deste artigo.

Memória Flash Arduino

A memória flash, também conhecida como memória de programa, é onde o Arduino armazena e executa o esboço. Como a memória flash não é volátil, o esboço do Arduino é recuperado quando o micro-controlador é ligado e desligado. No entanto, quando o esboço começar a ser executado, os dados na memória flash não poderão mais ser alterados. A modificação só pode ser feita quando o programa é copiado na memória SRAM.

A tabela abaixo mostra a quantidade de memória flash disponível em algumas placas diferentes do Arduino:

Tipos de memória no Arduino 63

O tamanho do programa é exibido após o upload do esboço na janela de notificação do programa na parte inferior do IDE. Neste exemplo, nosso código ocupará apenas 1758 bytes de espaço no programa de um total de 30720 bytes.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Tipos de memória no Arduino 65

O que é memória EEPROM?

A memória de leitura programável apagável eletricamente (EEPROM) é um bloco de memória não volátil e barato, o que significa que não perdemos os dados quando removemos a energia do dispositivo. Esse tipo de memória é usado para armazenar pequenas quantidades de dados que são gravadas ocasionalmente e lidas várias vezes. Atualmente, a maioria das EEPROMs no mercado possui interface serial SPI ou 12C para comunicação. Uma célula de memória EEPROM é quase idêntica em arquitetura à célula de memória Flash, exceto que a célula EEPROM carrega um transistor CMOS regular adicional, como mostra a Figura 6. A operação de uma célula de memória Flash e o aprisionamento de carga pelo portão flutuante discutido no capítulo anterior. No entanto, o transistor adicional na estrutura EEPROM é usado para apagar a carga.

Tipos de memória no Arduino 67
Figura 6: Célula de memória EEPROM básica

Arduino EEPROM

Em alguns casos, podemos precisar armazenar os estados de certos dispositivos de entrada e saída no Arduino por longos períodos. Para isso, salvamos os dados na memória EEPROM com a ajuda de bibliotecas do Arduino ou de EEPROM de terceiros. Isso nos ajuda a lembrar as informações quando ligamos o Arduino novamente. A maioria das placas Arduino possui memória EEPROM integrada, mas em alguns casos, certos programas podem exigir o uso de uma EEPROM externa. As funções abaixo nos ajudam a interagir com a EEPROM do Arduino.

#include 
EEPROM.write(address, value);
EEPROM.read(address);
EEPROM.update(address, value);
EEPROM.get(address);
EEPROM.put(address, value);

Para atualizar ou gravar na EEPROM, precisamos do endereço para gravar e também o valor para gravar ou atualizar. A função de leitura aceita o endereço para leitura e retorna o valor armazenado nesse endereço. o get() e put() funções funcionam exatamente como o read() e write() respectivamente, exceto que as primeiras nos permitem armazenar outros tipos de dados, como flutuadores, estruturas ou números inteiros.

Tipos de memória no Arduino 69

O que é memória SRAM?

A SRAM (Static Random Access Memory) é um tipo de RAM que usa um conjunto de transistores para armazenar um pouco de dados. A memória SRAM é volátil. Isso significa que a célula de memória manterá um pouco de dados enquanto houver energia no circuito. Diferente da DRAM (Dynamic Random Access Memory), a célula de memória SRAM não requer atualização constante para reter os dados. É muito mais caro que a DRAM, menor em estrutura, mas mais rápido. Essas características são adequadas para uso em servidores de alto desempenho ou memória cache, geralmente aplicadas entre a memória principal e a CPU de um sistema.

Como funciona a memória SRAM

Tipos de memória no Arduino 71
Figura 7: célula de memória SRAM de 1 bit

A Figura 7 mostra uma célula de memória SRAM típica para armazenar 1 bit de dados. Várias células são empilhadas juntas em linhas e colunas para criar um byte ou palavras de memória, como mostra a Figura 8. Na representação SRAM simplificada mostrada na Figura 7, vemos dois transistores invertidos que realimentam um ao outro, linhas de bits, e uma linha de palavras para endereçar a conexão da célula de memória à CPU. Para escrever um byte de informação, os bytes do endereço são decodificados para que a linha da palavra ligue os dois transistores que correspondem a esta célula de memória. Em seguida, as linhas de bits são direcionadas com as informações a serem armazenadas. Os transistores invertidos que estão dentro da célula de memória alteram seus estados de bits para manter o novo valor. Após uma operação de gravação bem-sucedida, a linha da palavra é desativada e as informações são salvas.

Para ler um valor armazenado na memória SRAM, os bytes de endereço são decodificados para ativar a linha da palavra que corresponde às células da memória. Ao ler os dados, nada está direcionando as linhas de bits; portanto, os inversores de feedback direcionam os dados salvos de volta para as linhas de bits.

Tipos de memória no Arduino 73
Figura 8: célula de memória SRAM de 1 bit e uma matriz de SRAMs

Arduino SRAM

Os dados SRAM ou tempo de execução do Arduino são onde o programa cria e armazena variáveis ​​sub-rotineiras e interrompe chamadas quando o esboço é executado. As variáveis ​​inicializadas de um programa são colocadas no .dados seção enquanto as variáveis ​​não inicializadas são colocadas no .bss seção. No final do bloco SRAM, é onde você encontra a pilha. É aqui que os dados criados durante a execução de chamadas e interrupções de função são armazenados.

Tipos de memória no Arduino 75
Figura 9: célula de memória SRAM com (a) muita memória livre; e (b) uma pilha prestes a travar devido ao espaço SRAM limitado

O tamanho da pilha aumenta à medida que o número de interrupções ou variáveis ​​aumenta. Uma SRAM saudável é algo que possui muita memória livre, como mostra a Figura 9a. À medida que a pilha cresce, a memória livre se esgota e podem ocorrer problemas relacionados à execução do programa. A otimização da SRAM em um Arduino está sujeita a trabalhos futuros.

Tipos de memória no Arduino 77

O que acontece se você ficar sem memória?

Arduinos programados incorretamente podem ficar sem memória durante a execução do programa. A Figura 9b mostra uma pilha que cresceu para ocupar a maior parte do espaço livre do bloco SRAM. Quando o Arduino fica sem memória (FLASH, SRAM e EEPROM), pode ocorrer o seguinte:

  1. Para memória Flash ou SRAM: estes são os mais comuns e difíceis de diagnosticar. O seguinte pode ocorrer se a SRAM acabar no Arduino:
    – O programa pode falhar na execução ou pode operar inesperadamente;
    – Corrupção do programa ou variáveis ​​produzindo resultados imprevisíveis;
    – Quando a pilha falhar, causará uma falha imediata.
    – Se o tamanho do programa for maior que a memória, o esboço poderá não ser carregado.
  2. EEPROM: ficar sem memória EEPROM é um pouco difícil, pois a maioria dos programas dificilmente usa EEPROM. Se isso acontecer, no entanto, a operação do programa principal não será afetada.

Discutiremos as técnicas para acomodar as peculiaridades dos subsistemas de memória incorporados no Arduino em um artigo futuro.

Referências:

[1] https://www.creeaza.com/referate/informatica/calculatoare/Memoria-Flash-Principiile-de-f762.php

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br