# Memória flash

Uma memória flash é um tipo de dispositivo de armazenamento não volátil, ou seja, mesmo se não tiver energia, manterá as informações salvas nela. Diferente da memória ROM, a memória flash (ou flash ROM) pode ser atualizada.
A Toshiba desenvolveu a Memória Flash a partir da Memória EEPROM (Electrically-Erasable Programmable Read-Only Memory), em meados da década de 1980, cujos chips são semelhantes ao da Memória RAM, permitindo que múltiplos endereços sejam apagados ou escritos numa só operação. Em termos leigos, trata-se de um chip reescrevível que, ao contrário de uma memória RAM convencional, preserva o seu conteúdo sem a necessidade de fonte de alimentação. Esta memória é comumente usada em cartões de memória, flash drives USB (pen drives), SSD, MP3 Players, dispositivos como os iPods com suporte a vídeo, PDAs, armazenamento interno de câmeras digitais e celulares.
A memória flash é do tipo não-volátil, o que significa que não precisa de energia para manter as informações armazenadas no chip. Além disso, a memória flash oferece um tempo de acesso rápido, embora não tão rápido como a memória volátil (DRAM utilizadas para a memória principal em PCs), e melhor resistência do que discos rígidos. Estas características explicam a popularidade da memória flash em dispositivos portáteis. Outra característica da memória flash é que, quando embaladas em "cartões de memória", são extremamente duráveis, sendo capazes de resistir a pressão intensa, variações extremas de temperatura, e até mesmo imersão em água.
Uma limitação é que a memória flash tem um número finito de modificações (escrita/exclusão). Porém este efeito é parcialmente compensado por alguns chips firmware ou drivers de arquivos de sistema de forma dinâmica e escreve contando o remapeamento dos blocos, a fim de difundir as operações escritas entre os setores.

## História

A memória flash (ambos os tipos, NOR e NAND), foi inventada pelo Dr. Fujio Masuoka enquanto trabalhava para a Toshiba em 1980. De acordo com a Toshiba, o nome "flash" foi sugerido por um colega do Dr. Masuoka, Sr. Shoji Ariizumi, pois o processo de apagamento do conteúdo da memória se assemelhava ao flash de uma câmera fotográfica. O Dr. Masuoka apresentou a invenção ao IEEE 1984 International Electron Devices Meeting (IEDM) realizada em San Francisco, Califórnia. A Intel viu o enorme potencial da invenção e introduziu o primeiro chip flash comercial do tipo NOR em 1988. O flash baseado em NOR leva muito tempo para gravar e apagar, porém fornece completamente o endereço e o barramento de dados, permitindo o acesso aleatório a qualquer posição da memória. Isso o torna um substituto adequado para o antigos chips ROM (Read-Only Memory), que são utilizados para armazenar o código do programa que raramente precisa ser atualizado, como a BIOS ou a firmware do set-top boxes de um computador. Sua resistência é de 10 mil a 1 milhão de ciclos de limpeza. O NOR baseado em flash foi a base do início da mídia removível baseada em flash, o compactflash veio a ser baseado nele, embora mais tarde os cartões tenham deixado de custar caro como os flash baseados em NAND.

## Vantagens

As maiores vantagens desse tipo de memória é sua ocupação mínima de espaço, seu baixo consumo de energia, sua alta resistência, sua durabilidade e segurança, contando com recursos como ECC (Error Correcting Code), que permite detectar erros na transmissão de dados. A tecnologia faz uso de semicondutores (solid state), sendo assim, não tem peças móveis, evitando problemas de causa mecânica.
Também vem começando a ser chamado de disco sólido pelo grande futuro que tem pela frente, já que além de ser muito mais resistente que os discos rígidos atuais, apresenta menor consumo de energia elétrica, latências e peso muito mais baixos. Chega a utilizar apenas 5% dos recursos normalmente empregados na alimentação de discos rígidos.
Com tantas vantagens, a tendência futura é que os fabricantes de computadores tendem a substituir os disco rígidos por unidades flash. O que poderá ser expandida para os desktop nos próximos 5 anos, pois a sua fabricação ainda é de alto custo para as empresas.

