Página 1 de 1
Mass Storage using internal flash memory

Enviado:
28 Jan 2009 21:47
por barboza
Alguem aqui já trabalhou ou tem as dicas de como implementar um mass storage com a flash interna do LPC2148?
pensei em algo como salvar 1 ou 2 arquivos binários na flash como massa de dados para um pequeno programa.
Estive pesquisando sobre as bibliotecas da Keil (RL-FlashFS)....
http://www.keil.com/support/man/docs/rl ... ternal.htm
Até onde isso é uma restrição?
If the device uses an Error Correction Code (ECC) to correct single bit flash errors, then RL-FlashFS will not work. Such devices are, for example, NXP LPC213x and LPC214x devices.
Alguma dica?

Enviado:
29 Jan 2009 06:10
por proex
Algumas restrições são:
A memoria flash é formada por paginas de 512 bytes ou 1024 bytes, dependendo do modelo.
Se vc precisar alterar um unico byte em seu arquivo, vc terá que mover todos os 512 bytes (ou 1024) para a Ram de dados, alterar o byte desejado e gravar novamente esse 512 bytes de volta na Flash.
Se alguns segundos depois vc precisar alterar outro byte, todo o processo deverá ser repetido.
Nao é um forma elegante de trabalhar com memorias Flash.
O problema maior, e mais perigoso na minha opinião, é que a flash não suporta muitos ciclos de escrita. Vc poderá danificar seu chip rapidamente, se sua aplicação ficar lendo e escrevendo frequentemente.
Não sei precisamente quantos ciclos de escrita a Flash do ARM suporta, mas geralmente nao passa de 1000 vezes.
Vc deve estimar a quantidade de escrita no seu arquivo na Flash durante a vida util do seu produto, para nao ter surpresas desagradaveis quando ele ja estiver no mercado.
Pense na possibilidade de adotar uma memoria serial externa para isso, são baratas e nao poem em risco a vida util do seu produto.
.

Enviado:
29 Jan 2009 06:43
por barboza
A questão da paginação é conhecida e não seria um problema tão grave pois a atualização dos arquivos seria na ordem de 1x ao ano...
Quando a memória serial é outra opção, mas como já tenho a interna, porque não usar.
Só fiquei com o receio da questão do ECC que o Keil comentou.
Valeu os comentários.
Conhece outra biblioteca que faz isso?

Enviado:
29 Jan 2009 12:00
por MarcusPonce
Barboza, se você permite uma sugestão mais radical levando em conta que:
a) Os dados dentro do LPC2148 só serão lidos pelo seu firmware mesmo
b) São apenas 1 ou 2 arquivos
Você poderia descartar este enfoque de gravar arquivos e pensar em gravar sua massa de dados em um endereço conhecido da FLASH.
O LPC2148 já tem rotinas internas (usadas para download de programas pela interface serial dele) que seu firmware pode acessar e elas vão apagar e gravar um bloco na Flash por você, retornando se OK ou ERRO, cuidando do ECC elas mesmas.
Mas ainda permanece a necessidade de regravar um bloco inteiro se precisar trocar só um byte. As rotinas trabalham com 256, 512, 1024 ou 4096 bytes.
Acredito que ficará mais fácil que o sistema de arquivos.
Veja no User Manual, tópico IAP, como fazer.

Enviado:
29 Jan 2009 14:08
por barboza
Oi Marcus!
A questão é os arquivos/dados devem ser atualizados pelo cliente, por isso pensei no modo mass storage via USB, onde o cara pluga o aparelho na USB do PC, abre um disco virtual (~400K) e ele atualiza o(s) arquivo(s).
Assim é mais fácil e comercial.....

Enviado:
29 Jan 2009 21:12
por polesapart
Olha, não sei se foi no site da keil ou do iar, mas eu já baixei aqui pro hd em alguma birosca que não tou achando, um codigo de exemplo que fazia exatamente isto: um mass storage usb que referenciava a flash do lpc. dá uma pesquisada num destes sites que deve ter algo.
[]s

Enviado:
29 Jan 2009 21:33
por MarcusPonce
Ok, agora percebi. Realmente do lado do usuário fica bem prático.
Também lembrei que já nos encontramos em outro tópico, com o Jean Fernandes, sobre este mesmo assunto.
Você já testou este exemplo abaixo ?
http://www.keil.com/download/docs/307.asp