Memória SD

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Memória SD

Mensagempor fabiorike » 07 Nov 2006 10:34

Bom Dia

Eu tenho um cartão SD, igual esse de máquina fotográfica e eu gostaria de usa-lo junto com o AT89S8253, alguem sabe como é a comunicação desse cartão, se é SPI?

Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor jeanfernandes » 07 Nov 2006 12:17

Bom se for SD card tudo bem, pois a sony tem os modelitos dela.

Seguinte :

É SPI sim, mas eu tentei usar a SPI do MCU com o slave controlado por mim e nao tive muito sucesso nao. Ai fiz na mao.

Mas na base, voce precisar de DATA IN/OUT, CLOCK, CHIPSELECT, Alimentacao .

Codigo ? Tem aos tufos na rede. Sugiro que de uma olhada no Design Contest 2005 da ARM no site da Circuit Cellar. Lá voce encontra um projeto que tem o codigo pronto claor que pra ARM, so que é a mesma coisa. No mais googla ae que voce acha bilhoes de codigo.

Se for usar pra R/W no setor direto eh simples. Caso queira montar uma FAT ai o negocio eh mais embaixo, mas nao tanto assim.....

Veja o que voce consegue e depois retorna aqui.
Dica : Interessante é voce estudar o timming do sdcard. La tem os graficos de acesso ao cartao. COnsulta Sandisk que voce pega.

Xau.
:D
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB

Mensagempor fabiorike » 07 Nov 2006 13:52

boa Tarde

Eu queria apenas gravar dados neste cartão de memória e depois conseguir ler esses dados para escreve-los no display.
O q é FAT?
Abraços
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor andre_luis » 07 Nov 2006 15:08

Se for trabalhar com FAT, tecnicamente, o buraco é mais em baixo.
Além de que, como postado no fórum antigo, o FAT agora é patenteado.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

No principio era um disco vazio ... E o bill viu que era bom

Mensagempor Wagner de Queiroz » 07 Nov 2006 15:18

fabiorike escreveu:O q é FAT?


FAT (Gordo), File Allocation Table - Tabela de Alocação de arquivos.

é Um sistema de arquivos usados pelo sistema MS-DOS e MS-Windows da Microsoft.

Explico:

Cada setor do disco tem um endereço unico. A tabela fat é uma tabela onde cada setor tem um endereço associado. Caso seu arquivo aumente de tamanho, a fat procura um setor de disco livre para continuar o arquivo. Caso seu arquivo encolha ou seja apagado, as entradas necessárias na fat sao liberadas. Cada arquivo que voce cria no sistema, precisa estar gravado nos setores do disco. A fat sabe a localização exata de todos os dados gravados.


http://en.wikipedia.org/wiki/File_Allocation_Table

Este link fala melhor que eu.


Dica: Por seguranca o sistema mantem duas copias identicas da FAT

Voce só é obrigado a usar fat caso queiraler o cartao no windows. Com o assunto da patente e seu custo envorvido, ta na hora de aprender outro sistema de arquivo como EXT2 do linux, hehe
http://en.wikipedia.org/wiki/Ext4 Ae pessoal. Este aqui esta Fresquinho. Pra algum DOIDO que queira desenvolver algo usando este novo sistema de arquivos:
Em tempo: Este ext4 suporta discos com até 1024 petabytes (Na verdade nem sei quanto é isso, minha mente só chega a imaginar até TeraByte)

http://www.bullopensource.org/ext4/
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor Nightcrawler » 07 Nov 2006 17:49

andre_teprom escreveu:Além de que, como postado no fórum antigo, o FAT agora é patenteado.


Se não me engano, não pode-se formatar nesse formato, mas pode usar se já tiver formatado.
Diego
Avatar do usuário
Nightcrawler
Byte
 
Mensagens: 450
Registrado em: 11 Out 2006 14:20
Localização: Santa Maria - RS

Mensagempor chipselect » 07 Nov 2006 18:41

pode-se usar livremente a FAT-16, desde que você não utilize LFN.
A FAT somente foi patenteada o recurso da LFN.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor joe-adb » 07 Nov 2006 18:42

Cara, os cartões SD podem operar em dois modos:
-no modo SD
-no modo SPI

Por default, eles inicializam no modo SD, você tem que então configurá-lo para trabalhar no modo SPI. Eles são compatíveis (pelo menos teoricamente) com os cartões MMC.

