Memória SD

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Mensagempor fabiorike » 08 Dez 2006 16:13

Boa Tarde.
Eu dei uma lida neste site tem varias coisas boas, mas a minha duvida é:
No datasheet do cartão SD fala que o numeros dos comandos estão em decimal, portanto para somar 40h deve-se transformar para hexadecimal, ai o numero é diferente dos exemplos desse site.
Portant eu nao sei mais o q fazer me ajudem, pois eu mando o CMD0 ele aceita, mas eu mando o CDM55 ele responde ffh, eu acho poois a saida do port aonde eu coloquei o q o sd manda fica todos setados.
Meus comandos

CMD0-> 40h,0,0,0,0,95h
CMD55->77h,0,0,0,0,0ffh, ja tentei com 95h,0,0,0,0,0ffh
ACMD41->69h,0,0,0,00ffh

Obrigado pela atenção mais uma vez
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor jeanfernandes » 08 Dez 2006 18:15

Fabio eu pus um mosfetzim SI2315BDS da Vishay pra controle de alimentacao.....mas o Rodrigo PA me deu as dicas de por os pinos em OFF quando desligar o cartao

Usei o SI pois vi num hardware da VLSI mas qq transistor de vergonha com baixo valor de RDS vira....

Xau...
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 proex » 09 Dez 2006 08:59

Bom, pra começar o CMD0 nao é 40h,0,0,0,0,95h.

O correto é CMD0-> 40h,00h,00h,00h,00h,95h
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor chipselect » 09 Dez 2006 21:12

boa noite fabiorike

Sim, os comandos descritos nos pdfs são todos em decimal, ou seja, CMD55 corresponde a 0x37, daí vc tem que "somar" o 0x40 e dá 0x77, que é o primeiro byte do "pacote" de 6 bytes, ficando os 6 bytes igual a (sem calcular o checksum):
77 00 00 00 00 95

O site sobre a FAT que o pessoal passou tem essa página aqui também:
http://elm-chan.org/docs/mmc/mmc_e.html
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor fabiorike » 11 Dez 2006 08:42

Bom Dia

Proex qual é a diferença de por 40h,0,0,0,0,95h e 40h,00h,00h,00h,00h,95h?

Obrigado pessoal pelas dicas.
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor Jorge_Francisco » 11 Dez 2006 09:28

fabiorike escreveu:Bom Dia

Proex qual é a diferença de por 40h,0,0,0,0,95h e 40h,00h,00h,00h,00h,95h?

Obrigado pessoal pelas dicas.


Nenhuma!
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor fabiorike » 11 Dez 2006 16:27

Boa Tarde Chipselect

No site que vc me passou diz que depois que mandar o CMD0, o SD so aceita o CMD1, ACMD41,CMD58, mas para eu mandar o ACMD41 primeiramente devo mandar o CMD55 certo?

Deve-se mandar alguns bytes para esperar a resposta?
Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor proex » 11 Dez 2006 18:07

Fabio, a inicializaçao do cartao é feita com a seguinte sequencia:

1-Ao energizar o circuito (MCU + CARTÃO) coloque o Pino /CS do cartão em nivel lógico alto (HI).

2-Configure o hardware SPI do seu MCU da forma correta para funcionar. Com velocidade de 400Khz.

3-Dê um tempo de 1 ou 2 segundos. (Antes de começar a enviar comandos ao cartão).


4-Envie ao cartão, 10 Bytes de "0xFF" mantendo o Pino /CS do cartão em nivel lógico alto (HI).

(O cartão nao fará nada com esses 10 bytes de 0xFF apenas vai aproveitar os pulsos de clock para iniciar processos internos)

5-Resetando o cartão (CMD0). De agora em diante vc deve baixar o pino /CS antes de enviar os 8 bytes de comando e subir o pino /CS após isso.

Envie ao cartão, o comando: 0X40,0X00,0X00,0X00,0X00,0X95,0XFF,0XFF

Após enviar o ultimo 0XFF da sequencia acima, vc deve verificar no buffer de recepçao da SPI se tem o valor 0X01. Essa é a resposta do cartão para esse comando e indica que o cartão reconheceu o comando.

Envie então um byte de 0XFF ao cartão com o Pino /CS em HI.

6-Enviando comando de inicializaçao (CMD1).

Envie ao cartão, o comando: 0X41,0X00,0X00,0X00,0X00,0X95,0XFF,0XFF

A resposta do cartao deverá ser 0X00.

Envie então um byte de 0XFF ao cartão com o Pino /CS em HI.

7-Tempo de 2 segundos antes de começar a enviar comando de leitura e gravaçao ao cartão.

É isso.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor chipselect » 11 Dez 2006 23:27

sim, para mandar um ACM41, vc manda um cmd55 antes.

Eu envio nessa sequencia (após enviar cmd0):
CMD55, ACMD41 e CMD1

fico enviando esses três comandos em sequencia até obter uma resposta positiva, com intervalo entre cada envio.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor fabiorike » 12 Dez 2006 14:22

BoaTarde,
O cartão está respondendo 0x01 para todos os comandos, CMD55,ACMD41 e para o CMD1 dois cartõesd que eu tenho aqui os dois responderam 0x01 em tudo, quando eu mando um byte ffh, depois da resposta e com o CS alto.Quansdo eu nao mando eu nao consigo ler a resposta, minha rotina para recepção é essa. depois da subrotina para transmitir o uC retorna e eu lcall recepcao

recepcao: mov SPDR,A
recepcao1:mov A,SPSR
jnb ACC.7,recepcao1
mov A,SPDR
ret
Está fazer isso?
Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor fabiorike » 12 Dez 2006 16:15

Consegui ler a resposta,só que o problema é q a resposta é 05h, ou seja, o SDcard responde "Comando Ilegal". nem tenho ideia do q pode ser.
Estou mandando o comando nesta sequencia CMD55,ACMD41, CMD0 responde 05h.
E quando eu mando o Comando CMD1 o SD retorna 01h. será q devo mandar denovo o CMd1?

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

Mensagempor fabiorike » 13 Dez 2006 10:38

Boa Tarde ChipSelect

Qual seria o tempo de intervalo para cada comando?
Vc ve a resposta de cada comando ou so no final do CMD1?
Obrigado
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor fabiorike » 13 Dez 2006 13:21

Boa Tarde ChipSelect, e Proex

Vitória consegui inicializar o SD card, aeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Agora vou começar a escrever e ler este bendito cartão.
Obrigado galera
fabiorike
Bit
 
Mensagens: 46
Registrado em: 16 Out 2006 10:32

Mensagempor fabiorike » 13 Dez 2006 13:32

Para escrever agora,
eu preciso mudar o clock do SPI?

estou mandnado este Comando para escrever, está certo?

CMD24-> 58h,00h,00h,00h,01h,0ffh
E para ler este bloco

CMD17->51h,00h,00h,00h,01h,0ffh


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

Mensagempor proex » 13 Dez 2006 14:49

Agora que vc inicializou o cartao, vc pode aumentar a velocidade do SPI.

Quanto ao comando de escrita o certo é:

58h,00h,00h,00h,00h,ffh para escrever no primeiro bloco;

58h,00h,00h,01h,00h,ffh para escrever no segundo bloco;

58h,00h,00h,02h,00h,ffh para escrever no terceiro bloco;

Para ler é a mesma coisa, só trocando o comando.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

AnteriorPróximo

Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x