## Princípios de operação

A memória flash armazena informações em uma matriz de células de memória compostas de transistores de porta flutuante. Nos dispositivos de célula de nível único (SLC), cada célula armazena apenas um bit de informação. Os dispositivos de célula multinível (MLC), incluindo dispositivos de célula de nível triplo (TLC), podem armazenar mais de um bit por célula.
O portão flutuante pode ser condutor (normalmente polissilício na maioria dos tipos de memória flash) ou não condutor (como na memória flash SONOS).

### Flash NOR

A memória flash NOR (Not OR) permite acessar os dados da memória de maneira aleatória, com alta velocidade. Foi a primeira a se popularizar, chegando ao mercado em 1988, seus chips possuem uma interface de endereços semelhante à da RAM, sendo utilizado para armazenar o BIOS das placas-mãe e também firmwares de vários dispositivos, que antes eram armazenados em ROM ou EPROM. Alguns dos problemas nesse tipo de memória devem-se ao seu alto custo, e ao seu alto tempo de gravação nas células. Mas embora esses problemas existam, é largamente utilizada até hoje em celulares, palmtops e firmware. Chegaram a ser empregadas na fabricação das memórias PCMCIA e CompactFlash, mas com a introdução do tipo NAND, desapareceram deste ramo.

### Flash NAND

O flash NAND também usa transistores de porta flutuante, mas eles são conectados de uma maneira que se assemelha a uma porta NAND: vários transistores são conectados em série e a linha de bits é puxada para baixo somente se todas as linhas de palavras forem puxadas para cima (acima do V$_T$ dos transistores). Esses grupos são então conectados através de alguns transistores adicionais a uma matriz de linhas de bits no estilo NOR da mesma maneira que transistores únicos são vinculados no flash NOR.
Comparado ao flash NOR, a substituição de transistores únicos por grupos vinculados em série adiciona um nível extra de endereçamento. Enquanto o flash NOR pode endereçar a memória por página e depois por palavra, o flash NAND pode endereçar por página, palavra e bit. O endereçamento no nível de bits é adequado para aplicativos seriais de bits (como emulação de disco rígido), que acessam apenas um bit de cada vez. Os aplicativos de execução no local, por outro lado, exigem que cada bit de uma palavra seja acessado simultaneamente. Isso requer endereçamento no nível da palavra. De qualquer forma, os modos de endereçamento de bits e palavras são possíveis com o flash NOR ou NAND.
Para ler os dados, primeiro o grupo desejado é selecionado (da mesma maneira que um único transistor é selecionado de uma matriz NOR). Em seguida, a maioria das linhas de palavras é puxada acima do V$_T$ de um bit programado, enquanto uma delas é puxada para cima do V$_T$ de um bit apagado. O grupo de séries conduzirá (e puxará a linha de bits para baixo) se o bit selecionado não tiver sido programado.
Apesar dos transistores adicionais, a redução de fios terra e linhas de bits permite um layout mais denso e maior capacidade de armazenamento por chip. (Os fios de aterramento e as linhas de bits são, na verdade, muito mais largos que as linhas dos diagramas.) Além disso, normalmente é permitido que o flash NAND contenha um certo número de falhas (espera-se que o flash NOR, como é usado para uma ROM da BIOS, sem falhas). Os fabricantes tentam maximizar a quantidade de armazenamento utilizável diminuindo o tamanho dos transistores.
Essa arquitetura foi introduzida pela Toshiba em 1989. Cada bloco consiste em um determinado número de páginas. As páginas são tipicamente 512, 1 024, 2 048 ou 4 096 bytes em tamanho. A página é associada a alguns bytes (tipicamente 12-16 bytes). Atualmente são os tipos de memória mais usados em dispositivos portáteis.

#### Tamanhos típicos dos blocos