Eu e um colega de trabalho nos batemos bastante pra conseguir fazer funcionar... mas realmente há bastante informação e códigos prontos na internet.

No caso do AVR, existe uma biblioteca chamada procyon que tem um módulo para se trabalhar com os cartões MMC (que são compatíveis, até certo ponto, com os SD) e que implementa FAT também.

Aliás, procurando códigos-exemplo, o que eu mais achei foi para AVR mesmo.

Procure no site da SanDisk o datasheet dos cartões MMC e SD deles... eles têm todos os comandos e explicam em detalhes o funcionamento dos cartões.

Qualquer problema (o que eu creio que vai ser comum, sem querer desestimular) avisa...
joe-adb
Bit
 
Mensagens: 48
Registrado em: 11 Out 2006 22:08

Mensagempor joe-adb » 07 Nov 2006 18:49

jeanfernandes

Agora que li sua resposta cara, fiquei interessado (porque também sofri com o bichinho). Que tipo de problemas você teve?

E o que você quis dizer com "fiz na mão"? Ao invés de usar o SPI por hardware do micro, você emulou um SPI por software?

Eu quase apelei pra isso, mas consegui fazer funcionar (catando informação em fóruns aqui e ali pra complementar o datasheet da SanDisk) "meia boca" -> ele escreve sem problemas mas às vezes ele lê errado, ele lê uns 3 a 4 bytes certos e daí recebe 0x0F, 0x04... mais três ou quatro bytes corretos, e 0x0F, 0x04... sempre nesse padrão... Como tinha outras coisas pra fazer, assumi que estava "funcionando com um pequeno bug" e deixei para depois... você teve algum problema similar?

E se emulou o SPI por software, apenas isso resolveu? Porque pegando o sinal da SPI pelo osciloscópio, aparentemente tá tudo certinho, o cartão que responde de forma maluca (e isso ocorre com todos os 4 cartões que eu testei: 2 da Kingston, 1 da Canon e 1 made in Paragua ... nem lembro a marca).

Você tentou usar tamanhos de bloco diferentes de 512 bytes? Eu li em algum fórum que a maioria dos cartões SD não responde bem se o bloco não for de 512 bytes... mas li tanta informação contraditória que tava difícil saber em quem acreditar (inclusive na sequencia de inicialização do cartão eu tô usando um comando que no datasheet consta como reservado, mas que eu vi num fórum e realmente só com esse comando pro bichinho começar a responder... se não me engano é o CMD8... ou CMD58... não lembro de cabeça agora).
joe-adb
Bit
 
Mensagens: 48
Registrado em: 11 Out 2006 22:08

Mensagempor jeanfernandes » 07 Nov 2006 20:56

KKKKK vamo ser prolixos ne
o cara so quer varar o setor e sair dele...bixo eu vou ver o que te arrum ode link...

LFN - Long File Names, o FAT16 so permite 8 chars para nome + extensao....o LFN usa setores escondidos pra aumentar o nome do camarada.....

Vou ver o que faço eheheheheehehe
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB

Mensagempor fabiorike » 08 Nov 2006 14:15

Gente,

Eu só quero conseguir escrever no Sd card e depois ler este dado, mas eu não estou entendendo como eu posso fazer isso?
Gostaria de ukma luz apenas um exemplo de escrever um caracter já é o bastante.

Me ajudem.

Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor joe-adb » 08 Nov 2006 20:52

Bom, eu acho que ninguém leu o que eu escrevi..

Eu comentei que no Google você encontra toneladas de exemplos, inclusive mencionei a Procyon AVR Lib ...

Mas já que você quer tudo pronto e só porque eu tô de bom humor, vou postar os links aqui. Como você vai poder perceber pelos códigos, é basicamente uma receitinha de bolo usando uma sequência de comandos para a inicialização e configuração do cartão (CMD0, CMD55, ACMD41 - para SD Card ou CMD1 - Para MMC Card), e depois existe um comando para escrita de um bloco inteiro (CMD24) e outro para leitura de um bloco inteiro (CMD17) (assumo que a parte do SPI você sabe como fazer), lembrando que segundo o datasheet você pode setar o tamanho do bloco, embora o padrão (e pelo que vi em comentários na internet, o mais aconselhável) seja o tamanho de 512 bytes:

-Exemplo bem simples, para compilador CCS para PIC:
http://www.microchipc.com/sourcecode/#mmc

