EL68E Sistemas Embarcados
Prof. Douglas RENAUX
Memórias
Tecnologias de Memórias
•
Voláteis x Não-Voláteis
•
Estáticas x Dinâmicas
•
Tipos:
•
ROM
•
PROM
•
EPROM
•
Flash
•
SRAM
•
SDRAM
•
DDR
Conceitos
Organização externa x interna Diagramas em blocos
Porque usar barramentos ?
CPU 32bits x Memória 8 bits
Exemplo – 1/8
Processador: Cortex-M3
Chips de memória disponíveis: 1M x 8 bits Total de memória desejado: 2M x 32 bits
Endereço inicial desta memória no mapa de
endereços do Cortex: 0x1000 0000
Exemplo 2/8
Chip de memória (deste exemplo)
-
para endereçar 1M posições (1.048.576) são necessárias 20 linhas de endereço. 2
20= 1M
A D /CS /OE /WR
20
8
Exemplo 3/8
O espaço de endereçamento do Cortex-M3 comporta 4 GBytes, ou seja,
232 = 4.294.967.296.
Para uma memória com 32 bits de largura (4 bytes de largura) existem 1G linhas na memória. Portanto,
30 linhas de endereço são usadas para selecionar uma das 1G linhas.
As outras duas linhas de endereço (A1 e A0) são usadas para selecionar um dos 4 bytes da linha.
Apesar de só se usar 30 bits para o endereço de cada linha, menciona-se os 32 bits
deixando A1 e A0em 0.
Portanto, a primeira linha é 0x0000 0000 e a se- gunda linha é 0x0000 0004 (A1 e A0em 0;
A2 em 1). Desta forma, o endereço da linha é
o endereço do byte menos significativo daquela linha.
4 GBytes de
espaço de
endereçamento
Byte 0 Byte 1
Byte 2
Byte 3 0x0
0xFFFF FFFC Byte no endereço
0xFFFF FFFF
Endereço de cada linha da memória
Exemplo 4/8
Se o objetivo é ter 2M x 32 bits = 64 Mbits =
8 MBytes = 2 MWords de memória mapeados a partir do endereço 0x1000 0000;
Vamos precisar de 8 chips de 8 Mbits cada (1 M x 8 bits = 8 Mbits = 1 MByte).
Colocando 4 destes chips em “paralelo” teremos os mesmos 1M linhas mas agora cada linha terá 32 bits. Total: 1 MWord.
Concatenando mais 4 chips a partir do endereço seguinte, teremos os 2 MWord desejados.
Portanto, o primeiro grupo de 4 chips deve ser mapeado a partir de 0x1000 0000
Somando-se 4 MBytes (= 1MWord) a partir deste endereço concluímos que o segundo grupo de 4 chips deve ser mapeado a partir de
0x1040 0000.
Byte 0 Byte 1
Byte 2
Byte 3 0x0
0xFFFF FFFC
A:1 MWord B:1 MWord
0x1000 0000 0x1040 0000 0x103F FFFC 0x107F FFFC Byte no endereço
0x107F FFFF
Exemplo 5/8
Quais linhas de endereço são usadas para cada finalidade ?
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21
...
A4 A3 A2 A1 A0selecionam o byte dentro de cada linha estas 20 linhas de
endereço selecionam 1 linha de memória dentro de cada região de 1 MWord
estas 10 linhas de endereço selecionam identificam cada uma das regiões de 1 MWord.
Para acessar a região A o valor destes bits de endereço deve ser:
0001 0000 00 (início: 0x100) Para acessar B:
0001 0000 01 (início: 0x104) (observe que para toda a faixa de endereços de 0x1004 0000 até 0x1007 FFFF estes 10 bits – A31 a A22 – não mudam)
Exemplo 6/8
Exemplo 7/8
O Gerador de Chip Select (integrado ao LPC1857) é um módulo programável.
Neste caso, seria programado para gerar /CS1 quando a faixa de endereço fosse:
0x1000 0000 a 0x103F FFFF E para gerar /CS2 na faixa:
0x1040 0000 a 0x107F FFFF
Nos demais endereços nem /CS1 nem /CS2
estaria ativos.
Exemplo 8/8
A implementação do Gerador de Chip Select
poderia ser simplesmente:
ROM - Conceito
word line
bit line
Mask ROM (CMOS)
EPROM e EEPROM - conceito
Memoria Flash
Memória Estática (SRAM)
Célula Básica
Prática 1/2
Acesso a Memória – Estruturas
struct time_str {
unsigned long long h;
unsigned char a;
long long g;
signed char b;
unsigned short c;
signed short d;
int e;
unsigned f;
};
struct time_str t1;
struct time_good { unsigned long long h;
long long g;
int e;
unsigned f;
unsigned short c;
signed short d;
signed char b;
unsigned char a;
};
struct time_good t2;
#pragma pack(1)
struct time_str_packed { unsigned long long h;
unsigned char a;
long long g;
signed char b;
unsigned short c;
signed short d;
int e;
unsigned f;
};
struct time_str_packed t3;
Para CodeRed
https://gcc.gnu.org/onlinedocs/gcc/
Structure-Packing-Pragmas.html
Prática 2/2
Acesso a Memória – Estruturas
•
Escrever código C que escreve em todos os campos destas estruturas.
•
Observar (janela disassembly) o tipo de instrução STR usado para cada campo
•
Qual o tamanho ocupado na memória por cada estrutura ?
•
Imaginando as memórias do exercício anterior, quantos
ciclos de acesso são necessários em cada atribuição ? Quais linhas de controle (/B0, /B1, /B2, /B3) são ativadas em cada caso ?
•
O que acontece ao se atribuir ao campo ´a´ o valor 1000 ? E ao campo ´b´?
•
De que forma o compilador organiza os campos da estrutura na memória a partir do endereço inicial da estrutura ?
•
Qual estrutura está melhor planejada ?
Memória Dinâmica
Célula básica:
1 transistor + 1 capacitor
cas
DRAM Command summary
/CS /RAS /CAS /WE Address Command
H x x x x Command inhibit (No operation)
L H H H x No operation
L H H L x Burst Terminate: stop a read or write burst in progress
L H L H column Read from currently active row
L H L L column Write to currently active row
L L H H row Activate a row for read and write
L L H L x Precharge (deactivate) the current row
L L L H x Auto refresh: Refresh one row of each bank, using an
internal counter
L L L L mode Load mode register: Address bus specifies DRAM
operation mode.
SDRAM -
Dinâmica e Síncrona
2015
O que se usa hoje como memória em sistemas embarcados ?
Tipos de uso:
1.
Código e dados não voláteis
2.
Variáveis
3.
Sistema de arquivos
Código e Dados Não-Voláteis
Memória Flash – NOR
• Acesso aleatório
• Barramentos:
• Endereços
• Dados (8/16/32 bits)
• Controle
• Dividida em setores (p.ex. 128 Kbytes/setor) – apagamento por setor
• Tamanhos: 8K a 1 GByte
• Velocidades: 45 a 150 ns
• Possível organização:
• Bootloader
• Código app (pode fazer update)
• Setores reservados para dados de configuração
• Setores reservados para emulação de disco rígido
• Muitas vezes a Flash-NOR está integrada ao microcontrolador
Variáveis
Armazenamento em RAM
•
RAM Estática x Dinâmica RAM estática:
•
1 Kbyte a 1 Mbyte
•
4/8/16/32 bits – barramento de dados
•
8 a 70 ns – tempo de ciclo
•
Sem refresh => interfaceamento mais simples RAM dinâmica
•
Preferencia atual para DDR3
•
Até 1 Gbyte
•
1600 MHz
Sistema de Arquivos
Sistemas embarcados costumam usar disco em estado sólido NAND- Flash
•
Acesso sequencial por setores – equivalente ao acesso de setores de um HD
•
Erros em parte do setor: uso de códigos corretores de erro (como em HD)
•
Requer poucos pinos de acesso – p.ex. 16
•
Tamanho: 1 Mbyte a 64 Gbytes
•
Muito usada em pen-drives
•
Solução alternativa para S.E. :
• Não usar NOR-FLASH
• Alguns microcontroladores sabem dar boot a partir de NAND- FLASH: copiam da NAND para RAM (equivalente ao PC: HD para RAM)