* 32 páginas de 512 bytes para cada tamanho de um bloco de 16 kB;
* 64 páginas de 2 048 bytes para cada tamanho de um bloco de 128 kB;
* 64 páginas de 4 096 bytes para cada tamanho de um bloco de 256 kB;
* 128 páginas de 4 096 bytes para cada tamanho de um bloco de 512 kB.
Embora a programação seja realizada em uma página base,a exclusão dos dados só pode ser executada em um bloco base. Outra limitação do flash NAND é que um bloco de dados só pode ser escrito sequencialmente. Número de Operações (NOPs) é o número de vezes que os setores podem ser programados. A maior parte dos dispositivos NAND saem da fábrica com alguns blocos defeituosos, que normalmente são identificados e classificados de acordo com uma determinada marcação de bloco defeituoso. Ao permitir que alguns blocos defeituosos saiam os fabricantes alcançam mais rendimentos do que seria possível, caso todos os blocos fossem bons. Isto reduz significativamente os custos da Memória flash NAND e diminui ligeiramente a capacidade de armazenamento das partes.

## Sistema de Arquivos Flash

O conceito básico dos sistemas de arquivos flash é o seguinte: quando os dados armazenados vão ser atualizados, o sistema de arquivos faz uma cópia deles para um novo bloco de memória, remapeia os ponteiros de arquivo e depois apaga o antigo bloco quando tiver tempo. Na prática, esse sistema de arquivos é utilizado em dispositivos com memória flash embutida que não possuem controladores.
Os cartões de memória e drives USB flash são incorporados de controladores e devem desempenhar correção de erros, então o uso de um ou outro sistema de arquivos flash pode não acrescentar nenhum benefício, então os dispositivos flash removíveis utilizam o sistema de arquivos FAT universal, permitindo assim a compatibilidade com câmeras, computadores, PDAs e outros dispositivos portáteis com slots para cartões de memória.

## Padronização

Um grupo chamado Open Nand Flash Interface Working Group(ONFI) desenvolveu uma interface padronizada para os chips NAND flash, tornando possível a interoperabilidade entre dispositivos NAND de diferentes fornecedores. A versão 1.0 da especificação ONFI foi liberada em Dezembro de 2006, com as seguintes especificações:
* interface física normalizada(pinout) para NAND flash em TSOP-48, LGA-52 e BGA-63.
* um comando padrão estabelecido para ler, escrever e apagar dados nos chips NAND.
* mecanismo de auto-identificação, comparável ao Serial Presence detection(características dos SDRAM)
O grupo tem apoio dos principais fabricantes de memória NAND - tais como a Intel, Micron Technology e Sony - e dos principais fabricantes de dispositivos que integram chips NAND. Alguns fornecedores, incluindo Intel, Dell e Microsoft, formaram um grupo para proporcionar um padrão de software e hardware programando interfaces para subsistemas de memória não-volátil, incluindo a flash cache, dispositivo ligado ao PCI Express.

## Taxas de Transferência

Geralmente é anunciada somente a velocidade máxima de leitura, pois os cartões de memória NAND são mais rápidos lendo do que escrevendo dados. O tempo de acesso influencia no desempenho, mas não tem tanta importância comparando com o disco rígido. Às vezes denotado em MB/s(megabytes por segundo), ou em número de “X” como 60x, 100x ou 150x. O “X” se refere à velocidade com que uma única unidade de CD entregaria os dados, 1x é o mesmo que 150 kilobytes por segundo. Por exemplo, um cartão de memória 100x vai a 150 KiB x 100 = 15 000 KiB por segundo = 14,65 MiB por segundo (A velocidade exata depende da definição de Megabyte que o comerciante opta por utilizar).

## Substituto para discos rígidos

Uma extensão óbvia da memória flash seria um substituto para os discos rígidos, já que ela não possui as limitações mecânicas e latência dos mesmos. A ideia de um drive de estado sólido, ou SSD, torna-se atraente se considerarmos velocidade, ruído, consumo de energia e confiabilidade. Porém, ainda existem algumas desvantagens que devem ser consideradas. Por exemplo, o custo por gigabyte de memória flash ainda é maior do que dos discos rígidos. Algumas técnicas estão sendo utilizadas na tentativa de combinar as vantagens das duas tecnologias, usando a flash como uma cache de alta velocidade para arquivos do disco que são muito referenciados mas pouco modificados, tais como aplicativos e arquivos executáveis do sistema operacional.