-Um projetinho para MSP430
http://www.true-random.com/homepage/pro ... index.html

-Projetinho bem básico também para AVR (e com link para o mesmo projeto usando PIC)
http://www.captain.at/electronic-atmega-mmc.php

-A biblioteca Procyon AVR Lib que eu mencionei (ela tem a interface com cartão MMC/SD nos arquivos mmc.h e mmc.c e se você quiser ir além, ela implementa também sistema de arquivos FAT nos arquivos fat.h e fat.c)
http://hubbard.engr.scu.edu/embedded/avr/avrlib/

-Projeto completinho, para AVR
http://www.roland-riegel.de/sd-reader/index.html

Espero que isso te ajude, fabiorike....


jeanfernandes, não entendi sua resposta, você chegou a ler o que eu te perguntei? Tive alguns problemas justamente tentando ler um bloco (512 bytes), recebendo sempre 3 ou 4 bytes corretos (que eu tinha acabado de escrever) e depois um byte 0x0F e outro byte 0x04, mais 3 ou 4 bytes corretos, e novamente os danados 0x0F, 0x04... seguindo esse padrão até o fim do bloco. Você tem idéia do que possa ser? E mais importante que isso, como resolver? hehe
joe-adb
Bit
 
Mensagens: 48
Registrado em: 11 Out 2006 22:08

Mensagempor fabiorike » 09 Nov 2006 10:54

Então o q eu fiquei com dúvida é como eu sei esses códigos, por exemplo:
para CMD0
if (Command(0x40,0,0,0x95) !=1)

Como eu sei que é 40h e 95h, e para escrever é 58h e assim por diante? Está no datasheet ? Pois eu li uns artigos do Sd e não vi nada. Eu queria entender para quem sabe fazer em assembler, hehe. Pois eu já fiz rotinas para display e teclados em assembler teria que mudar tudo para poder usar este cartão.
Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor joe-adb » 09 Nov 2006 15:47

fabiorike

As informações detalhadas das sintaxes dos comandos e respostas do cartão SD você encontra no datasheet do cartão.
Eu usei o datasheet do cartão da SanDisk
(http://www.sandisk.com/Oem/Manuals/), já que não consegui encontrar o datasheet do cartão da Kingston, com o qual eu trabalhei durante a maior parte do desenvolvimento.
Creio que seja possível também baixar a especificação do padrão SD e MMC dos respectivos sites das organizações (SD: http://www.sdcard.org / MMC : http://www.mmca.org/home )

Só para lembrar (mais uma vez), o cartão SD é compatível com o cartão MMC e ambos trabalham em dois modos: no modo SPI (que é o que a maioria do pessoal que faz interface com microcontrolador usa, para aproveitar o periférico presente em grande parte dos microcontroladores) ou no modo SD/MMC...

Eu assumo que você vai usar o modo SPI (é o mais fácil) e sabe trabalhar com a SPI do seu micro...

Os comandos que você envia geralmente têm o mesmo número do seu mnemônico acrescidos de um ou com 0x40 (por exemplo, CMD0 = 0x00|0x40 = 0x40... CMD1 = 0x01|0x40 = 0x41), alguns comandos têm argumentos e todos têm que terminar com o envio do CRC (em alguns comandos é obrigatório enviar o CRC correto - no caso do CMD0, é 0x95 - mas o CRC pode ser desabilitado depois do CMD0 ou CMD1, não lembro agora de cabeça - mas está detalhado no datasheet, e daí basta enviar 0xFF ao invés de ter que calcular o CRC correto).
Para cada comando o cartão irá enviar uma resposta... no caso de ser um comando de leitura, após a resposta, ele enviará um pacote de dados, que inicia sempre com um data token (0xFE) seguido pelos dados propriamente ditos e depois pelo CRC.


Se você quer fazer em Assembly não há problema nenhum, inclusive existem códigos de exemplo em Assembly disponíveis na net também. Dependendo da sua familiaridade com o Assembly do seu processador, vai dar o mesmo trabalho que fazer em C (mas eu aconselharia a tentar fazer em C, por questão de elegância e portabilidade).
joe-adb
Bit
 
Mensagens: 48
Registrado em: 11 Out 2006 22:08

Mensagempor fabiorike » 10 Nov 2006 09:00

Bom Dia joe-adb

Eu não encontrei exemplos em assembler, vc sabe de algum site?
Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Próximo

Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x